限制 su 对 Linux 中特权帐户的访问 |
如何限制 Linux 上的 su 命令仅允许特权帐户(例如管理员用户组)使用? su 实用程序通过 PAM 请求适当的用户凭据并切换到该用户 ID(默认用户是超级用户)。在本文中,我们将了解如何在 Linux 系统中配置 pam 以将 su 限制为仅限某些用户。
我们将创建一个组并将 su 的使用限制为该组中的用户。 PAM 用于设置 su 将使用的策略。可以配置为允许不同组的用户通过su访问特定的目标UID。此操作所需的 PAM 模块是:
- pam_succeed_if
- pam_wheel.so
- pam_listfile.so
在本指南结束时我们将完成什么:
- 创建 Linux 群组通话 sysadmins
- 配置 PAM 以允许组中的用户使用 su
- 使用 su 切换为任何其他用户将失败
第 1 步:创建组并添加用户
我们首先创建两个 Linux 组:sysadmins 和 dbadmins
sudo groupadd sysadmins
sudo groupadd dbadmins
创建三个用户,一个名为 admin1,另一个名为 dbuser1,最后一个名为 testuser1
# Create admin1 user
sudo useradd admin1
sudo passwd admin1
# Create dbuser1
sudo useradd dbuser1
sudo passwd dbuser1
# Create testuser1
sudo useradd testuser1
sudo passwd testuser1
将admin1用户分配给sysadmins组。
sudo usermod -G sysadmins admin1
将dbuser1用户分配给dbadmins组。
sudo usermod -G dbadmins dbuser1
通过检查 getent 的输出来确认用户已正确分配到相关组:
$ getent group sysadmins
sysadmins:x:1001:admin1
$ getent group dbadmins
dbadmins:x:1002:dbuser1
步骤 2:配置 su PAM 策略
创建一个新文件 /etc/security/su-sysadmins-access 文件,并添加允许 sysadmins 组中的用户使用 su < 访问的目标 UID命令:
$ sudo vim /etc/security/su-sysadmins-access
root
创建另一个文件 /etc/security/su-dbadmins-access 并添加允许 dbadmins 组中的用户访问的目标 UID su命令:
$ sudo vim /etc/security/su-dbadmins-access
postgres
oracle
将创建的文件的写访问权限限制为仅 root 用户。
sudo chown root:root /etc/security/su-sysadmins-access
sudo chown root:root /etc/security/su-dbadmins-access
sudo chmod 0644 /etc/security/su-sysadmins-access
sudo chmod 0644 /etc/security/su-dbadmins-access
确认权限:
$ ls -lh /etc/security/su-sysadmins-access
-rw-r--r--. 1 root root 5 Jan 30 10:19 /etc/security/su-sysadmins-access
$ ls -lh /etc/security/su-dbadmins-access
-rw-r--r--. 1 root root 16 Jan 30 10:20 /etc/security/su-dbadmins-access
通过编辑文件 /etc/pam.d/su 配置 PAM
sudo vim /etc/pam.d/su
添加以下行:
auth required pam_wheel.so use_uid group=sysadmins
auth required pam_listfile.so item=user sense=allow onerr=fail file=/etc/security/su-sysadmins-access
auth required pam_wheel.so use_uid group=dbadmins
auth required pam_listfile.so item=user sense=allow onerr=fail file=/etc/security/su-dbadmins-access
这些变化意味着什么:
- sysadmins 组的成员 (admin1) 只能 su 为 root 用户。
- dbadmins 的成员 (dbuser1) 只能 su 到 postgres 和 oracle
步骤 3:测试 su PAM 策略
以 admin1 用户身份登录并使用 su 尝试将 UID 更改为允许的 root 用户。
$ ssh admin1@localhost
[admin1@centos ~]$ su - root #enter root user password
Password:
Last login: Sat Jan 30 10:17:26 UTC 2021 from 172.20.11.12 on pts/0
[root@centos ~]# exit
logout
以 dbuser1 用户身份登录,并使用 su 尝试将 UID 更改为允许的 postgres 用户。
$ ssh dbuser1@localhost
$ su - postgres # the user should exist before
# Or
$ su - oracle
以 testuser1 用户身份登录并尝试任何 su – 它应该会失败
$ ssh testuser1@localhost
$ su - root
Password:
su: Permission denied
$ su - postgres
您现在已使用 su
命令保护对 root 用户的访问。