RH124|第六章 管理本地用户和群组

描述用户和组的概念

目标

完成本节内容后,你能够描述Linux系统中用户和组的作用。

什么是用户?

用户账户是用来在不同的人和可以运行命令的程序之间提供安全边界。

用户有了用户名,可以将不同的用户区分开来,使其更容易工作。在系统内部,系统通过分配给用户账户的唯一识别号,即用户ID或UID来区分用户账户。如果一个用户账户被一个人使用,一般会被分配一个秘密密码,用户在登录时用这个密码来证明自己是真正的授权用户。

用户账户是系统安全的基础。系统中的每个进程(运行的程序)都是以特定的用户身份运行。每个文件都有一个特定的用户作为其所有者。文件的所有权帮助系统对文件的用户实施访问控制。与运行中的进程关联的用户决定了该进程可以访问的文件和目录。

用户账户主要有三种类型:超级用户、系统用户和普通用户。

  • 超级用户账户是用来管理系统的超级用户。超级用户的名称是root,账户的UID为0。超级用户拥有对系统的完全访问权限。
  • 系统有系统用户账户,这些账户被提供支持服务的进程所使用。这些进程或守护进程,通常不需要作为超级用户运行。它们是被指定的非特权账户,允许它们保护自己的文件和其他资源不受系统上的普通用户的影响。用户不使用系统用户账户交互式登录。
  • 大多数用户都有固定的用户账户,他们日常工作时都会使用这些账户。与系统用户一样,普通用户对系统的访问权限也是有限的。

您可以使用id命令来显示当前登录用户的信息。

[user01@host ~]$ id 
uid=1000(user01) gid=1000(user01) groups=1000(user01)  context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

要查看其他用户的基本信息,可以将用户名作为参数传递给id命令。

[user01@host]$ id user02 
uid=1002(user02) gid=1001(user02) groups=1001(user02)  context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

要查看一个文件的所有者,请使用 ls -l 命令。要查看一个目录的所有者,请使用 ls ld 命令。在下面的输出中,第三列显示的是用户名。

[user01@host ~]$ ls -l file1
-rw-rw-r--. 1 user01 user01 0 Feb  5 11:10 file1 
[user01@host]$ ls -ld dir1
drwxrwxr-x. 2 user01 user01 6 Feb  5 11:10 dir1

要查看进程信息,请使用ps命令。默认情况下,只显示当前shell中的进程。添加 a 选项来查看所有进程的终端信息。要查看与进程相关联的用户,请加入u选项。在下面的输出中,第一列显示的是用户名。

[user01@host]$ ps -au 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       777  0.0  0.0 225752  1496 tty1     Ss+  11:03   0:00 /sbin/agetty -o p -- \u --noclear tty1 linux 
root       780  0.0  0.1 225392  2064 ttyS0    Ss+  11:03   0:00 /sbin/agetty -o p -- \u --keep-baud 115200,38400,9600 
user01      1207  0.0  0.2 234044  5104 pts/0    Ss   11:09   0:00 -bash 
user01      1319  0.0  0.2 266904  3876 pts/0    R+   11:33   0:00 ps au

前面命令的输出是按名字显示用户,但在内部,操作系统使用UID来跟踪用户。用户名与UID的映射是在账户信息数据库中定义的。默认情况下,系统使用/etc/passwd文件来存储本地用户的信息。

/etc/passwd文件中的每一行都包含一个用户的信息。它被分为七个冒号分隔的字段。下面是/etc/passwd文件中的一个例子。

 user01:    x:  1000:   1000:   User One:   /home/user01:   /bin/bash
  • 该用户的用户名(user01)。
  • 用户的密码过去是以加密格式存储在这里。这已经被移到了/etc/shadow文件中,后面会讲到。这个字段应该永远是x。
  • 该用户账户的UID号(1000)
  • 该用户账户的用户组组的GID号(1000)。用户组将在本节后面讨论
  • 该用户的真实姓名(User One)。
  • 该用户的主目录(/home/user01)。这是shell启动时的初始工作目录,包含用户的数据和配置设置。
  • 这个用户的默认shell程序,在登录时运行(/bin/bash)。对于普通用户,通常是提供用户的命令行提示符的程序。如果系统用户不允许交互式登录,那么系统用户可以使用/sbin/nologin

