RHCSA学习笔记-05管理本地用户和组

RHCSA学习笔记-05管理本地用户和组

  • 最近更新2022年05月07日

学习目标:创建、管理和删除本地用户和组,以及管理本地密码策略。

掌握知识点:

  • 了解Linux系统上用户和组的用途;
  • 用户切换方法;
  • 创建、删除和修改本地用户;
  • 创建、删除和修改本地用户组;
  • 为用户设置密码管理策略,并且手动锁定和解锁用户。

 

一、用户和组的概念

1.1 用户

用户帐户用于在可以运行命令的不同人员和程序之间提供安全界限。

在内部,系统通过分配的唯一标识号 (用户ID,即UID)来区分不同的用户帐户。在使用用户帐户时,通常会为其分配一个密码,供用户用于在登录时证明他们是授权用户。

用户帐户有三种主要类型:超级用户系统用户普通用户

超级用户用于管理系统。超级用户的名称为root,其帐户UID为0。超级用户对系统具有完全访问权限。

系统用户供提供支持服务进程使用。这些进程(或守护进程)通常不需要以超级用户身份运行。系统会为它们分配非特权帐户,允许它们确保其文件和其他资源不受彼此以及系统上普通用户的影响。用户无法使用系统用户帐户以交互方式登录。

普通用户用于处理日常工作的普通用户帐户。与系统用户一样,普通用户对系统具有有限的访问权限。

# 查看当前已登录用户信息
id

# 查看 root 用户信息
id root

 

# 创建空白文件 0504
touch 0504

# 查看 0504 文件的所有者
ls -l 0504

 

要查看进程信息,可使用ps命令。默认为仅显示当前shell中的进程。添加a选项可查看与某一终端相关的所有进程。若要查看与进程相关联的用户,请在命令中包含u选项。

以上命令的输出按名称显示用户,但操作系统内部利用UID来跟踪用户。用户名到UID的映射在帐户信息数据库中定义。默认情况下,系统使用/etc/passwd文件存储有关本地用户的信息。

/etc/passwd文件的每一行都包含了有关某个用户的信息。它分为七段以冒号分隔的字段。以下 是/etc/passwd中某一行的示例:

 

1.2 组

组是需要共享文件和其他系统资源访问权限的用户的集合。组可用于向一组用户授予文件访问权 限,而非仅仅向一个用户授予访问权限。

与用户相似,组也有组名称以增加操作的便利性。在内部,系统通过分配的唯一标识号(组ID或 GID)来区分不同的组。

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

/etc/group文件的每一行都包含了有关某个组的信息。每个组条目被分为四个以冒号分隔的字段。以下是/etc/group中某一行的示例:

二、获取超级用户访问权限

2.1 超级用户

大多数操作系统具有某种类型的超级用户,即具有系统全部权限的用户。在红帽企业Linux中,此为root用户。该用户的特权高于文件系统上的一般特权,用于管理系统。要执行诸如安装或删除软件以及管理系统文件和目录等任务,必须将特权升级到root用户。

普通用户能控制大部分的设备,但也有一些例外,只有此时才需要root用户。例如,普通用户可以控制可移动设备,如USB设备。因此,虽然普通用户可以添加和删除文件并可管理可移动的设备。

尽管如此,这种无限制的特权也带来了职责问题。root用户拥有足以破坏系统的无限制权限:删除文件和目录、删除用户帐户,以及添加后门等。如果root帐户泄露,则其他人就有可能拥有系统的管理控制权限。

2.2 切换用户

su命令可让用户切换至另一个用户帐户。如果从普通用户帐户运行su,系统会提示您输入要切 换的帐户的密码。当以root用户身份运行su时,则无需输入用户密码。

# 查看当前用户
whoami
# 普通用户切换到管理员
su
# 查看当前用户
whoami

# 从管理员切到普通用户 lab
su lab
# 查看当前用户
whoami

# 从普通用户退回管理员
exit
# 查看当前用户
whoami

# 再从管理员退到最初的普通用户
exit
# 查看当前用户
whoami

 

除了使用 su 命令,还有一个 su – 命令,它们的功能上基本上相似,但也有所不同。命令su将启动非登录shell,而命令su –(带有短划线选项)会启动登录shell。

su –会将shell环境设置为如同以该用户身份重新登录一样。

su仅以该用户身份启动shell,但使用的是原始用户的环境设置。

 

2.3 通过SUDO运行命令

