作业-第05周--课堂-Day18-linux用户管理知识与应用实践

Day18 课堂笔记

1. 调试cron定时任务的技巧总结

1)、查看错误日志

/var/log/cron

学会最小化排除:先清空

>/var/log/cron

然后在测试和观察。

2)、增加执行任务频率调试任务

把频率调快。比如:每天执行的任务,可以修改为每分钟等执行。

3)、把定时任务执行时间比当前时间拖后几分钟

比如需要凌晨三点执行定时任务,而当前系统时间为15:00,咱们就把定时任务时间调整15:05执行 ,有个5分钟的提前量。

4)、调整系统时间(测试环境还凑合,不要用于生产环境)
比如需要凌晨三点执行定时任务,就把系统时间调整到2:55。

5)、通过脚本日志输出调试定时任务

定时任务输出

* * * * *  /bin/sh /server/scripts/bak.sh &>/tmp/bak.log

脚本输出:

tar zcvf oldboy.tar.gz  ./data &>/tmp/tar.log

注意:
有时候程序只能执行一次。一定要在测试环境测试好,然后直接复制到正式。

一般企业代码发布流程:
办公室测试环境===>IDC机房测试环境===>IDC机房正式环境

这样可以防止在正式环境发生错误,从而影响用户体验,业务稳定。

2. crontab生产故障案例分析及解决

2.1 No space left on device常见企业故障案例

磁盘满的报错,原因往往是inode被占满了。查看用df -i
因为定时任务没有加&>/dev/null,定时任务执行的时候把输出给系统root发邮件。
邮件服务器postfix服务默认不开,这些给系统发的邮件就会堆在临时目录(大量小文件存在)

CentOS6 /var/spool/clientmqueue/     
CentOS7 /var/spool/postfix/maildrop/ 

预防方法:
1)、尽量将cron任务里面的命令或脚本中的结尾加上&>/dev/null,或在写定时任务执行脚本时,把输出定向到文件中(适合所有的情况)

2)、开启邮件服务,不过最好不做,因为邮件服务会带来额外的安全问题

3)、加定时清理任务,比如,将find /var/spool/postfix/maildrop/ -type f -mtime +30|xargs rm -f放入定时任务,每周处理一次。

2.2 crond export变量生产故障案例

程序通过手动可以执行,放定时任务里不执行