什么是用户组?

用户组是一个需要共享文件和其他系统资源的用户集合。组可以用来授予一组用户对文件的访问权限,而不是只授予单个用户。

和用户一样,组也有组名,以便于工作时使用。在内部,系统通过分配给组的唯一识别号,即组ID或GID来区分组。

组名与GID的映射是在组账户信息数据库中定义的。默认情况下,系统使用/etc/group文件来存储关于本地组的信息。

/etc/group文件中的每一行都包含一个组的信息。每个组条目被分为四个冒号分隔的字段。下面是/etc/group文件中的一个例子。

 group01:   x:  10000:  user01,user02,user03
  • 该组的组名(group01)。
  • 过时的组密码字段。该字段应始终为x。
  • 本组的GID号(10000)。
  • 作为补充组(user01、user02、user03)的用户列表。主组(或默认组)和补充组将在本节后面讨论。

主要组和补充组

每个用户都有一个主组。对于本地用户,这是在/etc/passwd文件中按GID号列出的组。默认情况下,这个组将拥有该用户创建的新文件。

通常,当你创建一个新的普通用户时,会创建一个与该用户相同名称的新组。该组被用作新用户的主组,该用户是这个用户私有组的唯一成员。事实证明,这有助于简化文件权限的管理,这将在后面的课程中讨论。

用户也可以有补充组。补充组的成员资格由 /etc/group 文件决定。用户被授予对文件的访问权限是基于他们的任何组是否有访问权限。对于用户来说,拥有访问权限的组是主组还是补充组并不重要。

例如,如果用户user01有一个主群组用户01和补充群组 wheel和webadmin,那么该用户可以读取这三个群组中的任何一个群组可读的文件。

id命令也可以用来查找用户的组成员信息。

[user03@host ~]$ id 
uid=1003(user03) gid=1003(user03) groups=1003(user03),10(wheel),10000(group01)  context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

在前面的例子中,用户03的主群组user03是主群组(gid)。组项列出了该用户的所有组,除了主组user03之外,该用户还有组wheel和group01作为补充组。

获得超级用户权限

目标

完成本节内容后,可以切换到超级用户账户来管理Linux系统,并通过sudo命令授予其他用户超级用户权限。

超级用户

大多数操作系统都有某种超级用户,即拥有系统所有权力的用户。在 Red Hat Enterprise Linux 中,这就是root用户。这个用户有权力修改文件系统上的权限,来管理系统。要执行诸如安装或删除软件和管理系统文件和目录等任务,用户必须将其权限升级到root用户。

只有普通用户中的root用户才能控制大部分设备,但也有少数例外。例如,正常用户可以控制USB设备等可移动设备。因此,正常用户可以添加和删除文件以及以其他方式管理可移动设备,但默认只有root用户才能管理 "固定 "的硬盘。

然而,权力越大责任越大。root用户拥有破坏系统的无限权力:删除文件和目录、删除用户账户、添加后门等等。如果root用户的账户被破坏,那么系统的管理控制权就会被其他人掌握。在整个课程中,鼓励管理员以普通用户的身份登录,在需要的时候才将权限升级为根用户。

Linux中的root账户大致相当于微软Windows中的本地管理员账户。在Linux中,大多数系统管理员都是以非权限用户的身份登录系统,并使用各种工具暂时获得root权限。

切换用户

su命令允许用户切换到不同的用户账户。如果你从一个普通用户账户运行su,你会被提示你要切换到的账户的密码。

[user01@host ~]$ su - user02 
Password: 
[user02@host ~]$ 

如果你省略了用户名,susu - 命令将尝试在默认情况下切换到 root。

[user01@host ~]$ su 
Password: 
[root@host ~]# 

