Linux 账户控制
新增账户
只有 root 权限,或者有能力使用 sudo 指令的账户,才有能力使用 useradd 指令
useradd [OPTIONS] USERNAME
OPTIONS
- -m 创建用户目录
- -m -d /opt/username 自定义用户的用户目录
- -u 1500 指定用户的 uid
- -g users 指定用户的用户组
删除账户
userdel username
删除用户,并且删除用户的主目录
userdel -r username
限制账户运行特定程序
为了限制账户的运行特定程序的行为,需要利用到 Linux 的用户组特性,以及 PAM 机制
首先,需要创建两个测试账户
sudo adduser user1
sudo adduser user2
然后,创建一个新的用户组
sudo groupadd adminmembers
然后将上面两个测试账户添加进新创建的用户组
sudo usermod -aG adminmembers user1
sudo usermod -aG adminmembers user2
然后检查用户组内是否有这两个用户
getent group adminmembers
Debian Family - 使用update-alternatives方案
sudo dpkg-statoverride --update --add root adminmembers 4750 /bin/su
在这里, sudo dpkg-statoverride --update --add命令用于覆盖基于 Debian 的 Linux 发行版上特定文件的文件权限和所有权。 在本例中,该命令正在为 /bin/su二进制。
让我们分解一下命令:
sudo:这用于以超级用户(root)权限运行命令。 您将需要管理权限才能修改系统文件。
dpkg-statoverride:这是基于 Debian 的系统中的一个命令行工具,允许您覆盖由包管理器管理的包的文件权限和所有权。
--update: 这个选项告诉 dpkg-statoverride更新指定的覆盖(如果已存在)。
--add:此选项表示我们要添加新的覆盖。
root:指定将为文件设置所有权的用户。
adminmembers:指定将为文件设置所有权的组。
4750:这是文件权限的数字表示。 价值 4750执行时有一个名为“SetUID”(设置用户 ID)的特殊权限。 当。。。的时候 su二进制文件设置了 > > SetUID 位,它使用文件所有者(root)的有效用户 ID 运行,而不是使用执行它的用户。 这允许普通用户在运行时临时切换到root用户的权限 su.
/bin/su:这是要设置覆盖的文件的路径。 在这种情况下,它是 /bin/su二进制文件,允许用户在提供必要的密码后切换到另一个用户的帐户(通常是 root 用户)。
因此,该命令正在添加对权限和所有权的覆盖 /bin/su二进制。 它将文件的所有者设置为 root, 分组到 adminmembers,并授予该文件 SetUID 权限。 这意味着当用户运行 su命令,它将以root权限运行,允许他们在提供适当的密码后切换到root用户或具有超级用户权限的其他用户。 非“adminmembers”组成员不能使用 su命令,即使他们有 sudo 权限。
如何撤销
dpkg-statoverride --list /bin/su
检查当前的su的权限配置参数
sudo dpkg-statoverride --remove /bin/su
从当前的配置中,将su的配置项进行移除
RHEL-based Family - PAM
同样的,创建用户,创建用户组,然后将新创建的用户加入到用户组内
然后检查/etc/security/su-adminmembers-access文件是否存在,内容为什么
# cat /etc/security/su-adminmembers-access
admin
并且确保这个文件的权限是受保护的
# ls -l /etc/security/su-adminmembers-access
-rw-r--r-- 1 root root 7 Dec 4 12:44 /etc/security/su-adminmembers-access
然后配置PAM的配置文件:/etc/pam.d/su
auth required pam_wheel.so use_uid group=adminmembers debug
auth required pam_listfile.so item=user sense=allow onerr=fail file=/etc/security/su-adminmembers-access
- 只有“adminmembers”组中的用户(例如本例中为 oracle)可以使用有效密码通过“su – admin”切换到管理员
- adminmembers组中的用户只能通过su – admin切换到admin,切换到其他用户仍然失败
- 不在“adminmembers”组中的用户无法使用“su”切换用户
- 用户“root”仍然可以切换到任何其他用户
- 请注意,只有当您需要如此严格的 su 策略时才可以考虑上述设置。 一般来说,建议使用 sudo 来实现更自适应的切换策略。