3. 用户和组管理
用户配置文件和密码配置文件
/etc/passwd
[root@lz-01 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
/etc/passwd 由:分割成7个字段,每个字段的具体含义如下
- 第1段为用户名,代表用户账号的字符串
- 第2段存放的是账号的口令,早期Unix系统口令存在这里,后将其放在/etc/shadow中,这里用一个x代替
- 第3段是一个数字,代表用户标识号,称为uid; root的uid=0
- 第4段数字,表示组标识号,称为gid
- 第5段为注释说明,没有实际意义,通常记录用户的一些属性.可使用chfn命令更改信息
- 第6段用户的家目录,可自定义
- 第7段用户的shell
/etc/shadow
[root@lz-01 ~]# cat /etc/shadow
root:$6$BuqDCNXE$ALHzqpqTVXcIg35U9lkTNbxIgCKWWAKNLhJAIyy.vkLtHaZo/XikvlRWdBw37vYYq2ZWLChvODmALGdkpflzE0:17968:0:99999:7:::
/etc/shadow和/etc/passwd类似,由:分割为9段.每个字段含义如下
-
第1为用户名,与/etc/passwd对应
-
第2段为用户名已加密的密码,是该账号的真正密码. 文件属性是000,
[root@lz-01 ~]# ls -l /etc/shadow ---------- 1 root root 610 3月 20 21:07 /etc/shadow
-
第3段是上次更改密码的日期 这个数字是由1970/1/1和上次更改密码的日期计算出来的.
例如上次更改密码日期2012/1/1, 365*(2012-1970)+(2012-1970)/4+1=15341; 如果是闰年则有366天.
- 第4段为要过多少天才可以更改密码,默认为0,即不受限制
- 第5段为密码多少天之后到期,即在多少天内必须更改密码,否则不能登录系统.默认是99999永远不用更改密码
- 第6段为密码到期前的警告期限.
- 第7段为账号失效期限,若设置为3,表示密码已经到期,用户并没有在到期前修改密码,那么在3天后,这个账号失效,即锁定.
- 第8段为账号的生命周期, 同样是按照1970/1/1计算而来.
- 第9段是保留的,没有意义
/etc/group 和/etc/gshadow
用户组管理
groupadd增加组
命令groupadd格式 groupadd [-g gid]groupname
-g指定uid, 不加-g按照系统默认的gid创建组,和uid一样,是从1000开始.
groupdel删除组
groupdel groupname
删除组时,组里还有用户是不能删除的
[root@lz-01 ~]# groupadd grp1
[root@lz-01 ~]# tail -n1 /etc/group
grp1:x:1002:
[root@lz-01 ~]# groupadd -g 1005 grp2
[root@lz-01 ~]# tail -n2 /etc/group
grp1:x:1002:
grp2:x:1005:
[root@lz-01 ~]# groupdel grp1
[root@lz-01 ~]# tail -n2 /etc/group
testgroup:x:1001:
grp2:x:1005:
[root@lz-01 ~]# groupdel testgroup
[root@lz-01 ~]# tail -n2 /etc/group
user1:x:1000:
grp2:x:1005:
[root@lz-01 ~]# groupdel user1
groupdel:不能移除用户“user1”的主组
[root@lz-01 ~]#
用户管理
useradd增加用户
命令useradd格式 useradd[-u uid][-g gid][-d home][-M][-s]username
-
-u自定义uid
-
-g设定新增用户属于已经存在的某个组,后面可以跟组id或组名
[root@lz-01 ~]# useradd user2 [root@lz-01 ~]# tail -n2 /etc/passwd user1:x:1000:1000::/home/user1:/bin/bash user2:x:1001:1001::/home/user2:/bin/bash [root@lz-01 ~]# useradd -u 1003 -g grp2 user3 [root@lz-01 ~]# tail -n3 /etc/passwd user1:x:1000:1000::/home/user1:/bin/bash user2:x:1001:1001::/home/user2:/bin/bash user3:x:1003:1005::/home/user3:/bin/bash
-
-d自定义用户的家目录
-
-s自定义shell
[root@lz-01 ~]# useradd -u 1004 -g grp2 -d /home/lz111 -s /sbin/nologin user4 [root@lz-01 ~]# tail -n4 /etc/passwd user1:x:1000:1000::/home/user1:/bin/bash user2:x:1001:1001::/home/user2:/bin/bash user3:x:1003:1005::/home/user3:/bin/bash user4:x:1004:1005::/home/lz111:/sbin/nologin [root@lz-01 ~]# ls /home/ lz111 user1 user2 user3
-
-M表示不建立家目录
[root@lz-01 ~]# useradd -M user5 [root@lz-01 ~]# tail -n4 /etc/passwd user2:x:1001:1001::/home/user2:/bin/bash user3:x:1003:1005::/home/user3:/bin/bash user4:x:1004:1005::/home/lz111:/sbin/nologin user5:x:1005:1006::/home/user5:/bin/bash [root@lz-01 ~]# ls /home/ lz111 user1 user2 user3
uid会根据新增用户的uid依次递增, gid则不会
userdel 删除用户
命令userdel格式userdel [-r]username
-
-r作用是删除用户时,同时删除用户的家目录
[root@lz-01 ~]# userdel user3 [root@lz-01 ~]# tail -n5 /etc/passwd chrony:x:998:996::/var/lib/chrony:/sbin/nologin user1:x:1000:1000::/home/user1:/bin/bash user2:x:1001:1001::/home/user2:/bin/bash user4:x:1004:1005::/home/lz111:/sbin/nologin user5:x:1005:1006::/home/user5:/bin/bash [root@lz-01 ~]# userdel -r user2 [root@lz-01 ~]# tail -n5 /etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin user1:x:1000:1000::/home/user1:/bin/bash user4:x:1004:1005::/home/lz111:/sbin/nologin user5:x:1005:1006::/home/user5:/bin/bash [root@lz-01 ~]# ls /home/ lz111 user1 user3 [root@lz-01 ~]# rm -rf /home/user3 [root@lz-01 ~]# ls /home/ lz111 user1
usermod命令
usermod更改用户uid或gid或家目录或shell
[root@lz-01 ~]# user -u 111 username ^C
[root@lz-01 ~]# usermod -u 111 username ^C
[root@lz-01 ~]# usermod -g gid username ^C
[root@lz-01 ~]# usermod -d /home/abc username ^C
[root@lz-01 ~]# usermod -s /sbin/nologin username ^C
usermod -G设置扩展组
[root@lz-01 ~]# id user1
uid=1000(user1) gid=1000(user1) 组=1000(user1)
[root@lz-01 ~]# usermod -G grp2 user1
[root@lz-01 ~]# id user1
uid=1000(user1) gid=1000(user1) 组=1000(user1),1005(grp2)
[root@lz-01 ~]#
用户密码管理
passwd命令
格式passwd [username]
命令后若不加用户名,则是给自己设定密码
密码设定的规则:
- 长度大于10个字符
- 密码中包含大小写字母,数字以及特殊符号*,&,%等
- 不规则性
- 密码中不要出现自己的名字,电话,生日以及公司名字等
若是root账户,可以修改普通用户的名字,普通用户只能修改自己的密码
[root@lz-01 ~]# tail -n3 /etc/shadow
user1:!!:17975:0:99999:7:::
user4:!!:17975:0:99999:7:::
user5:!!:17975:0:99999:7:::
[root@lz-01 ~]# passwd user5
更改用户 user5 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@lz-01 ~]# tail -n3 /etc/shadow
user1:!!:17975:0:99999:7:::
user4:!!:17975:0:99999:7:::
user5:$6$6UoBEnHM$.RNyYd5P3G82ZKfuhdLiLbVwbS31DMtev55HrBeuYh9txvK/CZv8m59Jo61uOsA7widK2JC/9A5jXDMfrmsKH0:17975:0:99999:7:::
[root@lz-01 ~]#
用户没有密码, /etc/shadow中第二位是!!; 若用户是锁定的, 第二位是*
passwd -l 锁定账户和passwd -u 解锁账户
[root@lz-01 ~]# passwd -l user5
锁定用户 user5 的密码 。
passwd: 操作成功
[root@lz-01 ~]# tail -n3 /etc/shadow
user1:!!:17975:0:99999:7:::
user4:!!:17975:0:99999:7:::
user5:!!$6$6UoBEnHM$.RNyYd5P3G82ZKfuhdLiLbVwbS31DMtev55HrBeuYh9txvK/CZv8m59Jo61uOsA7widK2JC/9A5jXDMfrmsKH0:17975:0:99999:7:::
[root@lz-01 ~]# passwd -u user5
解锁用户 user5 的密码。
passwd: 操作成功
[root@lz-01 ~]# tail -n3 /etc/shadow
user1:!!:17975:0:99999:7:::
user4:!!:17975:0:99999:7:::
user5:$6$6UoBEnHM$.RNyYd5P3G82ZKfuhdLiLbVwbS31DMtev55HrBeuYh9txvK/CZv8m59Jo61uOsA7widK2JC/9A5jXDMfrmsKH0:17975:0:99999:7:::
[root@lz-01 ~]#
usermod -L 锁定账户和usermod -U 解锁账户
[root@lz-01 ~]# usermod -L user5
[root@lz-01 ~]# tail -n3 /etc/shadow
user1:!!:17975:0:99999:7:::
user4:!!:17975:0:99999:7:::
user5:!$6$6UoBEnHM$.RNyYd5P3G82ZKfuhdLiLbVwbS31DMtev55HrBeuYh9txvK/CZv8m59Jo61uOsA7widK2JC/9A5jXDMfrmsKH0:17975:0:99999:7:::
[root@lz-01 ~]# usermod -U user5
[root@lz-01 ~]# tail -n3 /etc/shadow
user1:!!:17975:0:99999:7:::
user4:!!:17975:0:99999:7:::
user5:$6$6UoBEnHM$.RNyYd5P3G82ZKfuhdLiLbVwbS31DMtev55HrBeuYh9txvK/CZv8m59Jo61uOsA7widK2JC/9A5jXDMfrmsKH0:17975:0:99999:7:::
usermod 锁定账户, 只显示一个!
更改密码的常用方式
-
passwd --stdin username
-
echo -e "12345678\n12345678" |passwd user5
[root@lz-01 ~]# passwd --stdin user5 更改用户 user5 的密码 。 12345 passwd:所有的身份验证令牌已经成功更新。 [root@lz-01 ~]# echo "111222" |passwd --stdin user5 更改用户 user5 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@lz-01 ~]# echo -e "123\nsss" 123 sss [root@lz-01 ~]# echo -e "12345678\n12345678" |passwd user5 更改用户 user5 的密码 。 新的 密码:无效的密码: 密码未通过字典检查 - 过于简单化/系统化 重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。 [root@lz-01 ~]#
mkpasswd命令
mkpasswd命令用于生成密码,需要yum install -y expect 软件
mkpasswd 用法如下:
usage: mkpasswd [args] [user]
where arguments are:
-l # (length of password, default = 12)
-d # (min # of digits, default = 2)
-c # (min # of lowercase chars, default = 2)
-C # (min # of uppercase chars, default = 2)
-s # (min # of special chars, default = 1)
-v (verbose, show passwd interaction)
-p prog (program to set password, default = /bin/passwd)
用户身份切换
su命令
命令格式 su [-] username
-
加上 - 会初始化当前用户的各种环境变量
[root@lz-01 ~]# whoami root [root@lz-01 ~]# su - user1 [user1@lz-01 ~]$ whoami user1 [user1@lz-01 ~]$ pwd /home/user1 [user1@lz-01 ~]$ id uid=1000(user1) gid=1000(user1) 组=1000(user1),1005(grp2) [user1@lz-01 ~]$ 登出 [root@lz-01 ~]# su user1 [user1@lz-01 root]$ pwd /root [user1@lz-01 root]$ ls ls: 无法打开目录.: 权限不够 [user1@lz-01 root]$ whoami user1 [user1@lz-01 root]$ exit [root@lz-01 ~]# su - user1 上一次登录:四 3月 21 08:12:12 CST 2019pts/0 上 [user1@lz-01 ~]$ ls [user1@lz-01 ~]$ ls -la 总用量 16 drwx------ 2 user1 user1 83 3月 21 08:11 . drwxr-xr-x. 4 root root 32 3月 20 23:14 .. -rw------- 1 user1 user1 28 3月 21 08:13 .bash_history -rw-r--r-- 1 user1 user1 18 10月 31 01:07 .bash_logout -rw-r--r-- 1 user1 user1 193 10月 31 01:07 .bash_profile -rw-r--r-- 1 user1 user1 231 10月 31 01:07 .bashrc [user1@lz-01 ~]$ 登出
-
可以直接su切换user1用户执行一条命令
[root@lz-01 ~]# su - -c "touch /tmp/liuz.111" user1 [root@lz-01 ~]# ls -lt /tmp/ |head 总用量 4 -rw-rw-r-- 1 user1 user1 0 3月 21 08:15 liuz.111 drwx------ 2 root root 6 3月 21 07:08 vmware-root_6050-692160398 drwx------ 3 root root 17 3月 21 07:08 systemd-private-a946a40cdb2a4c168f2a40a73f9e77a6-chronyd.service-NfKRPV drwx------ 2 root root 6 3月 20 21:05 vmware-root_6055-1714757077 drwx------ 2 root root 6 3月 20 07:59 vmware-root_5818-701204112 drwx------ 2 root root 6 3月 18 07:56 vmware-root_6021-1723604079 drwx------ 2 root root 6 3月 16 20:49 vmware-root_5926-969062091 drwx------ 2 root root 6 3月 15 08:16 vmware-root_5844-1002680513 drwx------ 2 root root 6 3月 15 07:55 vmware-root_6033-1681333242 [root@lz-01 ~]# id user1 uid=1000(user1) gid=1000(user1) 组=1000(user1),1005(grp2)
-
root用户可以直接切换至普通用户不用输入密码, 普通用户su到普通用户需要输入密码.
[root@lz-01 ~]# su - user1 上一次登录:四 3月 21 08:15:10 CST 2019pts/0 上 [user1@lz-01 ~]$ su - user5 密码: su: 鉴定故障 [user1@lz-01 ~]$ 登出 [root@lz-01 ~]# tail -n3 /etc/shadow user1:!!:17975:0:99999:7::: user4:!!:17975:0:99999:7::: user5:$6$XHxw8mnG$YPs7Nr1FPhuhRChNVQ3ar6ZaIbgymqaMfOlqTy5k/MaFWkjPrZZASsL0w7fhhy3UG25HBnc/A4V4Qd7rS9w180:17975:0:99999:7::: [user1@lz-01 ~]$ 登出 [root@lz-01 ~]# passwd user5 更改用户 user5 的密码 。 新的 密码: 无效的密码: 密码少于 8 个字符 重新输入新的 密码: 抱歉,密码不匹配。 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [root@lz-01 ~]# su - user1 上一次登录:四 3月 21 08:20:13 CST 2019pts/0 上 [user1@lz-01 ~]$ su - user5 密码: su: 鉴定故障 [user1@lz-01 ~]$ su - user5 密码: 最后一次失败的登录:四 3月 21 08:22:37 CST 2019pts/0 上 最有一次成功登录后有 3 次失败的登录尝试。 su: 警告:无法更改到 /home/user5 目录: 没有那个文件或目录 -bash-4.2$ ^C -bash-4.2$ 登出
-
提示没有/home/user5目录,因为前期创建user5用户时 - M 没有创建用户家目录
[user1@lz-01 ~]$ ls /home/user5 ls: 无法访问/home/user5: 没有那个文件或目录 [user1@lz-01 ~]$ ls /home/ lz111 user1 [user1@lz-01 ~]$ 登出
-
重新创建user5家目录
[root@lz-01 ~]# mkdir /home/user5 [root@lz-01 ~]# id user5 uid=1005(user5) gid=1006(user5) 组=1006(user5) [root@lz-01 ~]# chown user5:user5 /home/user5/ [root@lz-01 ~]# su - user5 上一次登录:四 3月 21 08:22:52 CST 2019pts/0 上 -bash-4.2$ pwd /home/user5 -bash-4.2$ 登出
-
配置user5用户.bash*
[root@lz-01 ~]# su - user1 上一次登录:四 3月 21 08:25:46 CST 2019pts/0 上 [user1@lz-01 ~]$ ls -la 总用量 16 drwx------ 2 user1 user1 83 3月 21 08:11 . drwxr-xr-x. 6 root root 58 3月 21 08:28 .. -rw------- 1 user1 user1 154 3月 21 08:27 .bash_history -rw-r--r-- 1 user1 user1 18 10月 31 01:07 .bash_logout -rw-r--r-- 1 user1 user1 193 10月 31 01:07 .bash_profile -rw-r--r-- 1 user1 user1 231 10月 31 01:07 .bashrc [user1@lz-01 ~]$ 登出 [root@lz-01 ~]# ls /etc/skel/ [root@lz-01 ~]# ls -la /etc/skel/ 总用量 24 drwxr-xr-x. 2 root root 62 4月 11 2018 . drwxr-xr-x. 74 root root 8192 3月 21 08:24 .. -rw-r--r--. 1 root root 18 10月 31 01:07 .bash_logout -rw-r--r--. 1 root root 193 10月 31 01:07 .bash_profile -rw-r--r--. 1 root root 231 10月 31 01:07 .bashrc [root@lz-01 ~]# cp /etc/skel/.bash* /home/user5/ [root@lz-01 ~]# chown -R user5:user5 !$//上一条命令的最后一列 chown -R user5:user5 /home/user5/ [root@lz-01 ~]# su - user1 上一次登录:四 3月 21 08:31:19 CST 2019pts/0 上 [user1@lz-01 ~]$ su - user5 密码: 上一次登录:四 3月 21 08:30:24 CST 2019pts/0 上 [user5@lz-01 ~]$ [user5@lz-01 ~]$ su - 密码: su: 鉴定故障 [user5@lz-01 ~]$ su - root 密码: 上一次登录:四 3月 21 07:12:38 CST 2019tty1 上 最后一次失败的登录:四 3月 21 08:37:41 CST 2019pts/0 上 最有一次成功登录后有 1 次失败的登录尝试。 [root@lz-01 ~]#
sudo命令
su切换用户身份,如果有root密码, 普通用户都可以切换至root身份,系统是不安全的. linux引进了sudo命令.
默认只有root用户可以使用sudo命令,普通用户使用sudo需要root预先设定.在/etc/sudoers设置了可执行sudo指令的用户. 用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
语法:sudo(选项)(参数)
- -b:在后台执行指令;
- -h:显示帮助;
- -H:将HOME环境变量设为新身份的HOME环境变量;
- -k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;
- -l:列出目前用户可执行与无法执行的指令;
- -p:改变询问密码的提示符号;
- -s<shell>:执行指定的shell;
- -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
- -v:延长密码有效期限5分钟;
- -V :显示版本信息。
配置sudo
配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
三个ALL的意思。第一个ALL是指网络中的主机。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL就是指命令名了