有时为安全起见,root用户的帐户可能根本没有有效的密码。在这种情况下,用户无法使用密码 直接以root身份登录系统,也不能使用su获取交互式shelL在这种情况下,一个可以用于获取 root访问权限的工具是sudo。

su不同,sudo通常要求用户输入其自己的密码以进行身份验证,而不是输入他们正尝试访问的用户帐户的密码。也就是说,用户使用sudo以root运行命令时,不需要知道root密码。相反, 他们将使用自己的密码来验证访问权限。
此外,sudo可以配置为允许特定用户像某个其他用户一样运行任何命令,或仅允许以该用户身份 运行部分命令。

# 锁定用户
sudo usermod -L lab

如果某用户尝试以另一用户身份运行命令,但sudo配置不允许,该命令将被阻止,这次尝试也会被记录下来,并且默认情况下还会向root用户发送一封电子邮件。

使用sudo的另一个优点在于,执行的所有命令都默认为将日志记录到/var/log/secure中。

 

二、管理本地用户帐户

2.1 管理本地用户

useradd username命令将创建一个名为username的新用户。它会设置用户的主目录和帐户信息,并为名为username的用户创建一个专用组。此时,该帐户尚未设置有效的密码,用户要等设置了密码后才能登录。

useradd –help命令将显示可用于覆盖默认值的基本选项。在大多数情形中,可以将相同的选项用于usermod命令,以修改现有的用户。

一些默认值从/etc/login.defs文件中读取,如有效UID编号的范围和默认密码过期规则。此文件中的值仅在创建新用户时使用。更改此文件对现有用户毫无影响。

userdel username命令从/etc/passwd中删除username的详细信息,但会保留用户的主目录。

userdel -r username命令从/etc/passwd中删除username的详细信息,同时删除用户的主目录。

# 查看 /home 下的内容
ls /home/

# 创建用户 u00、u01及u02
useradd u00
useradd u01
useradd u02
# 查看 /home 下的内容
ls /home/

# 删除用户u02
userdel u02
# 查看 /home 下的内容
ls /home/

# 删除用户u01 并删除主目录
userdel -r u01
# 查看 /home 下的内容
ls /home/

 

passwd username命令可为username设置初始密码,或更改其现有的密码。

root用户可以将密码设为任何值。如果密码不符合最低建议标准,系统将显示消息;不过,之后会显示提示要求重新键入该新密码,所有令牌也会成功更新。

# 修改 u00 用户密码
passwd u00

普通用户必须选择长度至少为8个字符,并且还不以字典词语、用户名或上一次密码为基础的密码。

 

2.2 UID范围

特定的UID编号和编号范围供红帽企业Linux用于特定的目的。

  • UID 0始终分配至超级用户帐户root。
  • UID 1-200是一系列“系统用户”,由红帽静态分配给系统进程。
  • UID 201-999是一系列“系统用户”,供文件系统中没有自己的文件的系统进程使用。通常在安装 需要它们的软件时,从可用池中动态分配它们。程序以这些“无特权”系统用户身份运行,以便 限制它们仅访问正常运行所需的资源。
  • UID 1000+是可供分配给普通用户的范围。

 

三、管理本地组帐户

3.1 管理本地组

组必须存在后,用户才能添加到其中。可以使用多款命令行工具管理本地组帐户。

groupadd命令用于创建组。不带选项时,groupadd命令会在创建组时使用/etc/ login.defs文件中指定范围内的下一个可用GID。

-g选项指定要使用的组的特定GID。

# 切换到 root 用户
su root

# 创建用户组 g1
groupadd g1

# 创建用户组,并指定组id
groupadd -g 10000 g2

# 查看创建的组信息
tail -n 2 /etc/group

# 返回普通管理员权限
exit

 

每次操作切换用户太麻烦,安全性也差,有没有一种方法,可以不需要切换用户做到操作此类操作的?

答案是:有,可以通过sudo 命令来获取交互式的 root shell 权限。需要以管理员身份修改 /etc/sudoers 文件,具体操作如下:

# 查看当前用户属于哪个用户组(备用)
groups

# 切换到 root 用户
su root
# 使用 vim 命令打开 /etc/sudoers 文件
vim /etc/sudoers

在文件中第100行的后面加入如下内容(第101行):

输入内容是将当前普通用户所属的组,加入到了列表中,即可以实现完sudo 命令来执行具有管理员权限的内容,输入完成后,“:wq!” 强制保存并退出。

# 退回到普通用户
exit

# 添加用户组 g3
sudo groupadd g3