命令su启动一个非登录的shell,而命令su - (带破折号选项)启动一个登录的shell。这两个命令的主要区别在于,su -设置了shell环境,就像以该用户的身份新登录一样,而su只是以该用户的身份启动一个shell,但使用的是原始用户的环境设置。

在大多数情况下,管理员应该运行 su - 来获取一个带有目标用户的正常环境设置的 shell。更多信息,请参阅 bash(1) man page。

用sudo运行命令

在某些情况下,出于安全考虑,root用户的账户可能根本没有有效的密码。在这种情况下,用户不能用密码直接以root身份登录系统,也不能用su来获取交互式shell。在这种情况下,有一个工具可以用来获取root权限,那就是sudo

su不同的是,sudo通常要求用户输入自己的密码进行身份验证,而不是他们要访问的用户账户的密码。也就是说,使用sudo以root身份运行命令的用户不需要知道root密码。相反,他们使用自己的密码来验证访问。

此外,sudo可以被配置成允许特定用户以其他用户的身份运行任何命令,或者只以该用户的身份运行某些命令。

例如,当sudo被配置为允许user01用户以root身份运行usermod命令时,user01可以运行以下命令来锁定或解锁用户账户:

[user01@host ~]$ sudo usermod -L user02 
[sudo] password for user01: 
[user01@host ~]$ su - user02 
Password: 
su: Authentication failure
[user01@host ~]$ 

如果用户试图以另一个用户的身份运行命令,而sudo配置不允许,则该命令将被阻止,该尝试将被记录下来,并且默认情况下会向根用户发送一封邮件。

[user02@host ~]$ sudo tail /var/log/secure 
[sudo] password for user02: 
user02 is not in the sudoers file.  This incident will be reported. 
[user02@host ~]$ 

使用sudo的另一个好处是,所有执行的命令都会被记录到/ var/log/secure

[user01@host ~]$ sudo tail /var/log/secure 
...output omitted...
Feb  6 20:45:46 host sudo[2577]:  user01 : TTY=pts/0 ; PWD=/home/user01 ;
 USER=root ; COMMAND=/sbin/usermod -L user02 
 ...output omitted...

在Red Hat Enterprise Linux 7和Red Hat Enterprise Linux 8中,wheel组的所有成员都可以使用sudo以任何用户的身份运行命令,包括root用户。用户会被提示输入自己的密码。这是与 Red Hat Enterprise Linux 6 及更早的版本相比的一个变化,在 Red Hat Enterprise Linux 6 及更早的版本中, wheel 组成员的用户在默认情况下不能获得这种管理权限。

使用Sudo获取root shell

如果系统上有一个非管理员用户账户可以使用sudo来运行su命令,你可以从该账户中运行sudo su - 来获得一个交互式的root用户shell。这样做是因为sudo会以root的身份运行su -,而root用户不需要输入密码就可以使用su

另一种使用 sudo 访问 root 帐户的方法是使用 sudo -i 命令。这将切换到根账户,并运行该用户的默认shell(通常是bash)和相关的shell登录脚本。如果你只是想运行shell,你可以使用sudo -s命令。

例如,管理员可以通过使用 SSH 公钥验证以普通用户 ec2-user的身份登录到 AWS EC2 实例上的交互式 shell,然后通过运行 sudo -i 来获取根用户的 shell。

[ec2-user@host ~]$ sudo -i 
[sudo] password for ec2-user: 
[root@host ~]# 

sudo su - 命令和 sudo -i 的行为并不完全相同。这将在本节末尾简要讨论。

配置sudo

sudo的主要配置文件是/etc/sudoers。为了避免多个管理员同时尝试编辑它,只能用特殊的visudo命令来编辑。

例如,在 /etc/sudoers 文件中的以下一行可以对wheel组成员进行 sudo 访问。

%wheel        ALL=(ALL)       ALL

在这一行中,%wheel是指该规则适用的用户或组。%表示这是一个组,wheel组。ALL=(ALL)指定wheel组可以运行任何命令。最后的ALL指定wheel可以作为系统上的任何用户运行这些命令。