定时任务在执行脚本的时候,多数情况没办法加载环境变量,特别是/etc/profile
登录后怎么操作都对,但是就是放到定时任务不行。那是因为以下原因:
命令行中:bash登录方式
1.手工登录后,加载所有环境变量(~/.bash_profile,~/.bash_rc,/etc/profile,/etc/bashrc

2.定时任务执行脚本属于非登录状态,可能加载环境变量(/etc/bashrc)。

所有运维都会把变量放到此文件/etc/profile,把这个文件里的变量定义

解决方法:
在执行的脚本中 重新定义。

具体为crond执行Shell时只能识别为数不多的系统环境变量,普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export重新声明下该变量,以确保脚本正确执行。以后要将其作为一个开发基本规范写上。

定时任务的编写及调试逻辑图-58期-王俊超

3 用户管理知识与应用实践

3.1 信息文件相关

3.1.1 存储用户信息文件/etc/passwd

作用:存储系统用户的信息,/etc/passwd文件实际内容如下(前五行):

[root@oldboyedu  ~]# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

下面以root一行为例介绍各个字段的作用:

root :x :0 :0 :root :/root :/bin/bash
用户名称 :用户密码 :用户UID :用户GID :用户说明 :用户家目录 :shell解释器

3.1.2 存储用户密码信息文件/etc/shadow

/etc/shadow文件的权限:

[root@oldboyedu  ~]# ll /etc/shadow
---------- 1 root root 750 Mar 28 21:00 /etc/shadow

其文件内容为(前5行):

[root@oldboyedu  ~]# head -5 /etc/shadow
root:$6$ti9fY3/V$dyKX77ydwxj1FgU1IdITVrn/F//SrQPWtKLX04.qQp2ce20BvGuvs.gC0YyMZepScy9ittLiOU12X7rhM5DRf0:17972:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::

下面以bin为例对各个字段的详细说明:

字段名称 注释说明
bin 用户名称
:* 用户密码(如果有密码,是加密过的字符串)
:17834 最近更改密码的时间
:0 禁止修改密码的天数
:99999 用户必须更改口令的天数
:7 警告更改密码的期限
: 不活动时间
: 失效时间
: 标志,保留

提示:

  • 使用useradd命令添加用户会更改/etc/passwd、/etc/shadow、/etc/group、//etc/gshadow文件。
  • 使用passwd为用户设置密码会更改/etc/shadow文件。

3.1.3 用户组信息文件/etc/group

/etc/group文件时存储用户组相关信息的文件,实际内容格式为下:

[root@oldboyedu  ~]# head -5 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:

下面以root一行为例介绍各个字段的作用:

字段名称 注释说明
root 用户组的名称
:x 用户组密码,通常不设置密码
:0 用户组ID
: 用户组成员

提示:

  • 使用groupadd添加用户组会更改/etc/group、/etc/gshadow文件。

3.1.4 用户组密码文件/etc/gshadow

/etc/gshadow是存储用户组密码信息的文件,在实际运维工作中,一般不用这个功能,因此了解即可,在此略过。

md5sum 给文件设置指纹(计算和检查MD5数字信息)

[root@oldboyedu ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
2fe9f002726ed0a138d67cd44722f1a6  /etc/passwd
c2ca41415dca17f1a3dc3c286a9b9bff  /etc/shadow
c475144a13d87a400b5e16fe6bd70baf  /etc/group
659ef4f533df0fa7e457f87755fb1c27  /etc/gshadow

文件发生变化:

[root@oldboyedu ~]# useradd bingbing
[root@oldboyedu ~]# md5sum /etc/passwd /etc/shadow /etc/group /etc/gshadow
39d60eff90ecd0326fe59e6464b464ad  /etc/passwd
0aa8d3b157f042876ec0190a2808a377  /etc/shadow
cee8bc6e85f9dfb9dc0a04e452e834f4  /etc/group
cdfd26351f409ee32fca53a22ad15912  /etc/gshadow

3.2 常见命令汇总

3.2.1 有关用户管理的常见命令汇总

1)和用户直接相关的命令

  • useradd 添加用户
  • usermod 修改用户信息
  • userdel 删除用户及和用户相关联的配置或文件

2)和用户密码直接相关的命令
passwd 为用户设置密码
chage 修改用户密码属性信息

3)其他用户相关命令
id 查看用户的UID、GID及所归属的用户信息
su 切换用户角色工具
sudo 以一个其它用户身份(主要是root用户)执行命令的工具,普通用户用来提权的工具
visudo 用来编辑suders配置文件(sudo授权文件)的工具

3.2.2 有关用户组管理的常见命令汇总

命令 注释说明
groupadd 添加用户组
groupdel 删除用户组
groupmod 修改用户组信息
gpasswd 为用户组设置密码
groups 显示用户组所属的用户组
newgrp 更改用户所属的有效用户组

3.3 添加用户命令useradd

1. useradd命令的工作原理介绍

不带参数添加用户时,首先会读取/etc/login.defs/etc/default/useradd配置文件中的预定义规则,并根据设置的规则添加用户,同时会向/etc/passwd/etc/group文件添加新建的用户和用户组记录。当然,/etc/shadow/etc/gshadow也会同步生成记录,同时系统还会根据/etc/login.defs/etc/default/useradd配置文件中的信息建立用户的家目录,并复制/etc/skel中的所有隐藏的环境配置文件到新用户的家目录中,以完成对用户环境的初始化设置。

1.1)和创建用户组相关的文件/etc/login.defs

下面是CentOS 7.6版本的/etc/login.defs文件内容及注释说明

