Linux 用户和用户组管理

  • Post author:
  • Post category:linux


Linux 系统是一个多用户多任务的分时操作系统,任何一个需要使用系统资源的用户,都必须首先向系统管理员申请一个账号和密码,才能进入系统和自己的主目录。

一、Linux系统用户账号的管理

主要包含用户账号的添加、修改、删除和更改密码。

添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。

刚添加的账号是被锁定的,无法使用,直到你给它设置了密码后,它才可以用来登录系统。


1、添加用户 — 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 之间,供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录。

实例:创建zhaoyun用户

[root@centos7 ~]# useradd zhaoyun


添加用户账号就是在 /etc/passwd文件中为新用户增加一条记录,同时更新/etc/shadow, /etc/group等文件。


添加用户一般情况下不使用任何选项,用默认选择的值,两个文件中设置这些默认值:


文件1:/etc/default/useradd

[root@centos7 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
参数 含义
GR0UP=100 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说

这个选项并不会生效

Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。

HOME=/home 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下,刚刚新建的 lamp1 用户的主目录就为 /home/lamp1/。
INACTIVE=-1 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。

在实际的工作中建议修改为0表示密码过期后就失效
EXPIRE= 表示密码失效时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。一般不用
SHELL=/bin/bash 表示所有新建立的用户默认 Shell 都是 /bin/bash。
SKEL=/etc/skel 当添加新用户的时候,这个 /etc/skel 目录下的所有文件会自动被复制到新添加的用户的家目录下
CREATE_MAIL_SPOOL=yes

指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。例如,lamp1 的邮箱位于 /var/spool/mail/lamp1。


注意:这里只是打开要创建邮箱的开关,创建在哪儿由这个/etc/login.defs的文件决定


文件2:/etc/login.defs

文件的注释省略了
[root@centos7 ~]# cat /etc/login.defs 
# 新建用户要创建邮箱的话,存放的路径
MAIL_DIR        /var/spool/mail  

PASS_MAX_DAYS   99999  # 密码的有效期,单位是天,永久。一般半年(180天)修改一次
PASS_MIN_DAYS   0      # 是否可修改密码,0表示可修改,非0表示修改密码后必须等多少天后可再修改
PASS_MIN_LEN    5      # 密码最小长度,但已经失效,
PASS_WARN_AGE   7      # 密码失效前多少天在用户登录时通知用户修改密码

# 这两行代表创建用户时, 最小 UID 和最大的 UID 的范围
UID_MIN                  1000
UID_MAX                 60000

# 这两行代表创建系统用户时, 最小 UID 和最大的 UID 的范围,这个用户是系统内部用来启动服务用的,不能登录的内部用户
SYS_UID_MIN               201
SYS_UID_MAX               999

# 这两行代表创建用户的所属组时, GID 的最小值和最大值之间的范围
GID_MIN                  1000
GID_MAX                 60000

# 这两行代表创建系统用户的所属组, 最小 GID 和最大的 GID 的范围
SYS_GID_MIN               201
SYS_GID_MAX               999

# 这行指定建立用户时是否自动建立用户的家目录,默认是建立
CREATE_HOME     yes

# 指定建立的用户家目录的默认权限,权限掩码 077,所以新建的用户家目录的权限是 700
UMASK           077

# 如果没有成员存在,则此可用于清除用户群。
USERGROUPS_ENAB yes

# 指定 Linux 用户的密码使用 SHA512 散列模式加密算法.
ENCRYPT_METHOD SHA512 


2、删除帐号 — userdel命令

userdel 命令的作用就是从以上文件中,删除与指定用户有关的数据文件信息

useradd命令只有 root 用户才能使用。

基本语法格式如下:#

userdel -r 用户名

-r   选项表示在删除用户的同时删除用户的家目录。


注意:

在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件。

实例:删除zhaoyun用户

[root@centos7 ~]# userdel zhaoyun


3、修改帐号 — usermod命令(了解)

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

办法有两个,一个是使用 Vim 文本编辑器手动修改涉及用户信息的相关文件(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),另一个方法就是使用本节介绍了 usermod 命令,该命令专门用于修改用户信息。

基本语法格式如下:#

usermod [选项] 用户名

选项:

  • -c 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段;
  • -d 主目录:修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径;
  • -e 日期:修改用户的失效曰期,格式为 “YYYY-MM-DD”,即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段;
  • -g 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID);
  • -u UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID);
  • -G 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件;

  • -l 用户名:修改用户名称;

  • -L:临时锁定用户(Lock);

  • -U:解锁用户(Unlock)

    ,和 -L 对应;
  • -s shell:修改用户的登录

    Shell

    ,默认是 /bin/bash。

