Linux用户和用户管理
说明:将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,方便了对用户的管理工作。
1、Linux用户和组的关系
用户和用户组的对应关系有以下4种:
- 一对一:一个用户可存在一个组中,是组中的唯一成员。
- 一对多:一个用户可存在多个组中,此用户具有这多个组的共同权限。
- 多对一:多个用户可存在一个组中,这些用户具有和组织相同的权限。
- 多对多:多个用户可存在多个组中,是以上3种关系的扩展。
2、Linux UID和GID(用户ID和组ID)
注意:Linux系统将所有用户的用户名称,组名称与用户ID、组ID的对应关系都分别存储在/etc/passwd和/etc/group文件中。(用户和组名无实际作用,仅为了方便用户的记忆。)
3、/etc/passwd(用户文件)
3.1用户文件字段含义
用户名:密码:UID(用户ID):GID(组ID):描述信息:主目录:默认Shell
- 用户名,就是代表用户身份的字符串。
- 密码,“x”表示此用户设有密码,真密码在/etc/shadow文件中。
- UID,用户ID。每个用户都有唯一UID,Linux系统通过UID来识别不同的用户。
- GID,简称“组ID”。
- 描述信息,解释这个用户的意义。
- 主目录,用户的家目录。
- 默认Shell,用户登录的Linux命令解释器。
4、/etc/shadow(影子文件)
注意:/etc/shadow文件默认只有root用户拥有读权限。
4.1影子文件字段含义
用户名:加密密码:密码最后一次修改时间:最小修改时间间隔:密码有效期:密码到期前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
- 用户名。
- 加密密码,目前Linux的密码采用的是SHA512散列加密算法。
- 密码最后一次修改时间,Linux计算日期是以1970年1月1日不断累加得到的时间。
[root@localhost ~]#date –d “1970-01-01 15775 days”2013年03月11日 星期一 00:00:00 CST
4)最小修改时间间隔,规定多长时间之内不能再修改密码。如果是“0”则密码可以随意更改,如果是“10”,则代表密码修改后“10”天之内不能再次修改密码。
5)密码有效期,该字段的默认值为99999,也就是273年。可以认为是永久生效。
6)密码到期前的警告天数,当账户密码有效期快到时,系统会发出警告信息给此账户。
7)密码过期后的宽限天数,账户密码过期,在宽限的天数内用户还可以登录系统。
8)账户失效时间,该字段通常被使用在具有收费服务的系统中。
9)保留。
5、忘记密码怎么办!
1)普通账户,通过root账户解决。
2)root账户,重启进入单用户模式,通过passwd命令设置root密码。
6、/etc/group (用户组文件)
注意:此文件是用户组配置文件,用户组的所有信息都存放在文件中。
6.1组文件字段含义
组名:密码:GID:该用户组中的用户列表
1)组名。
2)组密码,和/etc/passwd文件一样,真密码默认保存在/etc/gshadow文件中。
3)组ID。
4)组中的用户,每个用户都可以加入多个附加组,且只能存在一个初始组。
7、小结
说明:/etc/passwd、/etc/shadow、/etc/group之间的关系,先在/etc/group文件中查询用户组的GID和组名;然后在/etc/passwd文件中查找该GID是哪个用户的初始组,同时提取这个用户的用户名和UID;最后通过UID到/etc/shadow文件中提取和这个用户匹配的密码。
8、Linux /etc/gshadow(组影子文件)
注意:组用户的密码信息存储在/etc/gshadow文件中。
8.1组影子文件按字段含义
组名:加密密码:组管理员:组附加用户列表
- 组名。
- 组密码,通常不设置组密码。
- 组管理员,通过sudo赋予权限。
- 组中的附加用户,显示用户组附加用户。
9、Linux用户初始组和附加组
注意:一个用户可以有多个附加组,但只能有一个初始组,第一个出现的是用户的初始组,后面的是附加组。
[root@localhost ~]#groups
lamp users
10、/etc/login.defs(创建用户的默认设置文件)
注意:/etc/login.defs文件用于在创建用户时,对用户的一些基本属性做默认设置。
文件内容
设置项 | 含义 |
MAIL_DIR /var/spool/mail | 创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱,比如 lamp 用户的邮箱是 /var/spool/mail/lamp。 |
PASS_MAX_DAYS 99999 | 密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效。 |
PASS_MIN_DAYS 0 | 表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。 |
PASS_MIN_LEN 5 | 指定密码的最小长度,默认不小于5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。 |
PASS_WARN_AGE 7 | 指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。 |
UID_MIN 500 | 指定最小 UID 为 500,也就是说,添加用户时,默认 UID 从 500 开始。注意,如果手工指定了一个用户的 UID 是 550,那么下一个创建的用户的 UID 就会从 551 开始,哪怕 500~549 之间的 UID 没有使用。 |
UID_MAX 60000 | 指定用户最大的 UID 为 60000。 |
GID_MIN 500 | 指定最小 GID 为 500,也就是在添加用户组时,组的 GID 从 500 开始。 |
GID_MAX 60000 | 用户 GID 最大为 60000。 |
CREATE_HOME yes | 指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes。 |
UMASK 077 | 用户主目录的权限默认设置为 077。 |
USERGROUPS_ENAB yes | 指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。 |
ENCRYPT_METHOD SHA512 | 指定用户密码采用的加密规则,默认采用 SHA512,这是新的密码加密模式,原先的 Linux 只能用 DES 或 MD5 加密。 |
11、useradd命令(添加新的系统用户)
基本格式:[root@localhost ~]#useradd [选项] 用户名
useradd命令常用选项
选项 | 含义 |
-u UID | 手工指定用户的 UID,注意 UID 的范围(不要小于 500)。 |
-d 主目录 | 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限; |
-c 用户说明 | 手工指定/etc/passwd文件中各用户信息中第5个字段的描述性内容,可随意配置; |
-g 组名 | 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。 |
-G 组名 | 指定用户的附加组。我们把用户加入其他组,一般都使用附加组; |
-s shell | 手工指定用户的登录 Shell,默认是 /bin/bash; |
-e 日期 | 指定用户的失效曰期,格式为 "YYYY-MM-DD"。也就是 /etc/shadow 文件的第八个字段; |
-o | 允许创建的用户的 UID 相同。例如,执行 "useradd -u 0 -o usertest" 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0; |
-m | 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的; |
-r | 创建系统用户,也就是 UID 在 1~499 之间,仅供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录。 |
注意:useradd命令在添加用户时参考的默认值文件,分别是/etc/default/useradd和/etc/login.defs、/etc/skel/。
[root@localhost ~]#vim /etc/default/useradd
/etc/default/useradd文件内容
参数 | 含义 |
GR0UP=100 | 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。 |
HOME=/home | 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下,刚刚新建的 lamp1 用户的主目录就为 /home/lamp1/。 |
INACTIVE=-1 | 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。 |
EXPIRE= | 表示密码失效时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用户默认 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。 |
CREATE_MAIL_SPOOL=yes | 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。例如,lamp1 的邮箱位于 /var/spool/mail/lamp1。 |
useradd –D命令可用选项
选项+参数 | 含义 |
-b HOME | 设置所创建的主目录所在的默认目录,只需用目录名替换 HOME 即可,例如 useradd -D -b /gargae。 |
-e EXPIRE | 设置密码失效时间,EXPIRE 参数应使用 YYYY-MM-DD 格式,例如 useradd -D -e 2019-10-17。 |
-f INACTIVE | 设置密码过期的宽限天数,例如 useradd -D -f 7。 |
-g GROUP | 设置新用户所在的初始组,例如 useradd -D -g bear。 |
-s SHELL | 设置新用户的默认 shell,SHELL 必须是完整路径,例如 useradd -D -s /usr/bin/csh。 |
12、passwd命令(修改用户密码)
基本格式:[root@localhost ~]#passwd [选项] 用户名
1)-S:查询用户密码的状态。
2)-l:暂时锁定用户。
3)-u:解锁用户。
4)--stdin:可以通过管道符输出的数据作为用户的密码。
5)-n天数:设置该用户修改密码后,多长时间不能再次修改。
6)-x天数:设置该用户的密码有效期。
7)-w天数:设置用户密码过期前的警告天数。
8)-i日期:设置用户密码失效日期。
注意:普通用户只能使用passwd命令修改自己的密码,不能修改其他用户的密码。
例:调用管道符,给lamp用户设置密码“123”
[root@localhost ~]#echo “123”| passwd --stdin lamp(用户名)
13、usermod命令(修改用户信息)
命令基本格式:[root@localhost ~]#usermod [选项] 用户名
1)-c用户说明:修改用户说明信息。
2)-d主目录:修改用户的主目录。
3)-e日期:修改用户的失效日期。
4)-g组名:修改用户的初始组。
5)-u UID:修改UID。
6)-G组名:修改用户的附加组。
7)-l用户名:修改用户名称。
8)-L:临时锁定用户(Lock)。
9)-U:解锁用户(Unlock)。
10)-s shell:修改用户的登录Shell,默认/bin/bash。
14、chage用法详解(修改用户密码状态)
命令基本格式:[root@localhost ~]#chage [选项] 用户名
1)-l:列出用户的详细密码状态。
2)-d日期:修改最后一次修改密码的日期。(常用)
3)-m天数:修改密码最短保留天数。
4)-M天数:修改密码的有效期。
5)-W天数:修改密码到期前的警告天数。
6)-i天数:修改密码过期后的宽限天数。
7)-E日期:修改账号失效日期。
15、userdel命令(删除用户,此命令只有root能使用)
说明:用户的相关数据包。
- 用户基本信息:存储在/etc/passwd文件中。
- 用户密码信息:存储在/etc/shadow文件中。
- 用户群组基本信息:存储在/etc/group文件中。
- 用户群组密码信息:存储在/etc/gshadow文件中。
- 用户个人文件:主目录默认位于/home/用户名,邮箱位于/var/spool/mail/用户名。
说明:userdel命令作用就是从以上文件中,删除与指定用户有关的数据信息。
命令基本格式:[root@localhost ~]#userdel –r 用户名
1)-r表示在删除用户的同时删除用户的家目录。
注意:使用userdel命令之前,先通过find –user用户名 查出系统中属于该用户的文件,然后删除。
16、id命令(查看用户的UID和GID)
命令的基本格式:[root@localhost ~]#id 用户名
例:[root@localhost ~]#id lamp
uid=501uid=501(lamp) gid=501(lamp) groups=501(lamp)
17、su命令(用户间切换,包含su和su –的区别)
su命令的基本格式:[root@localhost ~]#su [选项] 用户名
1)-:使用-选项可省略用户名,默认会切换为root用户。(连环境变量一起变换。)
2)-p:表示切换为指定用户的身份,但不改变当前的工作环境。
3)-m:同-p。
4)-c命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。
18、whoami和who命令用法和区别
1)whoami用来打印当前执行操作的用户名。
2)who用来打印登录当前Linux系统的用户名。
19、groupadd命令(添加用户组)
groupadd命令基本格式:[root@localhost ~]#groupadd [选项] 组名
1)-g GID:指定组ID。
2)-r:创建系统群组。
20、groupmod命令(修改用户组,不推荐使用)
groupmod命令基本格式:[root@localhost ~]#groupadd [选项] 组名
1)-g GID #修改组ID。
2)-n新组名 #修改组名。
21、groupdel命令(删除用户组)
命令基本格式:[root@localhost ~]#groupdel 组名
注意:不能使用groupdel命令随意删除群组。
22、gpasswd命令(把用户添加进组或从组中删除)
gpasswd命令基本格式:[root@localhost ~]#gpasswd 选项 组名
gpasswd命令各选项及其功能
选项 | 功能 |
| 选项为空时,表示给群组设置密码,仅 root 用户可用。 |
-A user1,... | 将群组的控制权交给 user1,... 等用户管理,也就是说,设置 user1,... 等用户为群组的管理员,仅 root 用户可用。 |
-M user1,... | 将 user1,... 加入到此群组中,仅 root 用户可用。 |
-r | 移除群组的密码,仅 root 用户可用。 |
-R | 让群组的密码失效,仅 root 用户可用。 |
-a user | 将 user 用户加入到群组中。 |
-d user | 将 user 用户从群组中移除。 |
23、newgrp命令(切换用户的有效组)
命令基本格式:[root@localhost ~]#newgrp 组名
说明:newgrp命令每一次切换用户的初始组,该用户都会以另外一个shell(新进程,子进程)登录,只不过在新shell登录该用户,其初始组改变而已。