[root@oldboyedu  ~]# cat /etc/login.defs|grep -v "^$"
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR  Maildir
MAIL_DIR    /var/spool/mail          <-->设定用户对应的mail文件所在路径
#MAIL_FILE  .mail
# Password aging controls:
#
#   PASS_MAX_DAYS   Maximum number of days a password may be used.
#   PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#   PASS_MIN_LEN    Minimum acceptable password length.
#   PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999                <-->密码最长可以使用的天数
PASS_MIN_DAYS   0                    <-->更换密码的最小天数
PASS_MIN_LEN    5                    <-->密码的最小长度
PASS_WARN_AGE   7                    <-->密码失效前提前多少天开始警告
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000        <-->普通用户默认最小UID为1000
UID_MAX                 60000        <-->普通用户默认最大UID为60000
# System accounts
SYS_UID_MIN               201        <-->系统用户默认最小UID为201
SYS_UID_MAX               999        <-->系统用户默认最大UID为999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000        <-->普通用户组默认最小GID为1000
GID_MAX                 60000        <-->普通用户组默认最大GID为60000
# System accounts
SYS_GID_MIN               201        <-->系统用户组默认最小GID为201
SYS_GID_MAX               999        <-->系统用户组默认最大GID为999
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD    /usr/sbin/userdel_local 
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes                      <-->是否创建用户家目录
# The permission mask is initialized to this value. If not specified, 
# the permission mask will be initialized to 022.
UMASK           077                  <-->家目录对应的umask默认值
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes                  <-->删除用户同时删除用户组(该组没有其他成员)
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512                <-->密码加密算法SHA512

1.2)和创建用户相关的文件/etc/default/useradd

内容如下:

[root@oldboyedu  ~]# 
[root@oldboyedu  ~]# cat /etc/default/useradd 
# useradd defaults file
GROUP=100                <-->依赖于/etc/login.defs的USERGROUPS_ENAB参数,如果为no,则此处控制
HOME=/home               <-->把用户的家目录建在/home目录下
INACTIVE=-1              <-->是否启用用户过期停权,-1表示不启用
EXPIRE=                  <-->用户终止日期,不设置表示不启用
SHELL=/bin/bash          <-->新用户默认所用的shell解释器类型
SKEL=/etc/skel           <-->配置新用户家目录的默认环境变量存放路径
CREATE_MAIL_SPOOL=yes    <-->创建mail文件

1.3)和创建用户相关的目录/etc/skel

内容如下:

[root@oldboyedu  ~]# ls -lA /etc/skel/
total 12
-rw-r--r--. 1 root root  18 Oct 31 01:07 .bash_logout  <-->用户环境变量,退出时加载
-rw-r--r--. 1 root root 193 Oct 31 01:07 .bash_profile <-->用户环境变量,登录时加载
-rw-r--r--. 1 root root 231 Oct 31 01:07 .bashrc       <-->用户环境变量,登录时加载

企业面试案例:

使用oldboy用户登录到Linux系统后,发现提示符为如下所示异常情况,请问该如何恢复到正常的Linux命令行提示符情况?

-bash-4.2$
-bash-4.2$

解答:
首先模拟故障重现,如下步骤:

[root@oldboyedu  ~]# su - oldboy          <--> 切换oldboy用户下
Last login: Sat Mar 30 09:42:31 CST 2019 from 10.0.0.1 on pts/0
[oldboy@oldboyedu  ~]$ rm -f .bash*       <-->故障原因就是用户家目录下的环境变量不存在了
[oldboy@oldboyedu  ~]$ logout             <-->快捷键(Ctrl+d)退出当前环境
[root@oldboyedu  ~]# su - oldboy          <-->重新切到oldboy用户下
Last login: Sat Mar 30 12:19:06 CST 2019 on pts/0
-bash-4.2$                                <-->故障重现

下面是故障恢复方案及步骤:
方法1:永久生效(正确方法)