实例:修改用户名

[root@centos7 ~]# useradd llii
[root@centos7 ~]# usermod -l lisi2 llii
[root@centos7 ~]# userdel lisi2


4、用户密码的管理

用户刚创建时没有密码,并且是被系统锁定,无法使用;只有对其指定密码之后才可以正常登录使用。

指定和修改用户密码使用是passwd命令。

超级用户可以为自己和其他用户指定和修改密码,普通用户只能用它修改自己的密码。

基本语法格式如下:#

passwd [选项] 用户名

选项:

  • -S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用;

  • -l(lock):

    暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 “!”,使密码失效。仅 root 用户可用;
  • -u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用;

  • –stdin

    :可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;
  • -n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段;
  • -x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段;
  • -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段;
  • -i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
  • -d: 使账号无口令


1) root 账户可以为自己和其他用户指定和修改密码

[root@centos7 ~]# passwd lisi
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码包含用户名在某些地方
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。


2)普通用户只能用它修改自己的密码

需省略掉 “选项” 和  “用户名”。登陆 lisi用户,并使用 passwd 命令修改 lamp 的登陆密码


3)通过管道符输出的数据作为用户的密码的功能:

避免了人机交互的手工输入密码的麻烦,一步到位

[root@centos7 ~]# useradd zhaoyun   
[root@centos7 ~]# echo "123456" |  passwd --stdin zhaoyun
更改用户 zhaoyun 的密码 。
passwd:所有的身份验证令牌已经成功更新。

使用此方式批量给用户设置初始密码,当然好处就是方便快捷,但需要注意的是,这样设定的密码会把密码明文保存在历史命令中,如果系统被攻破,别人可以在 /root/.bash_history 中找到设置密码的这个命令,存在安全隐患。

因此,如果使用这种方式修改密码,那么应该记住两件事情:第一,手工清除历史命令;第二,强制这些新添加的用户在第一次登录时必须修改密码(具体方法参考 “chage” 命令)。


5、强制系统用户登录时修改密码 — chage命令

要求用户第一次登录的时候,必须修改自己的初始密码之后,才能进去系统

基本语法格式如下:#

chage [选项] 用户名

选项:

  • -l:列出用户的详细密码状态;
  • -d 日期:修改 /etc/shadow 文件中指定用户密码信息的第 3 个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD;
  • -m 天数:修改密码最短保留的天数,也就是 /etc/shadow 文件中的第 4 个字段;
  • -M 天数:修改密码的有效期,也就是 /etc/shadow 文件中的第 5 个字段;
  • -W 天数:修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第 6 个字段;
  • -i 天数:修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第 7 个字段;
  • -E 日期:修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 个字段。

实例:用户zhaoyun,下次登录时,必须修改密码后才能使用系统

[root@centos7 ~]# chage -d 0 zhaoyun


6、切换用户 — su 命令

su 是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。

普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功。

基本语法格式如下:#

su [选项] 用户名

选项:

  • -:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 – 选项可省略用户名,默认会切换为 root 用户。
  • -l:同 – 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
  • -p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
  • -m:和 -p 一样;
  • -c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。


注意:“-”不能省略

,如果省略,你查看环境变量(env)就会发现,表面上切换了用户,但根子上没换彻底。

实例一:root 用户切换至其他用户

[root@centos7 ~]# su - zhaoyun
上一次登录:三 2月 12 20:39:51 CST 2020tty1 上
[zhaoyun@centos7 ~]$

实例二:其他用户切换至root 用户

[zhaoyun@centos7 ~]$ su - root
密码:
上一次登录:三 2月 12 19:33:08 CST 2020从 192.168.198.1pts/0 上
[root@centos7 ~]# 


7、id 命令可以查询用户的UID、GID 和附加组的信息

基本语法格式如下:#

id [选项] 用户名


选项

  • -g或–group  显示用户所属群组的ID。
  • -G或–groups  显示用户所属附加群组的ID。
  • -n或–name  显示用户,所属群组或附加群组的名称。
  • -r或–real  显示实际ID。
  • -u或–user  显示用户ID。
  • -help  显示帮助。
[root@centos7 ~]# id zhaoyun
uid=1001(zhaoyun) gid=1003(zhaoyun) groups=1003(zhaoyun)
#能看到uid(用户ID)、gid(初始组ID), groups是用户所在组,如果有附加组,则也能看到附加组


8、whoami 命令和 who am i 命令

whoami 命令:用来打印当前执行操作的用户名,

who am i 命令:用来打印登陆当前 Linux 系统的用户名。

