Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.2. 控制根访问

在管理家计算机时,用户必须以 root 用户身份执行一些任务,或者使用 setuid 程序(如 sudosu )获取有效的 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 程序(如 susudo )允许访问,而不是完全拒绝对 root 用户的访问。有关 susudo 的更多信息,请参阅 Red Hat Enterprise Linux 7 系统管理员指南中的 获取特权 章节,以及 su (1)sudo (8) 手册页。

4.2.4. 启用自动注销

当用户以 root 身份登录时,无人值守登录会话可能会导致严重的安全风险。要降低这个风险,您可以将系统配置为在固定时间段内自动注销闲置用户。
  1. root 用户身份,在 /etc/profile 文件的开头添加以下行,以确保无法中断此文件的处理:
    trap "" 1 2 3 15
  2. root 用户身份,将以下行插入到 /etc/profile 文件中,以便在 120 秒后自动注销:
    export TMOUT=120
    readonly TMOUT
    如果指定秒数没有活动(上例中设为 120 ),则 TMOUT 变量终止 shell。您可以根据特定安装的需求更改限制。

4.2.5. 保护 Boot Loader

密码保护 Linux 引导装载程序的主要原因如下:
  1. 防止访问单用户模式 - 如果攻击者可以将系统引导至单用户模式,则它们会自动以 root 身份登录,而不会提示输入 root 密码。
    警告
    不建议通过编辑 /etc/sysconfig/init 文件中的 SINGLE 参数来保护对单用户模式的访问。攻击者可以通过在 GRUB 2 的内核命令行中指定自定义初始命令(使用 init= 参数)来绕过密码。建议对 GRUB 2 引导装载程序进行密码保护,如 Red Hat Enterprise Linux 7 系统管理员指南中的 使用密码保护 GRUB 2 章节中所述。
  2. 防止访问 GRUB 2 控制台 - 如果机器使用 GRUB 2 作为其引导装载程序,攻击者可以使用 GRUB 2 编辑器界面更改其配置或使用 cat 命令来收集信息。
  3. 防止对 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