4.2. 控制根访问
在管理家计算机时,用户必须以
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
- gdm
- kdm
- XDM
- su
- ssh
- scp
- sftp
不需要 shell 的程序,如 FTP 客户端、邮件客户端和许多 setuid 程序。以下程序 不会阻止 访问root
帐户:- sudo
- 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 工具套件进行远程登录,因为在身份验证后不会打开控制台。表 4.3. 禁用 root 登录 影响 未受影响 阻止使用控制台或网络访问root
帐户。以下程序无法访问root
帐户:- login
- gdm
- kdm
- XDM
- 打开 tty 的其他网络服务
不以root
身份登录但通过 setuid 或其他机制执行管理任务的程序。以下程序 不会阻止 访问root
帐户:- su
- sudo
- ssh
- scp
- sftp
- 禁用 root SSH 登录
- 要防止
root
通过 SSH 协议登录,请编辑 SSH 守护进程的配置文件/etc/ssh/sshd_config
,并更改如下行:#PermitRootLogin yes
如下所示:PermitRootLogin no
表 4.4. 禁用 root SSH 登录 影响 未受影响 使用 OpenSSH 工具套件进行root
访问。以下程序无法访问root
帐户:- ssh
- scp
- sftp
不属于 OpenSSH 工具套件的程序。 - 使用 PAM 限制对服务的 root 访问权限
- 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/
目录中。表 4.5. 使用 PAM 禁用 Root 影响 未受影响 防止对 PAM 感知的网络服务的root
访问。以下服务无法访问root
帐户:- login
- gdm
- kdm
- XDM
- ssh
- scp
- sftp
- 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。您可以根据特定安装的需求更改限制。
4.2.5. 保护 Boot Loader
密码保护 Linux 引导装载程序的主要原因如下:
- 防止访问单用户模式 - 如果攻击者可以将系统引导至单用户模式,则它们会自动以
root
身份登录,而不会提示输入root
密码。警告不建议通过编辑/etc/sysconfig/init
文件中的SINGLE
参数来保护对单用户模式的访问。攻击者可以通过在 GRUB 2 的内核命令行中指定自定义初始命令(使用init=
参数)来绕过密码。建议对 GRUB 2 引导装载程序进行密码保护,如 Red Hat Enterprise Linux 7 系统管理员指南中的 使用密码保护 GRUB 2 章节中所述。 - 防止访问 GRUB 2 控制台 - 如果机器使用 GRUB 2 作为其引导装载程序,攻击者可以使用 GRUB 2 编辑器界面更改其配置或使用 cat 命令来收集信息。
- 防止对 Insecure Operating Systems 的访问 - 如果它是一个双引导系统,攻击者可以在引导时选择操作系统,例如 DOS,它会忽略访问控制和文件权限。
Red Hat Enterprise Linux 7 在 Intel 64 和 AMD64 平台上包括 GRUB 2 引导装载程序。有关 GRUB 2 的详细信息,请参阅 Red Hat Enterprise Linux 7 系统管理员指南中的 使用 GRUB 2 Boot Loader 章节。
4.2.5.1. 禁用交互式启动
在启动序列开始时按 I 键可让您以交互方式启动您的系统。在交互式启动过程中,系统会提示您逐一启动每个服务。但是,这可能会允许获得系统物理访问权限的攻击者禁用与安全相关的服务,并可以访问该系统。
要防止用户以 root 用户身份启动系统,以
root
用户身份在 /etc/sysconfig/init
文件中禁用 PROMPT
参数:
PROMPT=no
4.2.6. 保护硬链接和符号链接
为了防止恶意用户利用未经保护的硬链接和符号链接导致的潜在漏洞,Red Hat Enterprise Linux 7 包含一个仅允许创建或遵循某些条件的链接的功能。
如果是硬链接,则需要满足以下条件之一:
- 用户拥有其链接的文件。
- 用户已对其链接的文件具有读写访问权限。
如果是符号链接,只有当具有粘滞位的全局可写目录外,或者需要满足以下条件之一时,进程才被允许遵循链接:
- 符号链接后面的进程是符号链接的所有者。
- 目录的所有者与符号链接的所有者相同。
默认开启这个保护。它由
/usr/lib/sysctl.d/50-default.conf
文件中的以下选项控制:
fs.protected_hardlinks = 1 fs.protected_symlinks = 1
要覆盖默认设置并禁用保护,请在
/etc/sysctl.d/
目录中创建一个名为 51-no-protect-links.conf
的新配置文件,其内容如下:
fs.protected_hardlinks = 0 fs.protected_symlinks = 0
注意
请注意,为了覆盖默认系统设置,新配置文件需要具有
.conf
扩展名,且需要在默认系统 文件后 读取(文件以字典顺序读取,因此文件名开头的设置具有较高的数字)。
有关使用
sysctl
机制在引导时配置内核参数的详情,请查看 sysctl.d(5) 手册页。