实例:zhaoyun用户登录,然后 su 命令切换到 root 用户下

在未切换用户身份之前,whoami 和 who am i 命令的输出是一样的,但使用 su 命令切换用户身份后,使用 whoami 命令打印的是切换后的用户名,而 who am i 命令打印的仍旧是登陆系统时所用的用户名。

二、Linux系统用户组的管理

每个用户都至少属于一个用户组,这个组就是初始组,每个用户必须只能拥有一个初始组,用户是依附于初始组生存的。同时用户可以没有附加组,也可以同时属于很多个附加组。

用户组的管理包含:用户组的添加、删除。组的增加、删除,实际上就是对/etc/group文件进行修改。


1、添加用户组 — groupadd命令

基本语法格式如下:#

groupadd [选项] 组名

选项:

  • -g GID:指定组 ID;
  • -r:创建系统群组。

实例:创建group1组

[root@centos7 ~]# groupadd group1


2、修改用户组 — groupmod命令

基本语法格式如下:# groupmod [选项] 组名

选项:

  • -g GID:修改组 ID;
  • -n 新组名:修改组名;

实例:修改group1组为group2

[root@centos7 ~]# groupmod -n group2 group1


注意:

用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议大家先删除旧的,再建立新的。


3、删除已有的用户组 –groupdel命令

使用 groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息。

基本语法格式如下:#

groupdel 组名

实例:删除group2组

[root@centos7 ~]# groupdel group2



注意:

1)不能使用 groupdel 命令随意删除群组。此命令仅适用于删除那些 “不是任何用户初始组” 的群组,

2)如果有群组还是某用户的初始群组,则无法使用 groupdel 命令成功删除。如果一定要删除初始群组,要么修改用户的初始组GID;要么先删除其群组下的用户,再删除初始群组。


4、把用户添加进组或者从组中移除 — gpasswd命令

为了避免系统管理员(root)太忙碌,无法及时管理群组,我们可以使用 gpasswd 命令给群组设置一个群组管理员,代替 root 完成将用户加入或移出群组的操作。

基本语法格式如下:#

gpasswd 选项 组名

选项 功能
选项为空时,表示给群组设置密码,仅 root 用户可用。
-A user1,… 将群组的控制权交给 user1,… 等用户管理,也就是说,设置 user1,… 等用户为群组的管理员,仅 root 用户可用。
-M user1,… 将 user1,… 加入到此群组中,仅 root 用户可用。
-r 移除群组的密码,仅 root 用户可用。
-R 让群组的密码失效,仅 root 用户可用。

-a user
将 user 用户加入到群组中。

-d user
将 user 用户从群组中移除。

可以看到,除 root 可以管理群组外,可设置多个普通用户作为群组的管理员,但也只能做“将用户加入群组”和“将用户移出群组”的操作。 创建三个用户

[root@centos7 ~]# useradd lisi
[root@centos7 ~]# passwd lisi
[root@centos7 ~]# useradd zhaoyun
[root@centos7 ~]# passwd zhaoyun
[root@centos7 ~]# useradd luna
[root@centos7 ~]# passwd luna

实例一、创建新群组 group1,并将群组交给 lisi 管理

[root@centos7 ~]# groupadd group1   # 创建群组
[root@centos7 ~]# gpasswd group1    # 设置群组密码,可设可不设
正在修改 group1 组的密码
新密码:
请重新输入新密码:
[root@centos7 ~]# gpasswd -A lisi group1   # 加入群组管理员为 lisi

实例二:以 lisi用户登陆系统,并将用户 lisi和 zhaoyun加入group1群组。

实例三:以 root用户登陆系统,并将用户luna加入group1群组,吧zhaoyun移除。

[root@centos7 ~]# gpasswd -a luna group1
正在将用户“luna”加入到“group1”组中
[root@centos7 ~]# gpasswd -d zhaoyun group1
正在将用户“zhaoyun”从“group1”组中删除
[root@centos7 ~]# grep "group1" /etc/group
group1:x:1006:lisi,luna


5、切换用户的有效群组 — newgrp命令(了解)

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。

基本语法格式如下:# newgrp 组名

实例:

#切换至 user1 用户
[root@localhost ~]# su - user1
[root@localhost ~]# whoami
user1
#使用 newgrp 命令一边切换 user1 的初始组,一边创建文件
[root@localhost ~]# mkdir user1_doc
[root@localhost ~]# newgrp group2
[root@localhost ~]# mkdir user2_doc
[root@localhost ~]# newgrp group3
[root@localhost ~]# mkdir user3_doc
#查看各文件的详细信息
[root@localhost ~]# ll
total 12
drwxr-xr-x 2 user1 group1 4096 Oct 24 01:18 user1_doc
drwxr-xr-x 2 user1 group2 4096 Oct 24 01:18 user2_doc
drwxr-xr-x 2 user1 group3 4096 Oct 24 01:19 user3_doc

