3.1 用户配置文件和密码配置文件
Linux用户和用户组
/etc/passwd //用户的密码文件。每创建一个用户,就会在这个文件中增加一行内容。
对于或者文件的结构:
xiao:x:1000:1000::/home/xiao:/bin/bash //每个用户一行
然后每个字段用冒号“:”分隔,一共七段
用户名 : 密码 :uid :gid :用户的注释信息 :用户家目录 :用户的shell
第二段密码:早期是存储密码的,后面发现并不安全,现在只是密码的占位符
用户的注释信息 :不重要,不需要关注
用户的shell :用户的交互终端,可以和机器交互的窗口
/etc/shadow //专门用来控制用户密码的,与/etc/passwd相对应
xiao:!!:17684:0:99999:7:::
与passwd文件一样,使用冒号“:”分隔,共9段
用户名 :用户密码 :密码最近修改时间 :限制密码修改时间 :强制修改密码 :警告 :账号的失效期限 :账号生命周期 :保留字段
用户密码:加密显示,无法反推,即从加密状态推算到原始密码
密码最近修改时间 :距离1970年1月1日到修改密码的天数
限制密码修改时间 :多少天内,禁止修改密码。默认为0
强制修改密码 :密码有效期,即多少天内必须修改密码
警告:密码到期前的警告期限。比如设置为7,那么当七天后密码要过期时,系统就会发出警告,提醒用户他的密码将在7天后到期。
账号的失效期限:密码已经到期了,然而用户并没有修改密码,那么在这里的期限后账号将被锁定。
账号生命周期:距离1970年1月1日有多少天,账号在这个日期前可以使用,到期后密码就会被锁定。
保留字段:目前并没有被使用。
3.2 用户组管理
/etc/group //跟/etc/passwd有略微区别
当创建用户时,会创建一个跟用户同名的组,那么在这个配置文件中就会出现一行内容。
那么跟用户对应的,组也有一个密码文件:/etc/gshadow,用来存储组密码的文件。
[root@localhost ~]# ls /etc/shadow
shadow
shadow-
[root@localhost ~]# ls /etc/gshadow
gshadow
gshadow-
[root@localhost ~]# ls /etc/passwd
passwd
passwd-
[root@localhost ~]# ls /etc/group
group
group-
标红的文件,都是系统自动生成的备份文件。如果主文件
shadow 等其他几个文件不小心被删除了,那么可以通过拷贝这几个文件进行还原。不过,内容有可能有缺失:可能新创建的用户没来得及同步。
[root@localhost ~]# groupadd grp1 //创建组,并且查看配置文件的变化
[root@localhost ~]# tail -1 /etc/group
grp1:x:1001:
[root@localhost ~]# groupadd
-g 1005 grp2 //指定gid的方式创建组账号。并且,在centos7中,手动创建的组,gid最好在1000+,因为前一千位是留给系统组使用的。centos6中,是大于500即可。跟用户的uid是类似的。
[root@localhost ~]# tail -3 /etc/group
slocate:x:21:
grp1:x:1001:
grp2:x:1005:
[root@localhost ~]# groupdel grp1 //删除组
[root@localhost ~]# tail -3 /etc/group
xiao:x:1000:
slocate:x:21:
grp2:x:1005:
[root@localhost ~]# groupdel xiao //不能删除有用户存在的组!必须先将用户移出该组后,再进行删除操作。
groupdel:不能移除用户“xiao”的主组
[root@localhost ~]# LANG=en
[root@localhost ~]# groupdel xiao
groupdel: cannot remove the primary group of user 'xiao'
3.3 用户管理
[root@localhost ~]# useradd user2
[root@localhost ~]# tail -2 /etc/passwd //普通用户创建,
uid是从1000开始分配的,并且是挨个往后增加。
xiao:x:
1000:1000::/home/xiao:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
[root@localhost ~]# useradd -u 1006 -g grp2 user4 //创建一个uid=1006,用户组为grp2的用户user4。gid=1005,是grp2组的gid
[root@localhost ~]# tail -3 /etc/passwd
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
user4:x:1006:1005::/home/user4:/bin/bash
[root@localhost ~]# useradd -u 1007 -g grp2 -s /sbin/nologin -d /home/test haha
//uid=1007,gid=1005,shell环境是/sbin/nologin,家目录是/home/test。
[root@localhost ~]# tail -1 /etc/passwd
haha:x:1007:1005::/home/test:/sbin/nologin
[root@localhost ~]# useradd
-M user5 //创建用户时,不去创建它的家目录。有家目录,只是没有创建
[root@localhost ~]# tail -1 /etc/passwd
user5:x:1008:1008::/home/user5:/bin/bash
[root@localhost ~]# ls /home/
test user2 user3 user4 xiao
并且,我们再次查看下passwd文件中用户到uid变化
[root@localhost ~]# tail -5 /etc/passwd
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
user4:x:1006:1005::/home/user4:/bin/bash
haha:x:1007:1005::/home/test:/sbin/nologin
user5:x:
1008:1008::/home/user5:/bin/bash //创建用户user5时,并没有指定uid,但是uid是顺着上一个用户的uid号往下顺延!组也是一样的!
[root@localhost ~]# tail -4 /etc/group
user2:x:1001:
user3:x:1004:
user5:x:1008:
grp3:x:
1009:
[root@localhost ~]# tail -2 /etc/passwd
haha:x:1007:1005::/home/test:/sbin/nologin
user5:x:1008:1008::/home/user5:/bin/bash
[root@localhost ~]# useradd test1
[root@localhost ~]# tail -2 /etc/passwd
user5:x:1008:1008::/home/user5:/bin/bash
test1:x:1009:
1010::/home/test1:/bin/bash
一般来说,创建一个新用户,会有一个同名的组,并且,gid跟uid会保持一致。而这里有一个情况,当gid因为手动创建的组占用,那么创建用户生成的同名组的id号也会顺延。
验证:
[root@localhost ~]# useradd -u 1012 zhangsan1
[root@localhost ~]# tail -2 /etc/passwd
zhangsan:x:1010:1011::/home/zhangsan:/bin/bash
zhangsan1:x:
1012:1012::/home/zhangsan1:/bin/bash
添加用户使用useradd,还可以使用adduser也是可以的。
删除组使用groupdel,删除用户:userdel
那么思考,删除用户时,都会进行哪些操作:
1)会删除文件/etc/passwd中对应的行内容
[root@localhost ~]# tail -2 /etc/passwd
zhangsan:x:1010:1011::/home/zhangsan:/bin/bash
zhangsan1:x:1012:1012::/home/zhangsan1:/bin/bash
[root@localhost ~]# userdel
zhangsan1
[root@localhost ~]# tail -2 /etc/passwd
test1:x:1009:1010::/home/test1:/bin/bash
zhangsan:x:1010:1011::/home/zhangsan:/bin/bash
2)没有特别操作,不会删除该用户的家目录。用户家目录中的文件默认保留,留给管理员
[root@localhost ~]# ls /home/
test test1 user2 user3 user4 xiao zhangsan
zhangsan1
那么想要一起删除用户的家目录:
[root@localhost ~]# userdel -r zhangsan //使用“-r”选项,则会一起删除用户的家目录。
[root@localhost ~]# ls /home/
test test1 user2 user3 user4 xiao zhangsan1