我正在使用 Linux CentOS,但突然无法运行 sudo 命令。我收到以下错误。即使使用 root 用户,它也会出现相同的错误。
$ sudo ls
sudo: unable to stat /etc/sudoers: Permission denied
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
以下是该文件的权限:
ls -l /etc/sudoers
-rwxr-xr-x 1 root root 4241 Jun 9 20:36 /etc/sudoers
# which sudo
/usr/bin/sudo
# ls -l /usr/bin/sudo
--ws-wx-wx. 1 root root 130712 Jun 10 2014 /usr/bin/sudo
系统出了什么问题?我该如何修复它?
编辑1
请参见下面的命令输出:
# ls -Z /etc/sudoers
-r--r----- root root ? /etc/sudoers
我已对此文件运行 chmod 440 但似乎权限已损坏。
编辑2
我运行以下命令来设置 /etc/sudoers 权限,但它仍然不正确:
root@Cool-Too ~]# chmod 440 /etc/sudoers
[root@Cool-Too ~]# ll /etc/sudoers
-r--r----- 1 root root 4241 Aug 14 22:16 /etc/sudoers
[root@Cool-Too ~]# ll -Z /etc/sudoers
-r--r----- root root ? /etc/sudoers
答案1
确实,你的权限非常低。
它们应该类似于:
-r--r----- 1 root root 4188 Mar 31 11:30 /etc/sudoers
---s--x--x 1 root root 130720 Mar 31 13:09 /usr/bin/sudo
要解决此问题,请以 root 身份
chmod 4111 /usr/bin/sudo
chmod 440 /etc/sudoers
如果您+
在输出中看到一个标志ls -l
,则表示还设置了 ACL;这些应该被删除
setfacl -b /usr/bin/sudo /etc/sudoers
(你似乎没有这个问题;为了完整性我将其包括在内)
由于您的权限被破坏,SELinux 标签也可能被破坏。您应该使用以下命令验证 SELinux 标签是否正确ls -Z
:
-r--r-----. root root system_u:object_r:etc_t:s0 /etc/sudoers
---s--x--x. root root system_u:object_r:sudo_exec_t:s0 /usr/bin/sudo
这些应该可以修复restorecon
restorecon -v /usr/bin/sudo /etc/sudoers
最后,您的安装可能完全有问题(例如 PAM 配置/etc/sudo.conf
)。您可以检查哪些文件已被修改:
rpm --verify sudo
如果这抛出任何看起来不对劲的文件,那么您可能需要删除它们,然后重新安装 sudo。
例如
rm /etc/sudo.conf /etc/pam.d/sudo*
yum reinstall sudo
(这确实需要一个有效的yum
设置,所以如果您的存储库不起作用,请不要这样做!)
答案2
如果sudo
不起作用,您可以使用以下命令成为 root 用户su -
稍后root后,重新安装即可须藤使用下面这些命令:
百胜删除 sudo
百胜安装须藤
您需要将自己添加到 /etc/sudoers 文件中,输入:
维苏多
通过 sudo 授予 vivek 用户完全权限:
维维克全部=(全部)全部
保存并关闭文件。稍后再这样做,你就有了须藤 您可以使用以下命令成为 root 用户:
须藤-i
如果不起作用,请使用
须藤-s