可以看到,通过使用 newgrp 命令切换用户的初始组,所创建的文件各自属于不同的群组,这就是 newgrp 所发挥的作用,即通过切换附加组成为新的初始组,从而让用户获得使用各个附加组的权限。

三、与用户和用户组有关的系统文件

Linux一切皆文件,用户和用户组相关的信息都存放在一些系统文件中,这些文件中最核心的包括


用户和用户组的相关数据包含如下几项:

  • 用户基本信息:存储在 /etc/passwd 文件中;
  • 用户密码信息:存储在 /etc/shadow 文件中;
  • 用户群组基本信息:存储在 /etc/group 文件中;
  • 用户群组信息信息:存储在 /etc/gshadow 文件中;
  • 用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。


1、/etc/passwd文件

/etc/passwd 文件是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。

[root@centos7 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
... 省略
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
lisi:x:1000:1000::/home/lisi:/bin/bash
zhaoyun:x:1001:1003::/home/zhaoyun:/bin/bash
luna:x:1002:1005::/home/luna:/bin/bash

可以看到,/etc/passwd 文件中的内容非常规律,每行记录对应一个用户。

每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认

Shell

1)用户名

用户名,就是一串代表用户身份的字符串。

并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。

为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。

2)密码

由于/etc/passwd文件对所有用户都可读,密码放这里是一个安全隐患。因此,Linux 系统使用了shadow技术,把真正的加密后的用户密码存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符“x”来表示此用户设有密码。

注意:虽然 “x” 并不表示真正的密码,但也不能删除,如果删除了 “x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆。

3)UID

UID指用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。

实际上,UID 就是一个 0~65535 之间的数,不同范围的数字表示不同的用户身份。

UID 范围 用户身份
0 超级用户。UID 为 0 就代表这个账号是管理员账号。在 Linux 中,如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了,这一点和 Windows 是不同的。不过不建议建立多个管理员账号。
1~499 系统用户(伪用户)。也就是说,此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。

其实,除了 0 之外,其他的 UID 并无不同,这里只是默认 500 以下的数字给系统作为保留账户,只是一个公认的习惯而已。

500~65535 普通用户。通常这些 UID 已经足够用户使用了。但不够用也没关系,2.6.x 内核之后的 Linux 系统已经可以支持 232 个 UID 了。

4)GID

全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。


初始组

:指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组。


附加组

:指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。

注意:在 /etc/passwd 文件的第四个字段中看到的 ID 是这个用户的初始组。

5)描述性信息

这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。

6)主目录

用户登录后有操作权限的访问目录,通常称为用户的主目录。

例如,root 超级管理员账户的主目录为 /root,普通用户的主目录为 /home/lisi,即在 /home/ 目录下建立和用户名相同的目录作为主目录。

7)默认的Shell

用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell 命令解释器。

通常情况下,Linux 系统默认使用的命令解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。


系统中有一类用户称为伪用户(psuedo users):

这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空或/sbin/nologin。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。


2、/etc/shadow文件

Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了/etc/shadow文件中。

/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。又称为“影子文件”。

[root@centos7 ~]# cat /etc/shadow
root:$6$Rehz2UgZ$iuhkeGzVqWBEwUs0xK/J8tnSELqglTp2JDzf9iQQ9LLcyFJu7f51YY4XFD9G4BWcW1.ZtMLBHMDC/35plMqq11:18265:0:99999:7:::
bin:*:17834:0:99999:7:::
...省略
chrony:!!:18231::::::
apache:!!:18231::::::
lisi:$6$AlqIn/Xx$IwYx7Py6zRG1xCM/y84rW4mlvjT7VnQdmCMJXT1nvB80OUpjv2rPRmORaA1HSrEtrh4WlpVN7OKo1neQBpzW5/:18305:0:99999:7:::
zhaoyun:$6$TzBJYUbG$LLN26047a4ZyfKOClkQgDcdC8bmAAsqbidxolZdKsN6OjrgmvPp.iJl2oHSV54oaH0FQrl4vhw10IrwnNreel.:18305:0:99999:7:::
luna:$6$Xf3BKmUw$o9.VckB7okHzxKtneYZOs5D8qq5KNOuwrK8DUeVY1iYGmpwy93uCFJ8pkaei8izBevcYR7PEd1tcjcObU3ae6.:18305:0:99999:7:::