-bash-4.2$ cp /etc/skel/.bash* ~/            <-->从/etc/skel中将所有环境变量文件复制回来,注意用户
-bash-4.2$ logout                            <-->快捷键(Ctrl+d)退出当前环境
[root@oldboyedu  ~]# su - oldboy             <-->重新切到oldboy用户下
Last login: Sat Mar 30 12:19:55 CST 2019 on pts/0
[oldboy@oldboyedu  ~]$                       <-->故障排除
-bash-4.2$ source ./.bash_profile ./.bashrc  <-->若还未生效,则执行此命令。
[oldboy@oldboyedu  ~]$                       <-->故障排除
-bash-4.2$ cp /etc/skel/.bash* .             <-->没权限拷贝怎么办
cp: cannot create regular file ‘./.bash_logout’: Permission denied
cp: cannot create regular file ‘./.bash_profile’: Permission denied
cp: cannot create regular file ‘./.bashrc’: Permission denied
-bash-4.2$ logout                            <-->重新切到oldboy用户下
[root@oldboyedu  ~]# cd /home/oldboy
[root@oldboyedu  /home/oldboy# cp /etc/skel/.bash* .
[root@oldboyedu  /home/oldboy]# su - oldboy
Last login: Sat Mar 30 17:00:52 CST 2019 on pts/0
[oldboy@oldboyedu  ~]$ 

方法2:临时生效(不推荐)
执行以下命令:

export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\] \w\[\e[0m\]]\$'

useradd命令的常用参数介绍

如表所示:

参数选项 注释说明
-c 设置新用户在passwd文件中的说明字段的信息
-d 新用户每次登入时使用的家目录
-e 用户终止日期。日期指定格式为MM/DD/YY
-f 用户过期几日后永久停权
-g 指定新用户所属的用户组(须系统存在)
-G 指定新用户所属的多个不同的用户组,用“,”隔开
-m 创建并指定用户家目录
-M 不建立用户的家目录
-s 指定解释器
-u 指定用户ID

范例1: 不加任何参数,添加用户alex

[root@oldboyedu  ~]# useradd alex
[root@oldboyedu  ~]# ls -ld /home/alex/
drwx------ 2 alex alex 62 Mar 30 14:56 /home/alex/
[root@oldboyedu  ~]# ls -la /home/alex/
total 12
drwx------  2 alex alex  62 Mar 30 14:56 .
drwxr-xr-x. 4 root root  32 Mar 30 14:56 ..
-rw-r--r--  1 alex alex  18 Oct 31 01:07 .bash_logout
-rw-r--r--  1 alex alex 193 Oct 31 01:07 .bash_profile
-rw-r--r--  1 alex alex 231 Oct 31 01:07 .bashrc
[root@oldboyedu  ~]# grep -w 'alex' /etc/passwd
alex:x:1001:1001::/home/alex:/bin/bash
[root@oldboyedu  ~]# tail -1 /etc/group
alex:x:1001:
[root@oldboyedu  ~]# tail -1 /etc/shadow
alex:!!:17985:0:99999:7:::
[root@oldboyedu  ~]# tail -1 /etc/gshadow
alex:!::

范例2: useradd的-g、-u参数的使用示例

[root@oldboyedu  ~]# useradd zuma -u 1111 -g root
[root@oldboyedu  ~]# id zuma
uid=1111(zuma) gid=0(root) groups=0(root)

范例3: useradd的-M、-s参数的使用示例

[root@oldboyedu  ~]# useradd mysql -s /sbin/nologin -M
[root@oldboyedu  ~]# tail -1 /etc/passwd
mysql:x:1112:1112::/home/mysql:/sbin/nologin

范例4: useradd的-e参数的使用示例

[root@oldboyedu  ~]# date +%F
2019-03-30
[root@oldboyedu  ~]# useradd pig -e "2019/04/30"
[root@oldboyedu  ~]# chage -l pig
Last password change                : Mar 30, 2019
Password expires                    : never
Password inactive                   : never
Account expires                     : Apr 30, 2019                <-->修改成功
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

范例5: useradd的-c、-u、-G、-s、-d、-m参数的使用示例

