设置 RHEL/CentOS 5 以在命令行和 X 中使用 SUDO

Ere*_*Bat 2 linux redhat authentication sudo

如何让我的CentOS / RHEL提示我要我的密码(而不是根)当我运行特权命令。我找到了许多详细说明如何为命令行执行此操作的指南,但我希望它也适用于 X windows 应用程序。

或者换句话说:我如何让 RHEL/CentOS 表现得像 Ubuntu。

Ere*_*Bat 6

终端设置

作为 root,我们需要/etc/sudoers通过运行来编辑文件visudo(注意:您可以export EDITOR=vim获取语​​法高亮,或使用您选择的编辑器)。
在第 83,86 行附近,您应该看到两行相似(在 vim 中您可以运行:set number以显示行号):

83 # %wheel  ALL=(ALL)       ALL
84
85 ## Same thing without a password
86 # %wheel  ALL=(ALL)       NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

不同的是,线#83将要求用户输入自己的密码进行身份验证,而线#86将允许用户sudo无需再提示他们输入密码。最佳安全实践表明#83 更安全;但是,根据您的情况,#86 可能是合适的(例如,我通常在设置服务器时使用 #86,然后切换到 #83)。

退出并保存该文件。

现在我们需要告诉系统哪些用户可以通过sudo. 这是通过将它们添加到wheel组来完成的,这就是我们之前编辑%wheelsudoers文件中所指示的。有关man sudoers该文件格式的更多信息,请参见。

$ usermod -a -G wheel erebusbat
Run Code Online (Sandbox Code Playgroud)

该命令会将用户添加erebusbat到 wheel 组,结合我们之前的更改,所有用户都可以以 root 身份运行任何命令:

erebusbat@centos$ sudo whoami
root
erebusbat@centos$
Run Code Online (Sandbox Code Playgroud)

X / GNOME 设置

在 CentOS/RHEL 5 及以下版本中,X 身份验证由一组名为consolehelper和的程序处理userhelper。基本上发生的事情是这样的:当用户执行一个程序(比如pirut)时,如果我们查看这些文件中的一个,它会检查文件pirut夹中/etc/security/console.apps/是否有一个文件,它看起来像:

USER=root
PROGRAM=/usr/sbin/pirut
SESSION=true
KEEP_ENV_VARS=http_proxy,ftp_proxy
Run Code Online (Sandbox Code Playgroud)

这告诉consolehelper/userhelper允许用户以 root 身份验证和运行程序。如果我们man userhelper看到我们可以添加一个UGROUPS=指令,以便如果用户在该组中,他们将被允许以他们自己的身份进行身份验证,但以USER=指令中指定的用户身份运行应用程序。所以输出pirut文件需要看起来像:

USER=root
UGROUPS=wheel
PROGRAM=/usr/sbin/pirut
SESSION=true
KEEP_ENV_VARS=http_proxy,ftp_proxy
Run Code Online (Sandbox Code Playgroud)

一旦我们尝试以pirut普通用户身份运行(从 GNOME 菜单添加/删除程序)进行更改,就会发生以下两种情况之一:

  1. 我们将被提示输入我们的密码,该程序将作为root.
  2. root如果当前用户不在wheel组中,我们将提示输入的密码。

然而,手动更改所有这些文件可能是一个 PIA,所以我们工作更聪明而不是更努力:

$ cd /etc/security/console.apps/
$ sudo su -
$ pcregrep -ML '^UGROUPS=' * | xargs sed -i 's/^USER=root/USER=root\nUGROUPS=wheel/' 
Run Code Online (Sandbox Code Playgroud)

sudo su -如果您当前是 ,则不需要该命令root。该命令不会“双重修复”任何文件,因此它可以被chron编辑或设置为在启动时运行以确保您的文件正常。更新和安装可以覆盖它们或创建没有UGROUPS=指令的新的。

禁用根用户

完成所有设置和测试后,您应该禁用 root 用户:

$ sudo passwd -l root
Run Code Online (Sandbox Code Playgroud)

那是一个小写的 L,就像在 LOCK 中一样。

然后你应该PermitRootLogin no在你的/etc/ssh/sshd_config文件中设置或更改。即使您锁定 root 帐户,这也很有用,以防将来有人启用它。sudo su -即使你设置了它仍然可以工作,见下文,所以真的没有理由不设置它。

如果您决定不锁定 root 帐户,这并不理想,因为任何人都可以登录 text/X/GNOME 控制台root,这就是发生不好的事情时(控制台保持登录状态或您不小心删除了一堆操作系统文件 [询问我怎么知道],最好锁定帐户。

长时间以 root 身份运行

有时,例如软件安装,有必要运行许多命令root,而不希望每个命令都以sudo. 在这种情况下,您有两个选择:

  1. 暂时切换到root帐户:$ sudo su - 该命令将为您提供与以 root 身份登录帐户相同的命令外壳。
  2. 解锁 root 帐户:$ sudo passwd root这将允许您设置密码并解锁帐户;但这不是暂时的,您必须记住在完成后锁定用户帐户。