我想完全禁止通过 ssh 登录的用户获取 root 权限 - 包括“sudo su”,因为这几乎是一回事... 可以这样做吗?假设我没有通过 ssh 登录,并且对机器有物理访问权限,但想阻止其他用户在没有物理访问权限的情况下获取 root 权限。
答案1
我无法想象一种通用的方法让同一个用户能够sudo
在图形终端(即虚拟 tty)中执行操作而不是在ssh
连接上执行操作 --- 这最终只是另一种虚拟 tty。
我认为一个近似的解决方案是:
拥有可以执行
sudo
(1) 的可信赖用户,alpha
并给他们打电话beta
有无法做到
sudo
(1) 的用户,称他们为aleph
ybet
现在,使用指令禁止 ssh 登录alpha
y :beta
DenyUsers
/etc/ssh/sshd.conf
DenyUsers alpha beta
如果您希望用户alpha
yaleph
可以共享文件,您可以使他们属于同一组或其他组的成员,并相应地调整文件权限。
脚注:
(1) 提醒一下:sudo
如果用户是组成员sudo
,则可以执行此操作adm
(取决于 Ubuntu 版本)。要删除用户执行 sudo 的权限,请执行以下操作:
gpasswd -d user sudo
gpasswd -d user adm
并启用它:
gpasswd -a user sudo
gpasswd -a user adm
(其中一个 --- 检查groups
哪个是您系统中的正确组)。
答案2
如果您不需要万无一失的解决方案,您可以为 sudo 制作一个包装器,在运行真正的 sudo 之前检查您是否通过 SSH 登录。只需创建一个/usr/local/bin/sudo
脚本,将其标记为可执行(sudo chmod +x /usr/local/bin/sudo
),然后添加以下内容:
#!/bin/sh
if [ "$SSH_CLIENT" != "" ]; then
echo "remote sudo access is disabled" 1>&2
exit 1
fi
/usr/bin/sudo "$@"
缺陷:
- 虽然它可以工作
sudo
,但可以通过/usr/bin/sudo
直接调用来绕过 - 它依赖于环境变量的内容
SSH_CLIENT
,因此用户可以通过清除此环境变量来绕过限制
可能有办法解决这些问题,但如果您只是需要一些东西来阻止您的“典型”用户,那么这应该有效。