默认情况下,/etc/sudoers 也会将 /etc/sudoers.d 目录中的任何文件的内容作为配置文件的一部分。这允许管理员只需在该目录中放置一个适当的文件,就可以为用户添加 sudo 访问权限。

要启用user01用户的完全sudo访问权限,可以创建/etc/sudoers.d/user01,内容如下:

user01  ALL=(ALL)  ALL

要启用 group01 组的完全 sudo 访问,可以创建 /etc/sudoers.d/group01,内容如下:

%group01  ALL=(ALL)  ALL

也可以设置sudo,允许用户以另一个用户的身份运行命令而不输入密码。

ansible  ALL=(ALL)  NOPASSWD:ALL

虽然向用户或组授予这种级别的访问权限存在明显的安全风险,但它经常被用于云实例、虚拟机和配置系统以帮助配置服务器。拥有这种访问权限的账户必须受到谨慎的保护,可能需要SSH publickey验证才能让远程系统上的用户访问它。

例如,Amazon Web Services Marketplace 中的 Red Hat Enterprise Linux 的官方 AMI 在出厂时就锁定了根用户和 ec2-user用户的密码。ec2-user用户账户被设置为允许通过SSH公钥验证进行远程交互式访问。ec2-user 用户也可以在没有密码的情况下以 root 用户的身份运行任何命令,因为 AMI 的 / etc/sudoers 文件的最后一行设置如下:

ec2-user  ALL=(ALL)  NOPASSWD: ALL

在配置系统的过程中,可以重新启用sudo输入密码的要求,或者在配置系统的过程中,可以进行其他的修改来加强安全性。

在本课程中,你会经常看到sudo su -代替sudo -i的使用。这两个命令都可以使用,但它们之间有一些微妙的区别。

sudo su - 命令设置的根环境和普通登录一样,因为 su - 命令会忽略 sudo 所做的设置,而是从头开始设置环境。

sudo -i命令的默认配置实际上是对root用户环境的一些细节设置与普通登录不同。例如,它设置的PATH环境变量的方式略有不同。这影响了shell在查找命令的路径。

你可以用visudo编辑/etc/sudoers,让sudo -i表现得更像su -通过编辑/etc/sudoers。找到这一行

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

以下两行:

Defaults secure_path = /usr/local/bin:/usr/bin
Defaults>root secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

对于大多数目的来说,这并不是一个很大的区别。但是,为了使系统上的PATH设置与默认的/etc/sudoers文件保持一致,本课程的作者在实例中大多使用sudo su -

管理本地用户账户

目标

完成本节内容后,你应该能够创建、修改和删除本地用户账户。

管理本地用户

使用命令行工具来管理本地用户账户。

从命令行创建用户

  • useradd username命令会创建一个名为username的新用户。它设置了用户的主目录和账户信息,并为这个名为username的用户创建了一个私有组。此时,该账户没有设置有效的密码,在设置好密码之前,用户无法登录。
  • useradd --help命令显示了可以用来覆盖默认值的基本选项。在大多数情况下,同样的选项也可以用usermod命令来修改现有的用户。
  • 一些默认值,如有效UID号码的范围和默认的密码过期规则,都是从/etc/login.defs文件中读取的。这个文件中的值只在创建新用户时使用。对这个文件的更改不会影响现有用户。

从命令行修改现有用户

usermod --help命令显示可以用来修改账户的基本选项。一些常见的选项包括:

usermod选项 作用
-c, --comment COMMENT 在评论栏中添加用户的真实姓名。
-g, --gid GROUP 指定用户账户的主要组。
-G, --groups GROUPS 为用户账户指定一个以逗号分隔的补充组列表。
-a, --append 与-G选项一起使用,可将补充组添加到用户当前的组成员集中,而不是用新的组替换补充组。
-d, --home HOME_DIR 为用户账户指定一个特定的主目录。
-m, --move-home 将用户的主目录移动到一个新的位置。必须与-d选项一起使用。
-s, --shell SHELL 为用户账户指定一个特定的登录shell
-L, --lock 锁定用户账户。
-U, --unlock 解锁用户账户。

