第五章:Linux系统用户与用户组管理
一、认识/etc/passwd和/etc/shadow
1./etc/passwd:
[root@zl_cloud ~]# cat /etc/passwd | head
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@zl_cloud ~]#
head前面的符号|叫做管道符,它的作用是把前面的命令的输出再妇孺给后面的命令。此处显示的是/etc/passwd文件的前10行。
- 第一个字段:用户名,代表用户账号的字符串;
- 第二个字段:存放的是该账户的口令;此处为x是因为后来基于安全因素,讲其放入了 /etc/shadow中了,这里用x代替;
- 第三个字段:这个数字代表用户识别号,也称为uid;同样,如果把test用户的uid修改 为0,系统就会认为root和test是同一个账户。(uid的取值范围是0~65535,实 际上已经可以支持到429 496 7294)
- 第四个字段:这个数字表示组标识号,也称为gid;它对应着/etc/group中的一条记录。
- 第五个字段:注释说明,没有实际意义;
- 第六个字段:用户的家目录,当用户登录时,就处在这个目录下;
- 最后一个字段:用户为用户的shell;用户登录后,要启动一个进程,用来将用户下达的指 令传给内核;
2./etc/shadow:
查看前三行先:
[root@zl_cloud ~]# cat /etc/shadow | head -3
root:$6$VN/vnoV9M696aU9k$Rv97REKblFc3IT/74ty0XVa7tbGmFwK6E/FIu2zrrDRoRbc4YHHXCuCXv.E1TyIWWZN9Z93xKy7cnqmKMeIgN0::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
[root@zl_cloud ~]#
重点标注为比较重点的字段。
- 第一个字段:用户名,与/etc/passwd对应;
- 第二个字段:用户密码;是该账号的真正密码,这个密码已经加密。
- 第三个字段:上次更改密码的日期;
- 第四个字段:要过多少天才可以更改密码;
- 第五个字段:密码多少天后才可以更改密码;默认为0,即不受限制。
- 第六个字段:密码到期前的警告期限;默认为99999,可以理解为永远不需要改。
- 第七个字段:账号的生命周期;
- 第八个字段:账号的生命周期;
- 最后一个字段:做保留用的,无意义;
二、用户和用户组管理
1.新增的命令groupadd
格式:groupadd 【-g GID】 【groupname】
[root@zl_cloud ~]# groupadd grptest
[root@zl_cloud ~]# tac /etc/group
grptest:x:1001:
slocate:x:21:
...
如果不加-g,则会按照系统默认的gid创建组,跟uid一样,gid也是从1000开始。
可自定gid:
[root@zl_cloud ~]# groupadd -g 1004 grptest1
[root@zl_cloud ~]# tac /etc/group
grptest1:x:1004:
grptest:x:1001:
slocate:x:21:
...
2.删除组的命令groupdel
格式:groupdel 【groupname】
[root@zl_cloud ~]# groupdel grptest1
[root@zl_cloud ~]# tac /etc/group
grptest:x:1001:
slocate:x:21:
有种情况不能删除组:
[root@zl_cloud ~]# useradd usertest
[root@zl_cloud ~]# id usertest
uid=1001(usertest) gid=1002(usertest) 组=1002(usertest)
[root@zl_cloud ~]# groupdel usertest
groupdel:不能移除用户“usertest”的主组
[root@zl_cloud ~]#
所以,只能删除账户才能删除这个组。我这个创的账户只是一个实验,我自己一开始想把usertest加入我上面创的grouptest中,然后发现加进去后,usertest的组变成了两个,就算删除也是grouptest组也是可以的,可能只是如果是唯一的话才会说删除不了把?我是这么理解的。
3.增加用户的命令useradd
格式:useradd 【-选项】 【username】
选项:
- -u:表示自定义uid;
- -g:表示使新增用户属于已经存在的某个组;后面可以跟组id,也可以跟组名。
- -d:表示自定义用户的家目录;
- -M:表示不建立家目录;
- -s:表示自定义shell。
如果创建用户时想自定义uid或者所属组的话:
[root@zl_cloud ~]# useradd -u1003 -g usertest usertest1
[root@zl_cloud ~]# id usertest1
uid=1003(usertest1) gid=1002(usertest) 组=1002(usertest)
[root@zl_cloud ~]#
4.删除账户的命令userdel
格式:userdel 【-选项】 【username】
- -r:删除主目录和邮件池;
5.使用命令chfn更改用户的finger
[root@zl_cloud ~]# chfn usertest1
Changing finger information for usertest1.
名称 []: usertest1
办公 []: 1
办公电话 []: 1
住宅电话 []: 1
Finger information changed.
[root@zl_cloud ~]# grep 'usertest1' /etc/passwd
usertest1:x:1003:1002:usertest1,1,1,1:/home/usertest1:/bin/bash
[root@zl_cloud ~]#
三、用户密码管理
1.命令passwd
格式:passwd 【username】,不加username的话就是修改自己的密码。
2.命令mkpasswd
用于生成密码;Linux默认时没有这个命令的,需要安装一个expect软件包。
[root@zl_cloud ~]# yum install -y expect
[root@zl_cloud ~]# mkpasswd
Du9Fmcb7.
[root@zl_cloud ~]#
要指定什么密码的话:
l代表long长度,s代表特殊字符,d代表数字,还有其他选择。
[root@zl_cloud ~]# mkpasswd -l 10 -s 0 -d 3
orbn5P5cV1
[root@zl_cloud ~]#
如果怕忘记密码的话,可以使用keepass;
KeePass主要有两部分作用:
①生成不易于破解的随机密码:它自带了一个密码生成器,可以按照指定的字符类(大小写、数字、特殊符号)生成指定位数的密码。
②分类管理密码:使用一个kdb扩展名的文件作为数据库,你可以指定数据库的加密算法和加密次数;密码你可以分类别进行管理,并且双击时可以自动打开URL字段的网址,自动复制用户名和密码字段的数据;复制到剪贴板的数据可以定时清除或者只允许粘贴一次。
四、用户身份切换
Linux中有些事情只有root用户才能做,普通用户是不能做的,这是需要临时切换到root身份。
[root@zl_cloud ~]# useradd test
[root@zl_cloud ~]# passwd test
更改用户 test 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@zl_cloud ~]#
用test账户登录Linux:
[test@zl_cloud ~]$ whoami
test
[test@zl_cloud ~]$
注意区别:普通用户是$,root目录是#
1.命令su
格式:su 【-】 【username】。后面可以跟-,也可以不跟-。普通用户的su命令不加username时,就是切换到root用户。
[test@zl_cloud ~]$ pwd
/home/test
[test@zl_cloud ~]$ su
密码: //输入root密码
[root@zl_cloud test]# pwd
/home/test
[root@zl_cloud test]# exit
exit
[test@zl_cloud ~]$ su -
密码:
上一次登录:四 3月 5 11:18:04 CST 2020pts/3 上
[root@zl_cloud ~]#
2.命令sudo
这个命令只有root才能使用,普通用户想要使用sudo需要root预先设定;
[test@zl_cloud root]$ sudo ls
[sudo] password for test:
test 不在 sudoers 文件中。此事将被报告。
[test@zl_cloud root]$
要使用的话要在root设定:
[root@zl_cloud ~]# yum install -y sudo //没有visudo这个命令的话安装一下这个
[root@zl_cloud ~]# vi /etc/sudoers //添加最后一行
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
test ALL=(ALL) ALL
第一段是指用户名,第二段是左边的all是指所有主机,右边的all是指获取哪个用户的身份,第三段可以设定可以使用sudo的命令有哪些。
[test@zl_cloud root]$ sudo ls
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] test 的密码:
anaconda-ks.cfg dir1 dira dirb test test1 test2
您在 /var/spool/mail/root 中有新邮件
[test@zl_cloud root]$ sudo ls
anaconda-ks.cfg dir1 dira dirb test test1 test2
[test@zl_cloud root]$ ls
ls: 无法打开目录.: 权限不够
[test@zl_cloud root]$
若增加一个用户就设置一行,有点麻烦,可以这么做:
[root@zl_cloud ~]# vi /etc/sudoers //有说要把%wheel前的#删掉但是我的本来就没有...意思是wheel这个组的所有用户都拥有了sudo的权利,加下来只需要设置sudo权限的所有用户加入到wheel这个组中即可。
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
普通账户登录后,可以不输入密码就能用sudo切换到root账户:
[root@zl_cloud ~]# visudo
User_Alias USER_SU = test,test1,aming //user别名,USER_SU相当于test,test1,aming 三个账户
Cmnd_Alias SU = /usr/bin/su //命令别名,SU相当于/usr/bin/su
USER_SU ALL=(ALL) NOPASSWD:SU
3.不允许root远程登录Linux
[root@zl_cloud ~]# vi /etc/ssh/sshd_config
PermitRootLogin yes //找到这个把yes改成no即可
[root@zl_cloud ~]# systemctl sshd.service
只适用于通过ssh远程登录Linux的情况。