[root@oldboyedu  ~]# useradd -c "good training" -u 2222 -G root,oldboy,sa -s /bin/sh -d /home/luffy oldboyedu
[root@oldboyedu  ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:2222:2222:good training:/home/luffy:/bin/sh
[root@oldboyedu  ~]# id oldboyedu
uid=2222(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),0(root),1000(oldboy),1114(sa)
[root@oldboyedu  ~]# ls -ld /home/luffy/
drwx------ 2 oldboyedu oldboyedu 62 Mar 30 15:09 /home/luffy/

useradd命令的-D参数介绍

useradd -D的作用是改变配置文件/etc/default/useradd文件的默认设置值,也可直接编辑。

范例1:设置添加用户时的默认解释器类型为/sbin/nologin

[root@oldboyedu  ~]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@oldboyedu  ~]# grep -w "SHELL" /etc/default/useradd 
SHELL=/bin/bash
[root@oldboyedu  ~]# useradd -D -s /sbin/nologin
[root@oldboyedu  ~]# grep -w "SHELL" /etc/default/useradd 
SHELL=/sbin/nologin
[root@oldboyedu  ~]# useradd newuser
[root@oldboyedu  ~]# grep 'newuser' /etc/passwd
newuser:x:2223:2223::/home/newuser:/sbin/nologin
[root@oldboyedu  ~]# useradd -D -s /bin/bash
[root@oldboyedu  ~]# grep -w "SHELL" /etc/default/useradd 
SHELL=/bin/bash

2.usermod:用户信息修改相关命令

usermod命令的功能很强大,但在生产场景中使用的频率并不是很高,参数和useradd参数大多数相同。

范例1: usermod的-c、-u、-G、-s、-d、参数的使用示例

[root@oldboyedu  ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:2222:2222:good training:/home/luffy:/bin/sh
[root@oldboyedu  ~]# id oldboyedu
uid=2222(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),0(root),1000(oldboy),1114(sa)
[root@oldboyedu  ~]# ls -ld /home/luffy/
drwx------ 2 oldboyedu oldboyedu 62 Mar 30 15:09 /home/luffy/

[root@oldboyedu  ~]# usermod -c "good" -u 3333 -G sa -s /sbin/nologin -d /home/oldboyedu oldboyedu 
[root@oldboyedu  ~]# grep 'oldboyedu' /etc/passwd
oldboyedu:x:3333:2222:good:/home/oldboyedu:/sbin/nologin
[root@oldboyedu  ~]# id oldboyedu
uid=3333(oldboyedu) gid=2222(oldboyedu) groups=2222(oldboyedu),1114(sa)
[root@oldboyedu  ~]# ls -l /home/
total 0
drwx------  2 alex    alex      62 Mar 30 14:56 alex
drwx------  2    2222 oldboyedu 62 Mar 30 15:09 luffy
drwx------  2 newuser newuser   62 Mar 30 15:23 newuser
drwx------. 3 oldboy  oldboy    95 Mar 26 11:25 oldboy
drwx------  2 pig     pig       62 Mar 30 15:04 pig
drwx------  2 zuma    root      62 Mar 30 15:00 zuma
[root@oldboyedu  ~]# 

从上面可以发现-d参数并未创建新的家目录,下图为演示效果:


作业-第05周--课堂-Day18-linux用户管理知识与应用实践_第1张图片
演示效果

可以理解为:-m -d 参数将原家目录改个名字而已

[root@oldboyedu  ~]# ll /home/
total 0
drwxr-xr-x  2 root   root   80 Mar 30 17:02 abc
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu  ~]# ll /home/abc/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt
[root@oldboyedu  ~]# usermod -md /home/123 oldboyedu 
[root@oldboyedu  ~]# ll /home/
total 0
drwxr-xr-x  2 root   root   80 Mar 30 17:02 123
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu  ~]# ll /home/123/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt
[root@oldboyedu  ~]# usermod -md /home/456 oldboyedu 
[root@oldboyedu  ~]# ll /home
total 0
drwxr-xr-x  2 root   root   80 Mar 30 17:02 456
drwx------. 3 oldboy oldboy 95 Mar 26 11:25 oldboy
[root@oldboyedu  ~]# ll /home/456/
total 0
-rw-r--r-- 1 root root 0 Mar 30 16:14 oldboy.txt

3.userdel:删除用户相关命令

参数:

  • -f 强制删除用户,即使用户当前已登录
  • -r删除用户的同时,删除与用户相关的所有文件

提示:在生产环境中,最好不要直接删除用户,而是修改/etc/passwd配置文件,将要删除的用户用#号注释掉即可,从而防止出现无法弥补的错误。

4.groupadd:添加用户组命令

