unix - 为 ssh 用户禁用“su”

unix - 为 ssh 用户禁用“su”

我想完全禁止通过 ssh 登录的用户获取 root 权限 - 包括“sudo su”,因为这几乎是一回事... 可以这样做吗?假设我没有通过 ssh 登录,并且对机器有物理访问权限,但想阻止其他用户在没有物理访问权限的情况下获取 root 权限。

答案1

我无法想象一种通用的方法让同一个用户能够sudo在图形终端(即虚拟 tty)中执行操作而不是在ssh连接上执行操作 --- 这最终只是另一种虚拟 tty。

我认为一个近似的解决方案是:

  1. 拥有可以执行sudo(1) 的可信赖用户,alpha并给他们打电话beta

  2. 有无法做到 sudo(1) 的用户,称他们为alephybet

现在,使用指令禁止 ssh 登录alphay :betaDenyUsers/etc/ssh/sshd.conf

DenyUsers alpha beta 

如果您希望用户alphayaleph可以共享文件,您可以使他们属于同一组或其他组的成员,并相应地调整文件权限。


脚注:

(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 "$@"

缺陷:

  1. 虽然它可以工作sudo,但可以通过/usr/bin/sudo直接调用来绕过
  2. 它依赖于环境变量的内容SSH_CLIENT,因此用户可以通过清除此环境变量来绕过限制

可能有办法解决这些问题,但如果您只是需要一些东西来阻止您的“典型”用户,那么这应该有效。

相关内容