groupmod命令可更改现有组的属性。-n选项指定组的新名称。

# 将组 g3 更名为 g5
sudo groupmod -n g5 g3

 

groupdel命令可删除组。

# 删除组 g5
sudo groupdel g5

 

3.2 从命令行更改组成员资格

组成员资格是通过用户管理进行控制的。可以使用usermod -g 命令来更改用户的主要组。

# 添加用户 u10、u11
sudo useradd u10
sudo useradd u11

# 查看用户信息
id u10
# 修改用户组
sudo usermod -g g2 u10
# 查看用户信息
id u10

# 查看用户信息
id u11
# 将用户添加到补充组中
sudo usermod -aG g2 u11
# 查看用户信息
id u11

 

四、管理用户密码

4.1 阴影密码和密码策略

加密的密码一度存储在全局可读的/etc/passwd文件中。这曾被认为最具合理的安全性,直到对加密密码的字典式攻击变得常见。那个时候,加密的密码被移动到只有root用户才能读取的独立/etc/shadow文件中。这种新文件也允许实施密码期限和到期功能。

/etc/passwd相似,每个用户在/etc/shadow文件中都有对应的一行。下方显示了来自/etc/shadow的示例行,以及其九个冒号分隔字段。

 

4.2 加密密码的格式

加密密码字段中存储了三段信息:所用的哈希算法salt加密哈希值。每段信息由$符号分隔。

使用salt可以防止两个密码相同的用户在/etc/shadow文件中拥有相同的条目。例如,即使 u00和u01都将123456用作其密码,如果salt不同,那么它们在/etc/shadow中的加密密码也是不同的。

4.3 密码验证

用户尝试登录时,系统在/etc/shadow中查询用户的条目,将用户的salt和键入的未加密密码组合,再使用指定的哈希算法加密。如果结果与已加密哈希匹配,则用户键入了正确的密码。如果结果与已加密密码不符,则用户键入了错误的密码,登录尝试也会失败。这种方式允许系统判断用户是否键入了正确的密码,同时又不以用于登录的密码形式来存储密码。

4.4 配置密码期限

下图显示了相关的密码期限参数,可以通过chage命令对其调整来实施密码期限策略。

# 修改密码期限
sudo chage -m 0 -M 90 -W 7 -I 14 u10

上面的chage命令使用了:

  •  -m:设置用户密码的最短期限
  • -M:设置用户密码的最长期限
  • -W:设置用户密码的警告周期
  • -I:设置用户密码的失效期限

 

# 强制 u10 用户在下一次登录时更新其密码
chage -d 0 u10

# 显示 u10 的密码期限详情
chage -l u10

# u10 用户的帐户于 2022-08-01 到期(YYYY-MM-DD 格式)
chage -E 2022-08-01 u10

 

4.5 限制访问

可以使用chage命令来设置帐户到期日期。到了该日期时,用户无法以交互方式登录系 统。usermod命令可以通过-L选项锁定帐户。

# 修改 u10 用户密码,不修改密码是不能登录的
sudo passwd u10

# 锁定 u10 用户
sudo usermod -L u10

# 尝试登录锁定用户
su u10

 

如果用户离开公司,管理员可以通过一个usermod命令锁定帐户并使其到期。该日期必须使用距离1970-01-01的天数来指定,或者以YYYY-MM-DD格式指定。

sudo usermod -L -e 2022-10-01 u10

 

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

锁定帐户可防止用户使用密码向系统进行验证。这是预防已离开公司的员工访问某一帐户的推荐方式。如果以后该员工返回,其帐户可通过usermod -U解锁。如果帐户也已到期,务必也要更改到期日期。

 

4.6 限制登录

nologin shell用作不打算以交互方式登录系统的用户帐户的替代shell。从安全角度来看,如果用户帐户担当的职责不需要用户登录系统,则禁止用户帐户登录系统是明智的。例如,邮件服务器可能需要帐户来存储邮件,需要密码供用户通过检索邮件所用的邮件客户端进行身份验证。用户不需要直接登录该系统。这种情况的常用解决方案是将用户的登录shell设为/sbin/nologino如果用户试图直接登录系统,nologin shell将关闭该连接。

# 对用户 u10 解锁
sudo usermod -U u10

# 修改用户不允许登录
sudo usermod -s /sbin/nologin u10

# 登录测试
su u10

# 创建用户的同时设置不请允许登录系统
sudo useradd u20 -s /sbin/nologin 

 

 

 

分享到 :

发表评论

您的电子邮箱地址不会被公开。