参数:

  • -g gid 指定用户组的gid
  • -f 新增一个账户,强制覆盖一个已存在的用户组

5.groupdel:删除用户组命令

6.passwd:修改用户密码命令

参数:

  • -stdin 从标准输入读取密码字符串

使用范例:
范例1:修改用户密码示例:
(1)修改自身用户:

root用户修改自身,不需要提供原始密码
[root@oldboyedu  ~]# passwd 
Changing password for user root.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
非root用户修改自身,需要提供原始密码
[oldgirl@oldboyedu  ~]$ whoami 
oldgirl
[oldgirl@oldboyedu  ~]$ passwd 
Changing password for user oldgirl.
Changing password for oldgirl.
(current) UNIX password:                                     <-->提供原始密码
New password: 
BAD PASSWORD: The password is too similar to the old one     <-->密码太简单
New password: 
BAD PASSWORD: The password is shorter than 8 characters      <-->密码短
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

(2)修改普通用户:

[root@oldboyedu  ~]# useradd oldgirl
[root@oldboyedu  ~]# passwd oldgirl 
Changing password for user oldgirl.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

范例2:显示账号密码信息示例:

[oldgirl@oldboyedu  ~]$ passwd -S oldgirl 
Only root can do that.            <-->只有root用户才能执行
[oldgirl@oldboyedu  ~]$ logout
[root@oldboyedu  ~]# passwd -S oldgirl 
oldgirl PS 2019-03-30 0 99999 7 -1 (Password set, SHA512 crypt.)

范例3:一条命令非人工交互式设置密码(生产使用技巧)

[root@oldboyedu  ~]# echo "12345678" |passwd --stdin oldgirl 
Changing password for user oldgirl.
passwd: all authentication tokens updated successfully.

范例4:多个参数的示例

[root@oldboyedu  ~]# chage -l oldgirl 
Last password change                    : Mar 30, 2019
Password expires                    : never
Password inactive                   : never
Account expires                     : never
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7
[root@oldboyedu  ~]# passwd -n 7 -x 60 -w 10 -i 30 oldgirl
Adjusting aging data for user oldgirl.
passwd: Success
[root@oldboyedu  ~]# chage -l oldgirl 
Last password change                    : Mar 30, 2019
Password expires                    : May 29, 2019
Password inactive                   : Jun 28, 2019
Account expires                     : never
Minimum number of days between password change      : 7
Maximum number of days between password change      : 60
Number of days of warning before password expires   : 10

企业场景下用户及密码管理思路

  • 用户密码要足够复杂,多种字符组合
  • 统一管理(采用微软活动目录或openLDAP开源工具)
  • 动态密码:动态口令等

7.chpasswd:批量更新用户的密码命令

范例1:批量修改密码的实践

系统存在的用户:oldboy1和oldboy2(没有需创建)

[root@oldboyedu  ~]# useradd oldboy1
[root@oldboyedu  ~]# useradd oldboy2
[root@oldboyedu  ~]# id oldboy1
uid=3335(oldboy1) gid=3335(oldboy1) groups=3335(oldboy1)
[root@oldboyedu  ~]# id oldboy2
uid=3336(oldboy2) gid=3336(oldboy2) groups=3336(oldboy2)

方法1:命令行直接输入并执行

[root@oldboyedu  ~]# chpasswd 
oldboy1:123456                    <-->一行一行输入
oldboy2:123456                    <-->一行一行输入
                                  <-->空行处,按Ctrl+d结束输入
[root@oldboyedu  ~]# 

方法2:把用户和密码写入文件里执行

[root@oldboyedu  ~]# cat >user.txt < oldboy1:12345678
> oldboy2:12345678   <-->格式:用户名:密码,一行一个用户
> EOF
[root@oldboyedu  ~]# cat user.txt 
oldboy1:12345678
oldboy2:12345678
[root@oldboyedu  ~]# chpasswd 

范例2:批量创建用户、批量修改密码、批量删除用户(不需脚本实现)。

批量创建用户:

