4.2. 控制根访问
在管理家计算机时,用户必须以
禁用 root SSH 登录
使用 PAM 限制对服务的 root 访问权限
root
用户身份执行一些任务,或者使用
setuid
程序(如
sudo
或
su
)获取有效的
root
特权。setuid 程序是与程序的所有者的用户 ID (
UID
)而不是用户操作程序运行的用户 ID (UID)。这些程序由长格式列表的所有者部分的
s
表示,如下例所示:
~]$
ls -l /bin/su
-rwsr-xr-x. 1 root root 34904 Mar 10 2011 /bin/su
注意
s
可能为大写或小写。如果显示为大写,这表示没有设置底层权限位。
但是,对于组织的系统管理员,必须做出选择,因为该机构中的管理访问权限用户应该对其机器具有多少管理访问权限。通过名为
pam_console.so
的 PAM 模块,通常只为 root 用户保留一些活动,如重新启动和挂载可移动介质,则允许物理控制台登录的第一个用户。但是,在没有管理特权的情况下,无法更改网络设置、配置新鼠标或挂载网络设备等其他重要的系统管理任务。因此,系统管理员必须决定应收到其网络上的用户数量。
4.2.1. 禁止 Root 访问
如果管理员不可更改地允许用户以
root
身份登录,或者出于其他原因,应保留了 root 密码,并且应保持 secret,并且应禁止访问运行级别一个或多个用户模式(有关此主题的更多信息,请参阅
第 4.2.5 节 “保护 Boot Loader”
)。
以下是管理员可以进一步确保禁止
root
登录的四个不同方法:
- 更改 root shell
-
为防止用户直接以
root
身份登录,系统管理员可以将root
帐户的 shell 设置为/etc/passwd
文件中的 /sbin/nologin 。表 4.2. 禁用 Root Shell 影响 未受影响 阻止访问root
shell 并记录任何此类尝试。以下程序无法访问root
帐户: login 不需要 shell 的程序,如 FTP 客户端、邮件客户端和许多 setuid 程序。以下程序 不会阻止 访问root
帐户: FTP 客户端 电子邮件客户端 - 使用任何控制台设备(tty)禁用 root 访问权限
-
要进一步限制对
root
帐户的访问,管理员可以通过编辑/etc/securetty
文件来禁用在控制台中的root
登录。此文件列出了允许root
用户登录的所有设备。如果文件根本不存在,root
用户可以通过系统上的任何通信设备(无论是通过控制台还是原始网络接口)登录。这很危险,因为用户可以使用 Telnet 以root
身份登录其计算机,这会通过网络以纯文本形式传输密码。 默认情况下,Red Hat Enterprise Linux 7 的/etc/securetty
文件只允许root
用户在与机器物理连接的控制台中登录。要防止root
用户登录,请以root
用户身份在 shell 提示符下输入以下命令来删除此文件的内容:echo > /etc/securetty
要在 KDM、GDM 和 XDM 登录管理器中启用securetty
支持,请添加以下行:auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
以下列出的文件:/etc/pam.d/gdm
/etc/pam.d/gdm-autologin
/etc/pam.d/gdm-fingerprint
/etc/pam.d/gdm-password
/etc/pam.d/gdm-smartcard
/etc/pam.d/kdm
/etc/pam.d/kdm-np
/etc/pam.d/xdm
空白/etc/securetty
文件不会阻止root
用户使用 OpenSSH 工具套件进行远程登录,因为在身份验证后不会打开控制台。
影响 | 未受影响 |
---|---|
阻止使用控制台或网络访问
root
帐户。以下程序无法访问
root
帐户:
login
打开 tty 的其他网络服务
不以
root
身份登录但通过 setuid 或其他机制执行管理任务的程序。以下程序
不会阻止
访问
root
帐户:
|
要防止
root
通过 SSH 协议登录,请编辑 SSH 守护进程的配置文件
/etc/ssh/sshd_config
,并更改如下行:
#PermitRootLogin yes
如下所示:
PermitRootLogin no
影响 | 未受影响 |
---|---|
使用 OpenSSH 工具套件进行
root
访问。以下程序无法访问
root
帐户:
不属于 OpenSSH 工具套件的程序。
|
PAM 通过
/lib/security/pam_listfile.so
模块,在拒绝特定帐户时具有很大的灵活性。管理员可以使用此模块来引用不允许登录的用户列表。要限制对系统服务的
root
访问权限,请编辑
/etc/pam.d/
目录中目标服务的 文件,并确保验证需要
pam_listfile.so
模块。
以下是如何将模块用于
/etc/pam.d/
vsftpd
PAM 配置文件中的 vsftpd
FTP 服务器(如果指令位于一行中,
则不需要在
第一行末尾的
\
字符):
auth required /lib/security/pam_listfile.so item=user \ sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
这指示 PAM 查阅
/etc/vsftpd.ftpusers
文件,并拒绝访问任何列出用户的服务。管理员可以更改此文件的名称,并可为每个服务保留单独的列表,或使用一个中央列表拒绝对多个服务的访问。
如果管理员希望拒绝对多个服务的访问,可以将类似的行添加到 PAM 配置文件,如
/etc/pam.d/pop
和
/etc/pam.d/imap
用于邮件客户端,或
/etc/pam.d/ssh
用于 SSH 客户端。
有关 PAM 的更多信息,请参阅
Linux-PAM 系统管理员指南
,位于
/usr/share/doc/pam-<version>/html/
目录中。
影响 | 未受影响 |
---|---|
防止对 PAM 感知的网络服务的
root
访问。以下服务无法访问
root
帐户:
login
FTP 客户端
电子邮件客户端
任何 PAM 感知服务
不了解 PAM 的程序和服务.
|
4.2.2. 允许根访问
如果机构中的用户受信任且计算机同步,则允许他们
root
访问权限不是问题。用户允许
root
访问权限意味着,像添加设备或配置网络接口等小活动可由单个用户处理,让系统管理员可以自由处理网络安全性和其他重要问题。
另一方面,为单个用户提供
root
访问权限可能会导致以下问题:
Machine Misconfiguration
- 具有
root
访问权限的用户可能会错误地配置其机器,并需要帮助解决问题。甚至更糟糕,它们可能会在不知情的情况下打开安全漏洞。
运行 Insecure Services
- 具有
root
访问权限的用户可能会在其计算机上运行不安全的服务器,如 FTP 或 Telnet,可能会使用户名和密码面临风险。这些服务通过网络以纯文本形式传输此信息。
以 Root 身份运行
电子邮件附件 - 尽管存在影响 Linux 的电子邮件病毒。恶意计划由
root
用户运行时构成了最大的威胁。
保持审计跟踪不变
- 因为
root
帐户通常由多个用户共享,因此多个系统管理员可以维护系统,因此无法找出这些用户在给定时间是
root
用户。使用单独的登录时,通过 登录帐户以及会话跟踪目的的唯一编号将置于任务结构中,由用户启动的每个进程继承。使用并发登录时,可以使用唯一数字来跟踪操作到特定登录。当某个操作生成审计事件时,它会与登录帐户以及与该唯一数字关联的会话记录。使用
aulast
命令查看这些登录和会话。
aulast
命令的
--
effective 选项可以建议一个特定的
ausearch
查询来隔离特定会话生成的可审计事件。有关审计系统的更多信息,请参阅
第 7 章
系统审计
。
4.2.3. 限制根访问
管理员可能只想通过 setuid 程序(如
su
或
sudo
)允许访问,而不是完全拒绝对
root
用户的访问。有关
su
和
sudo
的更多信息,请参阅 Red Hat Enterprise Linux 7 系统管理员指南中的
获取特权
章节,以及
su (1)
和
sudo (8)
手册页。
4.2.4. 启用自动注销
当用户以
root
身份登录时,无人值守登录会话可能会导致严重的安全风险。要降低这个风险,您可以将系统配置为在固定时间段内自动注销闲置用户。
以
root
用户身份,在
/etc/profile
文件的开头添加以下行,以确保无法中断此文件的处理:
trap "" 1 2 3 15
以
root
用户身份,将以下行插入到
/etc/profile
文件中,以便在 120 秒后自动注销:
export TMOUT=120 readonly TMOUT
如果指定秒数没有活动(上例中设为
120
),则
TMOUT
变量终止 shell。您可以根据特定安装的需求更改限制。