从命令行中删除用户

  • userdel username命令从/etc/passwd中删除了用户名的详细信息,但保留了用户的主目录。
  • userdel -r username命令从/etc/passwd中删除了用户名的详细信息,同时也删除了用户的主目录。

当使用 userdel 移除用户而不指定 -r 选项时,用户的文件得到保留。再创建新用户十会指定未使用的uid,新用户的UID和老用户的UID相同,新用户可以访问老用户保留的文件,这种情况可能会导致信息泄露和其他安全问题。

在 Red Hat Enterprise Linux 7 和 Red Hat Enterprise Linux 8 中,useradd 命令为新用户分配了第一个大于或等于 1000 未使用的UID,或者使用 -u 选项明确指定一个UID。

这就是信息泄露的原因。如果第一个空闲的UID之前被分配给了一个用户账户,而这个账户已经从系统中删除了,那么老用户的UID就会被重新分配给新用户,让新用户拥有老用户剩余文件的所有权。

下面的情景说明了这种情况。

[root@host ~]# useradd user01 
[root@host ~]# ls -l /home 
drwx------. 3 user01  user01    74 Feb  4 15:22 user01 
[root@host ~]# userdel user01 
[root@host ~]# ls -l /home 
drwx------. 3    1000    1000   74 Feb  4 15:22 user01 
[root@host ~]# useradd user02 
[root@host ~]# ls -l /home 
drwx------. 3 user02     user02       74 Feb  4 15:23 user02 
drwx------. 3 user02     user02       74 Feb  4 15:22 user01

注意,user02现在拥有user01之前拥有的所有文件。

根据不同的情况,解决这个问题的方法之一是当创建文件的用户被删除时,将所有未拥有的文件从系统中删除。另一种解决方法是将未拥有的文件手动分配给不同的用户。根用户可以使用 find / -nouser -o -nogroup 命令查找所有未拥有的文件和目录。

从命令行设置密码

passwd username命令设置初始密码或更改用户名的现有密码。

root用户可以将密码设置为任意值。如果密码不符合推荐的最低标准,会显示一条消息,但随后会提示重新输入新的密码。

[root@host ~]# passwd user01 
Changing password for user user01.
New password: redhat 
BAD PASSWORD: The password fails the dictionary check - it is based on a  dictionary word Retype new password: redhat 
passwd: all authentication tokens updated successfully.
[root@host ~]# 

普通用户必须选择一个至少8个字符以上的密码,而且也不能为弱密码。

UID范围

特定的UID号和数字范围被Red Hat Enterprise Linux用于特定目的。

  • UID 0总是被分配给超级用户账户,root
  • UID 1-200是红帽公司静态分配给系统进程的 "system users"范围。
  • UID 201-999是系统进程所使用的 "system users "范围,这些用户不拥有文件系统中的文件。它们通常是在安装需要它们的软件时从可用池中动态分配的。程序以这些 "非特权 "系统用户的身份运行,以限制他们只访问他们所需要的资源来运作。
  • UID 1000+是可以分配给普通用户的范围。

管理本地用户组

目标

完成本节内容后,学生能够创建、修改和删除本地用户组。

管理本地用户组

在用户被添加到该组之前,必须有一个组存在。有几个命令行工具可以用来管理本地组账户。

从命令行创建组

  • groupadd命令可以创建组,在没有选项的情况下,使用/etc/login.defs文件中指定的下一个可用的GID来创建组。
  • 选项 -g 指定了要使用的组的特定 GID。
[user01@host ~]$ sudo groupadd -g 10000 group01
[user01@host ~]$ tail /etc/group 
...output omitted... 
group01:x:10000:

选项 -r/etc/login.defs文件中列出的有效系统GID范围内的GID创建一个系统组。在 / etc/login.defs 中的 SYS_GID_MIN 和 SYS_GID_MAX 配置项定义了系统 GID 的范围。

