首页 > 代码库 > Linux学习笔记(12)用户和用户组管理

Linux学习笔记(12)用户和用户组管理

越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。在Linux中主要是通过用户配置文件来查看和修改用户信息

1 用户信息文件

(1)用户信息文件/etc/passwd

vim命令显示该文件的内容:

root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2: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:$6$NvfaINezKBg3Cqn7$bB5im5NRggTOa45clyXAXjud4YDhyDlTUgBfqy51UieAx1aUOreJCyPkoaG4MRUkSJGp2Xd9lnqXPIHEfM.4A0:16363:0:99999:7:::bin:*:15980:0:99999:7:::daemon:*:15980:0:99999:7:::

可以发现,影子文件由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 26 00:00:00 CST 2015

将日期换算为时间戳,其命令为:

[root@localhost ~]# echo $(($(date --date="2015/01/26" +%s)/86400+1))16461

(3)组信息文件和组密码文件

1)组信息文件/etc/group

[root@localhost ~]# vim /etc/grouproot:x:0:bin:x:1:bin,daemondaemon:x:2:bin,daemonsys:x:3:bin,admadm:x:4:adm,daemon

从组信息文件中可以看出,共有4个字段

第1个字段为组名;

第2个字段为组密码标志(组密码不常用);

第3个字段为GID(组ID);

第4个字段为组中附加用户。

2)组密码文件/etc/gshadow

[root@localhost ~]# vim /etc/gshadowroot:::bin:::bin,daemondaemon:::bin,daemonsys:::bin,admadm:::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/passwdws:x:500:500::/home/ws:/bin/bash[root@localhost ~]# grep ws /etc/shadowws:!!:16436:0:99999:7:::[root@localhost ~]# grep ws /etc/groupws:x:500:[root@localhost ~]# grep ws /etc/gshadowws:!::[root@localhost ~]# ll -d /home/ws/drwx------. 2 ws ws 4096 Jan  1 20:26 /home/ws/[root@localhost ~]# ll /var/spool/mail/ws-rw-rw----. 1 ws mail 0 Jan  1 20:26 /var/spool/mail/ws

例:添加指定用户:

[root@localhost ~]# useradd -u 550 -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 fileGROUP=100                            #用户默认组HOME=/home                         #用户默认家目录INACTIVE=-1                            #密码过期宽限天数(shadow第7个字段)EXPIRE=                                   #密码失效时间SHELL=/bin/bash                     #默认shell  SKEL=/etc/skel                         #模板目录CREATE_MAIL_SPOOL=yes     #是否建立邮箱

② /etc/login.defs

PASS_MAX_DAYS   99999            #密码有效期PASS_MIN_DAYS   0                    #密码修改间隔PASS_MIN_LEN    5                    #密码最小位数PASS_WARN_AGE   7                   #密码到期警告UID_MIN          500             #最小和最大UID范围UID_MAX          60000ENCRYPT_METHOD SHA512         #加密模式

(2)修改用户密码

命令格式

passwd [选项] 用户名

用户修改自己的米吗时只需输入passwd即可。其中-S表示查询用户密码状态(仅root可用),-l表示暂时锁定用户, 实际操作是在/etc/passwd文件的密码前加上了感叹号"!!",-u表示解锁用户,--stdin表示可通过管道输出的数据作为用户的密码(shell编程常用到)。

(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表示修改组名(一般不建议修改)

例:将组名ws修改为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 ws1Changing password for user ws1.passwd: all authentication tokens updated successfully.[root@localhost ~]# gpasswd -a ws1 wstestAdding user ws1 to group wstest[root@localhost ~]# gpasswd -d ws1 wstestRemoving user ws1 from group wstest

Linux学习笔记(12)用户和用户组管理