使用 sudo、su 和 pkexec 无法获得对远程服务器的 root 访问权限

使用 sudo、su 和 pkexec 无法获得对远程服务器的 root 访问权限

我在一台旧戴尔机器上运行 CentOS7,我将其重新用作家庭服务器。我还从远程位置通过 ssh 连接到它,以确保一切顺利运行,并执行诸如 rsync 我的笔记本电脑之类的操作。换句话说,如果出现问题,通常没有人在家重置机器。

情况:

上周的某个时候,我肯定破坏了一些允许 sudo、su 和 pkexec 等命令工作的东西。

Su 不会接受我的 root 密码,sudo 给出错误:

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

我尝试运行 pkexec /bin/bash 之类的东西,但出现错误:

pkexec must be setuid root

看到这一点,我然后做了:

[crlsmdrn@server ~]$ ls -l /usr/bin/sudo                                                                                                       

---x--x--x. 1 root root 143248 Jun 27 13:03 /usr/bin/sudo

那么,有没有什么方法可以将 sudo 的权限设置回 4755,这样我就可以远程获取 root shell,而无需重新启动计算机?

谢谢

答案1

我能够重置 sudo 的权限,而无需重新启动进入救援模式!这就是我所做的:

值得庆幸的是,systemd 仍然允许我重新启动守护进程,因为它是通过 polkit 进行身份验证的。

因此,我在我的主目录中创建了一个单元文件,其中包含:

/home/crlsmdrn/sudo-reset.service:

[Unit]
Description=reset sudo

[Service]
Type=oneshot
ExecStart=/home/crlsmdrn/sudo-reset.sh

[Install]
WantedBy=multi-user.target

然后我创建了一个名为 sudo-reset.sh 的文件。

/home/crlsmdrn/sudo-reset.sh:

#!/bin/sh
chmod 4755 /usr/bin/sudo

然后:

[crlsmdrn@server ~]$ chmod +x /home/crlsmdrn/sudo-reset.sh

接下来启用并运行该服务:

[crlsmdrn@server ~]$ systemctl enable /home/crlsmdrn/sudo-reset.service
[crlsmdrn@server ~]$ systemctl start sudo-reset-service

[crlsmdrn@server ~]$ sudo
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value] [-i|-s]
            [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] file ...

然后我能够执行 sudo -s,然后通过回顾 bash 历史记录来查看哪些权限被破坏了;看起来只有 /usr/bin 很无聊,所以我运行了 rpm --setperms -a,这似乎修复了权限。

执行此操作后,不要忘记禁用该服务。

这个故事的寓意是:永远不要在 /usr/bin 上运行 chown -R root:root 而不期望事情能以同样的方式工作。

相关内容