[user01@host ~]$ sudo groupadd -r group02
[user01@host ~]$ tail /etc/group 
...output omitted... 
group01:x:10000: 
group02:x:988:

从命令行修改现有的组

groupmod 命令可以改变现有组的属性。选项 -n 为组指定一个新的名称。

[user01@host ~]$ sudo groupmod -n group0022 group02
[user01@host ~]$ tail /etc/group
...output omitted... 
group0022:x:988:

注意,组名从group02更新为group0022。

选项-g指定了一个新的GID。

[user01@host ~]$ sudo groupmod -g 20000 group0022
[user01@host ~]$ tail /etc/group 
...output omitted... 
group0022:x:20000:

注意,GID由988更新为20000。

从命令行中删除组

groupdel命令删除组。

[user01@host ~]$ sudo groupdel group0022

从命令行更改组成员

通过用户管理来控制组的成员资格。使用 usermod -g 命令来改变用户的主组。

[user01@host ~]$ id user02 
uid=1006(user02) gid=1008(user02) groups=1008(user02) 
[user01@host ~]$ sudo usermod -g group01 user02 
[user01@host ~]$ id user02
uid=1006(user02) gid=10000(group01) groups=10000(group01)

使用 usermod -aG 命令将用户添加到补充组中。

[user01@host ~]$ id user03 
uid=1007(user03) gid=1009(user03) groups=1009(user03) 
[user01@host ~]$ sudo usermod -aG group01 user03 
[user01@host ~]$ id user03
uid=1007(user03) gid=1009(user03) groups=1009(user03),10000(group01)

管理用户密码

目标

完成本节内容后,你能够为用户设置密码管理策略,并手动锁定和解锁用户账户。

影子密码和密码策略

曾几何时,加密的密码被存储在可读的/etc/passwd文件中。这被认为是相当安全的,直到字典攻击加密密码变得普遍。那时候,加密密码被转移到一个单独的/etc/shadow文件中,这个文件只有root才能读取。这个新文件还允许密码老化和过期功能的实现。

/etc/passwd一样,每个用户在/etc/shadow文件中都有一行。下图是/etc/shadow文件中的示例行,其中有九个冒号分隔的字段。

 user03:    $6$CSsX...output omitted...:    17933:  0:  99999:  7:  2:  18113: 
  1. 该密码所属账户的用户名。
  2. 用户的加密密码。加密密码的格式将在本节后面讨论。
  3. 上次修改密码的日期。这是自1970-01-01-01起,以天数为单位,以UTC时区计算。
  4. 自上次修改密码后,用户再次修改密码的最低天数。
  5. 在密码过期前,不更改密码的最大天数。空的字段表示自上次修改后的时间不会过期。
  6. 警告期。当用户在截止日期前的这个天数登录时,将被警告密码过期。
  7. 闲置期。一旦密码过期,在这多少天内仍会接受登录。过了这个期限后,账号将被锁定。
  8. 密码过期的日期。这是以1970-01-01-01起的天数为单位,以UTC时区计算。空字段意味着它不会在某一特定日期过期。
  9. 最后一个字段通常是空的,留待以后使用。

加密密码的格式

加密密码字段存储三个信息:使用的散列算法、盐和加密的散列。每条信息都用$符号来分隔。

$   6$  CSsXcYG1L/4ZfHr/$   2W6evvJahUfzfHpc9X.45Jc6H30E...output omitted...
  1. 这个密码使用的散列算法。数字6表示它是SHA-512散列算法,这在Red Hat Enterprise Linux 8中是默认的。
  2. 用来加密密码的盐。这原本是随机选择的。
  3. 用户密码的加密哈希值。将盐和未加密的密码结合起来并加密,生成密码的加密散列。

使用盐可以防止两个密码相同的用户在/etc/shadow文件中出现相同的条目。例如,即使user01和user02都使用redhat作为他们的密码,如果他们在/etc/shadow文件中的加密密码的盐值不同,那么他们在/etc/shadow中的加密密码也会不同。

