1)禁止根权限
4.4.2.1. 禁用根 Shell
要防止用户直接登录为根用户,系统管理员可以在 /etc/passwd 文件中把根帐号的 shell 设置为 /sbin/nologin。这会阻止需要 shell 的命令,如 su 和 ssh 等直接进入根帐号。
重要 不需要使用 shell 的程序,如电子邮件客户或 sudo 命令,仍旧能够进入根帐号。
4.4.2.2. 禁用根登录
要进一步限制对根帐号的使用权限,管理员可以通过编辑 /etc/securetty
文件来禁用控制台的根登录。该文件列举了所有根用户被允许登录的设备。如果该文件不存在,根用户就能通过系统上的各类通信设备,不管是控制台还是原始网络
接口,来登录。这种情况很危险,因为用户可以以根用户身份使用 Telnet 来登录,在网络中明文传送根口令。按照默认设置,红帽企业 Linux
的 /etc/securetty 文件只允许根用户在和机器物理相连的控制台上登录。要阻止根用户登录,键入以下命令来清除该文件的内容:
echo > /etc/securetty
警告 一个空白的 /etc/securetty 文件
不会防止根用户使用 OpenSSH 工具套件来远程登录,因为控制台在验证之前不会被打开。
4.4.2.3. 禁用根的 SSH 登录
要防止根用户通过 SSH 协议登录,编辑 SSH 守护进程的配置文件(/etc/ssh/sshd_config)。把以下一行:
# PermitRootLogin yes改成:
PermitRootLogin no
4.4.2.4. 使用 PAM 禁用根权限
PAM 通过 /lib/security/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、或用于 SSH 客户的 /etc/pam.d/ssh)中添加相似的一行。
关于 PAM 的详情,请参阅
《红帽企业 Linux 参考指南》的“
可插入验证模块(PAM)”这一章。
4.4.3. 限制根存取权限
与其完全否定对根帐号的使用,管理员可能只想通过 setuid 程序如 su 或 sudo 等来允许对其的使用。
4.4.3.1. su 命令
键入 su 命令后,用户会被提示输入根口令,经验证后,他就会得到一个根 shell 提示。
通过 su 命令登录后,用户
就成为根用户,并且对系统有绝对的管理权。此外,一旦用户成为根用户,他还可以使用 su 命令来变成系统上的另一个用户而不必输入口令。
因为该程序非常强大,机构内的管理员可能想限制能够使用这个命令的人员。
最简单的方法是把用户添加到一个叫做
wheel 的特殊管理组群。要这么做,以根用户身份键入以下命令:
usermod -G wheel
在前面的命令中,把
替换成被添加到 wheel 组群中的用户名。
下一步,在文本编辑器中打开 su(/etc/pam.d/su)的 PAM 配置文件,删除以下行的注释符号 [#]:
auth required /lib/security/pam_wheel.so use_uid这么做会只允许管理性组群 wheel 使用该程序。
注记 根用户是默认的 wheel 组群成员。
4.4.3.2. sudo 命令
sudo 命令提供了另一种授予用户管理权限的方法。当可信任的用户在管理命令前加一个 sudo 命令,这个用户就会被提示输入
他自己的口令。验证后,假定这个命令被准许执行,它就会以根用户身份执行。
sudo 命令的基本格式如下:
sudo
在上面的例子中,
应该被替换为通常保留给根用户使用的命令,如 mount。
重要 sudo 命令的用户应该在离开他们的机器前特别留意一下自己是否已经退出,因为这些用户可以在五分钟之内再次使用这个命令而不必输入口令。该设置可以通过修改配置文件 /etc/sudoers 来改变。
sudo 命令提供了高度的灵活性。例如,只有列举在 /etc/sudoers 配置文件中的用户被允许使用 sudo 命令,并且命令是在
用户的而不是根的 shell 中被执行。这意味着根 shell 可以被完全禁用,如所示。
sudo 命令还提供了完整的审核渠道。每次成功的验证都被记录在 /var/log/messages 文件中,所使用的命令以及使用者的用户名被记录在/var/log/secure 文件中。
sudo 命令的另一个优越性是,管理员可以根据需要给不同的用户以不同的命令使用权限。
想编辑 sudo 配置文件 /etc/sudoers 的管理员应该使用 visudo 命令。
要给某人以完全的管理权限,键入 visudo,然后在用户特权规定部分添加和以下相似的一行:
juan ALL=(ALL) ALL这个例子表明,用户 juan 可以在任何主机上使用 sudo 来执行任何命令。
以下的例子显示了 sudo 配置方面的可伸缩性:
%users localhost=/sbin/shutdown -h now这个例子表明,只要是从控制台使用,任何用户都可以使用 /sbin/shutdown -h now 命令。
sudoers 的说明书页中有一个该文件选项的详细列表。