限制 su 对 Linux 中特权帐户的访问限制 su 对 Linux 中特权帐户的访问限制 su 对 Linux 中特权帐户的访问限制 su 对 Linux 中特权帐户的访问
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

限制 su 对 Linux 中特权帐户的访问

发表 admin at 2025年2月28日
类别
未分类
标签

如何限制 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 用户的访问。

©2015-2025 Norria support@norria.com