密码验证

当用户尝试登录时,系统会在/etc/shadow中查找该用户的条目,将该用户的盐和输入的未加密密码结合起来,并使用指定的散列算法进行加密。如果结果与加密后的散列算法匹配,说明用户输入的密码是正确的。如果结果与加密的散列算法不匹配,则说明用户输入了错误的密码,登录尝试失败。这种方法允许系统判断用户是否输入了正确的密码,而不会将该密码存储在可用于登录的形式中。

配置密码过期

下图是相关的密码时效参数,可以使用chage命令调整密码时效策略的相关参数。

[user01@host ~]$ sudo chage -m 0 -M 90 -W 7 -I 14 user03

前面的chage命令分别使用-m、-M、-M、-W-I选项来设置用户密码的最小年龄、最大年龄、警告期和不活跃期。

chage -d 0 user03命令强制user03用户在下次登录时更新密码。

chage -l user03命令显示user03的密码老化信息。

chage -E 2019-08-05 user03 命令会导致 user03 用户的账户在 2019-08-05 日过期(格式为 YYYY-MM-DD)。

日期命令可以用来计算未来的日期。-u选项报告的时间单位是UTC。

[user01@host ~]$ date -d "+45 days" -u
Thu May 23 17:01:20 UTC 2019

编辑/etc/login.defs文件中的密码过期配置项,设置默认的密码过期策略。PASS_MAX_DAYS 设置密码的默认最大年龄。PASS_MIN_DAYS 设置密码的默认最小年龄。PASS_WARN_AGE 设置密码的默认警告期。默认密码时效策略的任何更改都只对新用户有效。现有用户将继续使用旧的密码时效设置,而不是新的密码时效设置。

限制进入

你可以使用chage命令来设置账户的到期日期。当到达该日期后,用户不能交互式地登录系统。usermod命令可以用-L选项锁定账户。

user01@host ~]$ sudo usermod -L user03
[user01@host ~]$ su - user03 
Password: redhat 
su: Authentication failure

如果用户离开公司,管理员可以通过一条usermod命令锁定和过期。日期必须以1970-01-01-01-01以来的天数,或以YYY-MM-DD格式给出。

[user01@host ~]$ sudo usermod -L -e 2019-10-05 user03

前面的 usermod 命令使用 -e 选项来设置用户账户的到期日。而 -L 选项则锁定了用户的密码。

锁定账户可以防止用户用密码验证系统的身份验证。这是推荐的防止已经离开公司的员工访问账户的方法。如果该员工回来了,以后可以用usermod -U来解锁该账户。如果账户也是过期的,一定要同时更改过期日期。

nologin Shell

nologin shell作为非交互式登录系统的用户账号的替代shell。从安全的角度来看,当用户帐号所服务的职责不需要用户登录系统时,禁止用户帐号登录系统是明智的做法。例如,一个邮件服务器可能需要一个账户来存储邮件,并需要一个密码,让用户通过邮件客户端进行身份验证,以获取邮件。该用户不需要直接登录系统。

针对这种情况,常见的解决办法是将用户的登录 shell设置为/sbin/nologin。如果用户试图直接登录系统,nologin shell会关闭连接。

[user01@host ~]$ usermod -s /sbin/nologin user03
[user01@host ~]$ su - user03
Last login: Wed Feb  6 17:03:06 IST 2019 on pts/0 This account is currently not available.

总结

  • 用户账户主要有三种类型:超级用户、系统用户和普通用户。
  • 一个用户必须有一个主组,可以是一个或多个补充组的成员。
  • 包含用户和组信息的三个关键文件是/etc/passwd/etc/group/etc/shadow
  • susudo命令可以作为超级用户来运行命令。
  • useraddusermoduserdel命令可以用来管理用户。
  • groupaddgroupmodgroupdel命令可以用来管理组。
  • chage 命令可用于配置和查看用户的密码过期设置。

你可能感兴趣的:(RH124|第六章 管理本地用户和群组)