同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 “:” 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

1)用户名

用户名,就是一串代表用户身份的字符串。

2)加密密码

这里保存的是真正加密的密码。目前 Linux 的密码采用的是 SHA512 散列加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。

注意,这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 “!”、”*” 或 “x” 使密码暂时失效。

所有伪用户的密码都是 “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录。

3)最后一次修改时间

表示从世界标准时间1970-1-1 0:0:0,到用户最后一次修改密码时的间隔天数。这个字段如果改成0,那么用户在下次登录的时候,就必须修改密码,比如:# chage -d 0 user1命令其实就是修改这个字段的值

知道一个日期,得到天数:# echo $(($(date –date=”2019/02/25″ +%s)/86400+1))

知道天数,得到日期:# date -d “1970-01-01 15775 days”

4)最小修改时间间隔

该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。

这个字段值与上面的用户默认配置文件2:/etc/login.defs中的PASS_MIN_DAYS中配置的值就是这个的默认值

5)密码有效期

即密码的最大时间间隔,该字段与 第 3 字段((最后一次修改密码的日期))中记录的时间后多少天密码失效。默认值99999,几乎就是永久

这个字段值与上面的用户默认配置文件2:/etc/login.defs中的PASS_MAX_DAYS配置项关联

6)密码需要变更前的警告天数

与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。该字段的默认值是 7

默认值和配置文件:/etc/login.defs中的PASS_WARN_AGE配置项关联

7)密码过期后的宽限天数

也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。

默认值和文件:/etc/default/useradd的INACTIVE配置关联,-1表示到期后,用户仍然能用,显然改0合理一些

8)账号失效时间

同第 3 个字段(最后一次修改密码的日期)一样,使用自  1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!

默认值配置文件/etc/default/useradd的的EXPIRE配置项关联

该字段通常被使用在具有收费服务的系统中。

9)保留

这个字段目前没有使用,等待新功能的加入。


3、/ect/group 文件

/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。

[root@centos7 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
... 省略
slocate:x:21:
lisi:x:1000:
zhaoyun:x:1003:
luna:x:1005:
group1:x:1006:lisi,luna

各用户组中,还是以 “:” 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:

组名:密码:GID:该用户组中的用户列表

1)组名

用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。

2)组密码

和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。这个密码一般情况下都不设置!

用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。

3)组ID (GID)

就是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。

这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。

4)组中的用户

属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这里显示的是附加组内用户。

每个用户都可以加入多个附加组,但是只能属于一个初始组。

注意:如果该用户组是这个用户的初始组,则该用户不会写入这个字段。


4、/etc/gshadow 文件 (了解)

组用户信息存储在 /etc/group 文件中,而将组用户的密码信息存储在 /etc/gshadow 文件中。

如果给用户组设定了组管理员,并给该用户组设定了组密码,组密码就保存在这个文件当中。组管理员就可以利用这个密码管理这个用户组了。

[root@centos7 ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
...省略
slocate:!::
lisi:!::
zhaoyun:!::
luna:!::
group1:$6$YTM44o8m$kAWccBg.vhjywdQYBQ7sZcp5FRGUcKEP5cGR/48GVjmI5wz603TgpzWoMbUxgMl0.3Th3mc8zMIuR8/p8qfpw/:lisi:lisi,luna

每行代表一个组用户的密码信息,各行信息用 “:” 作为分隔符分为 4 个字段,每个字段的含义如下:

组名:加密密码:组管理员:组附加用户列表

1)组名

同 /etc/group 文件中的组名相对应。

2)组密码

对于大多数用户来说,通常不设置组密码,因此该字段常为空,但有时为 “!”,指的是该群组没有组密码,也不设有群组管理员。

3)组管理员

从系统管理员的角度来说,该文件最大的功能就是创建群组管理员。那么,

什么是群组管理员呢?

考虑到 Linux 系统中账号太多,而超级管理员 root 可能比较忙碌,因此当有用户想要加入某群组时,root 或许不能及时作出回应。这种情况下,如果有群组管理员,那么他就能将用户加入自己管理的群组中,也就免去麻烦 root 了。

不过,由于目前有 sudo 之类的工具,因此群组管理员的这个功能已经很少使用了。

4)组中的附加用户

该字段显示这个用户组中有哪些附加用户,和 /etc/group 文件中附加组显示内容相同。

参考网址:

http://c.biancheng.net/linux_tutorial/60/

站在前辈的肩膀上,每天进步一点点

ends~



版权声明:本文为qq_42402854原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。