越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。在Linux中主要是通过用户配置文件来查看和修改用户信息。
1 用户信息文件
(1)用户信息文件/etc/passwd
vim命令显示该文件的内容:
root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin:/sbin/nologin
可以发现,该文件的每一行共有7个字段。其中:
第1个字段是用户名称;
第2个字段是密码标志;
第3个字段是UID(用户标志),其中0表示超级用户(当普通用户的UID改为0时,服务器将该用户视为超级用户)。1~499为系统用户(伪用户),不能登陆,也不能删除,500~65535为普通用户,因此,新建的第一个用户的UID即为500。
第4个字段为GID(用户初始组ID)。
初始组是指用户一登陆就立即拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
附加组是指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
第5个字段为用户说明。可以添加,也可以不添加。
第6个字段为家目录。普通用户的家目录一般为/home/用户名/,超级用户的家目录为/root/。
第7个字段表示登陆之后的Shell。Shell是Linux的命令解释器,除了标准的Shell是/bin/bash之外,如果暂时禁用用户时,可将其写为/sbin/nologin。
(2)影子文件/etc/shadow
1)/etc/shadow的内容:
root:$$NvfaINezKBg3Cqn7$bB5im5NRggTOa45clyXAXjud4YDhyDlTUgBfqy51UieAx1aUOreJCyPkoaG4MRUkSJGp2Xd9lnqXPIHEfM.4A0::::::: bin:*::::::: daemon:*:::::::
可以发现,影子文件由9个字段组成。其中:
第1个字段表示用户名。
第2个字段表示加密密码。CentOS 6.5已经加密算法从MD5升级为SHA512散列加密方法。如果密码是"!!"或"*"代表没有密码,不能登陆,即为伪用户。
第3个字段为密码最后一次修改日期,使用1970年1月1号作为标准时间,每过一天时间戳加1。
第4个字段为两次密码修改设定的间隔时间(该时间基于与第3个字段)。
第5个字段表示密码有效期(和第2字段相比)。
第6个字段表示密码修改到期前的警告天数(和第5字段相比)。
第7个字段表示密码过期后的宽限天数(和第5字段相比)。
第8个字段表示账号失效时间(要用时间戳表示)。其中0表示密码过期后立即失效,-1表示密码永远不会失效。
第9个字段保留。
2)时间戳的换算
把时间戳换算为日期,其命令为:
[root@localhost ~]# date -d "1970-01-01 16461 days" Mon Jan :: CST
将日期换算为时间戳,其命令为:
[root@localhost ~]# echo $(($(date --date="2015/01/26" +%s)/86400+1)) 16461
(3)组信息文件和组密码文件
1)组信息文件/etc/group
[root@localhost ~]# vim /etc/group root:x:: bin:x::bin,daemon daemon:x::bin,daemon sys:x::bin,adm adm:x::adm,daemon
从组信息文件中可以看出,共有4个字段。
第1个字段为组名;
第2个字段为组密码标志(组密码不常用);
第3个字段为GID(组ID);
第4个字段为组中附加用户。
2)组密码文件/etc/gshadow
[root@localhost ~]# vim /etc/gshadow root::: bin:::bin,daemon daemon:::bin,daemon sys:::bin,adm adm:::adm,daemon
组密码文件也具有4个字段:
第1个字段为组名;
第2个字段为组密码;
第3个字段为组管理员用户名;
第4个字段为组中附加用户。
2 用户管理相关文件
1)用户的家目录
普通用户的家目录一般为/home/用户名/,所有者和所属组均为此用户,权限为700。
超级用户的家目录为/root/,所有者和所属组都是root用户。如果将普通用户修改为超级用户时,普通用户的家目录不会改变。
2)用户的邮箱
新建用户的邮箱的路径一般为/var/spool/mail/用户名。
3)用户模板目录
用户的模板目录为/etc/skel,每创建一个用户,用户的家目录都会从该目录下拷贝。
3 用户管理命令
(1)useradd
1)格式为:useradd [选项] 用户名
其中:-u(UID)表示手工指定用户的UID号,-d(家目录)表示手工指定用户的家目录,-c(用户说明)表示手工指定用户的说明,-g(组名)表示手工指定用户的初始组,-G(组名)表示指定用户的附加组,-s(Shell)表示手工指定用户登录的shell,默认为/bin/bash。
2)添加默认用户
例:添加默认用户ws:
[root@localhost ~]# useradd ws
该操作修改了用户的信息文件,可通过如下命令查看:
[root@localhost ~]# grep ws /etc/passwd ws:x::::/home/ws:/bin/bash [root@localhost ~]# grep ws /etc/shadow ws:!!::::::: [root@localhost ~]# grep ws /etc/group ws:x:: [root@localhost ~]# grep ws /etc/gshadow ws:!:: [root@localhost ~]# ll -d /home/ws/ drwx------. ws ws Jan : /home/ws/ [root@localhost ~]# ll /var/spool/mail/ws -rw-rw----. ws mail Jan : /var/spool/mail/ws
例:添加指定用户:
[root@localhost ~]# useradd -u -G root,bin -d /home/ws1 -c "test user" -s \ > /bin/bash ws1
其中"\"表示换行。
3)用户默认文件
① /etc/default/useradd
[root@localhost ~]# vim /etc/default/useradd # useradd defaults file GROUP= #用户默认组 HOME=/home #用户默认家目录 INACTIVE=- #密码过期宽限天数(shadow第7个字段) EXPIRE= #密码失效时间 SHELL=/bin/bash #默认shell SKEL=/etc/skel #模板目录 CREATE_MAIL_SPOOL=yes #是否建立邮箱
② /etc/login.defs
PASS_MAX_DAYS #密码有效期 PASS_MIN_DAYS #密码修改间隔 PASS_MIN_LEN #密码最小位数 PASS_WARN_AGE #密码到期警告 UID_MIN #最小和最大UID范围 UID_MAX ENCRYPT_METHOD SHA512 #加密模式
(2)修改用户密码
命令格式
passwd [选项] 用户名
用户修改自己的密码时只需输入passwd即可。其中-S表示查询用户密码状态(仅root可用),-l表示暂时锁定用户, 实际操作是在/etc/passwd文件的密码前加上了感叹号"!!",-u表示解锁用户,--stdin表示可通过管道输出的数据作为用户的密码(shell编程常用到:echo "123" | passwd --stdin ws)。
(3)修改用户信息usermod及修改用户密码状态chage
1)usermod命令格式
usermod [选项] 用户名
其中,-u表示修改用户UID,-G表示修改用户的附加组,-c表示修改用户说明,-L表示临时锁定用户,-U表示解锁用户锁定。
2)chage命令格式
chage [选项] 用户名
其中,-l选项表示列出用户的详细密码状态,-d(日期)表示修改密码最后一次更改日期(shadow第3字段),-m(天数)表示两次密码修改间隔(shadow第4字段),-M(天数)表示密码有效期(5字段),-W(天数)表示密码过期前的警告天数(6字段),-I(天数)表示密码过期后的宽限天数(7字段),-E(日期)表示账号失效时间(8字段)。
例:
chage -d 0 ws #该命令其实是将密码修改日期归0,这样用户一登陆就要修改密码
(4)删除用户userdel和用户切换命令
1)userdel命令格式
userdel [-r] 用户名
其中,-r选项表示删除用户的同时删除用户家目录,也可以手工修改文件删除用户名。
2)切换命令格式
su [选项] 用户名
只使用"-"选项代表连带用户的环境变量一起切换,-c表示仅执行一次命令,而不切换用户身份。
例:不切换root,但执行useradd命令添加user1用户:
su - root -c "useradd user1"
4 用户组管理
1)添加用户组:groupadd [选项] 组名
其中,-g表示指定GID。
2)修改用户组:groupmod [选项] 组名
其中,-g表示修改组ID,-n表示修改组名(一般不建议修改)。
例:将组名tg修改为wstest:
[root@localhost ~]# groupadd tg [root@localhost ~]# groupmod -n wstest tg
3)删除用户组:groupdel 组名
注意:如果组中有初始用户,不能删除该组,如果是附加用户,则不影响组的删除。
4)把用户添加入组或从组中删除
gpasswd [选项] 组名
其中,-a表示将用户加入组,-d表示将用户从组中删除。
例:新建一个用户ws1,将其加入wstest组中,然后删除:
[root@localhost ~]# useradd ws1 [root@localhost ~]# echo "ws1" | passwd --stdin ws1 Changing password for user ws1. passwd: all authentication tokens updated successfully. [root@localhost ~]# gpasswd -a ws1 wstest Adding user ws1 to group wstest [root@localhost ~]# gpasswd -d ws1 wstest Removing user ws1 from group wstest