[root@oldboyedu  ~]# ls /home/
oldboy
[root@oldboyedu  ~]# seq -w 20|sed -nr 's#(.*)#useradd oldboy\1#gp'|bash
[root@oldboyedu  ~]# ls /home/|xargs -n7
oldboy oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06
oldboy07 oldboy08 oldboy09 oldboy10 oldboy11 oldboy12 oldboy13
oldboy14 oldboy15 oldboy16 oldboy17 oldboy18 oldboy19 oldboy20
[root@oldboyedu  ~]# tail -2 /etc/passwd
oldboy19:x:3355:3355::/home/oldboy19:/bin/bash
oldboy20:x:3356:3356::/home/oldboy20:/bin/bash

批量修改密码:

[root@oldboyedu  ~]# tail -2 /etc/shadow
oldboy19:!!:17985:0:99999:7:::
oldboy20:!!:17985:0:99999:7:::
[root@oldboyedu  ~]# seq -w 20|sed -nr 's#(.*)#oldboy\1:123456#gp'|chpasswd
[root@oldboyedu  ~]# tail -2 /etc/shadow
oldboy19:$6$jFht4/j7xhsJBX5$HVD1fg2y5rxwlNmZIAvZehgp.klwt5WEE7Mh6x67ASgpsK3o12sOfdplfqbmlA6Rpzq7JOGHysdqI7rvryb1L/:17985:0:99999:7:::
oldboy20:$6$WYEUw/WyJ$vrGmOtFniEnHSgcWVGZZfcmci/KJ9.MWzO3OkjI74aRiU/UUzbZ0W2h/n1LanHxFGURRfC.538n2DJ04zQR0D.:17985:0:99999:7:::

or

[root@oldboyedu  ~]# seq -w 20|sed -nr 's#(.*)#echo "123456"|passwd --stdin oldboy\1#gp'|bash &>1.txt
[root@oldboyedu  ~]# tail -6 1.txt 
Changing password for user oldboy18.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy19.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy20.
passwd: all authentication tokens updated successfully.

批量删除用户:

[root@oldboyedu  ~]# ls /home/|xargs -n7
oldboy oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06
oldboy07 oldboy08 oldboy09 oldboy10 oldboy11 oldboy12 oldboy13
oldboy14 oldboy15 oldboy16 oldboy17 oldboy18 oldboy19 oldboy20
[root@oldboyedu  ~]# seq -w 20|sed -nr 's#(.*)#userdel -r oldboy\1#gp'|bash
[root@oldboyedu  ~]# ls /home/|xargs -n7
oldboy
[root@oldboyedu  ~]# tail /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
alex:x:1001:1001::/home/alex:/bin/bash
zuma:x:1111:0::/home/zuma:/bin/bash
mysql:x:1112:1112::/home/mysql:/sbin/nologin
pig:x:1113:1113::/home/pig:/bin/bash
oldboyedu:x:3333:2222:good:/home/456:/bin/bash
newuser:x:2223:2223::/home/newuser:/sbin/nologin
oldgirl:x:3334:3334::/home/oldgirl:/bin/bash
oldboy1:x:3335:3335::/home/oldboy1:/bin/bash
oldboy2:x:3336:3336::/home/oldboy2:/bin/bash

8.chage:修改用户密码有效期命令

参数:

  • -l 显示用户有效期信息

范例1:多个参数示例

[root@oldboyedu  ~]# useradd range
[root@oldboyedu  ~]# chage -m7 -M60 -w10 -I30 range 
[root@oldboyedu  ~]# chage -l range 
Last password change                    : Mar 30, 2019
Password expires                    : May 29, 2019
Password inactive                   : Jun 28, 2019
Account expires                     : never
Minimum number of days between password change      : 7
Maximum number of days between password change      : 60
Number of days of warning before password expires   : 10

9 用户查询相关命令

作业-第05周--课堂-Day18-linux用户管理知识与应用实践_第2张图片
演示效果

作业-第05周--课堂-Day18-linux用户管理知识与应用实践_第3张图片
演示效果

作业-第05周--课堂-Day18-linux用户管理知识与应用实践_第4张图片
演示效果

你可能感兴趣的:(作业-第05周--课堂-Day18-linux用户管理知识与应用实践)