我在家里设置了一个非常小的wireguard 服务器,其中包含我的公共IP 等。我使用 NAT 希望尽可能地保护自己,设置强密码......所有这些事情。
一位朋友想要通过 ssh 访问此服务器。虽然他很友好,但我不想完全信任他,只是给他访问权限,我想确保他不可能做任何其他扰乱他的主文件夹的事情,并且永远不要运行“sudo”或“su” 。
我怎样才能做到这一点 ?
我已经尝试过 ChatGPT 的建议,并更改了 visudo,例如:
user ALL=(ALL) ALL, !DISABLE_SU, !DISABLE_SUDO, !/usr/bin/su *,!/usr/bin/sudo *, !/usr/sbin/visudo, !/usr/bin/* *sudoers
但是,当我sudo su user
从会话中执行此操作时,我得到“我们相信您已收到......”,而不是我希望的预期“您无权运行此命令”。
有任何想法吗?
谢谢
答案1
删除该sudoers
行!
您无需说某人无法访问,因为这是默认设置。此外,您正在打开一个具有微不足道的攻击面的主要安全漏洞。这些命令可以作为您的朋友在他们的user
帐户中运行:
sudo -s
甚至这个,
cp /bin/sh mysh
chmod a+x mysh
sudo ./mysh
无论哪种情况,他们现在都有一个 root shell。
另外,请确保您没有将朋友的帐户添加到任何有权运行不受限制的sudo
. (通常这将是sudo
或wheel
组。)
顺便说一句,如果您过去按照预期visudo
进行编辑,您(可能)会收到如下警告:/etc/sudoers
Warning: /etc/sudoers:37:122: Cmnd_Alias "DISABLE_SU" referenced but not defined
Warning: /etc/sudoers:37:122: Cmnd_Alias "DISABLE_SUDO" referenced but not defined
也许您确实定义了它们,但您的问题中没有提及它们。修复它们并不能阻止此处描述的任何问题。
您还提到,“当我sudo su user
在会议中这样做时……“。sudo
不带选项的命令给你root
特权。一旦你成为root,你就可以运行它su user
,这会让你进入user
的帐户。如果你从你的帐户运行该命令,你将需要你的密码才能进入你朋友的帐户,而你的帐户就是检查/etc/sudoers
文件中的权限。如果您从朋友的帐户运行它,那么您已经授予他们完全的权限,sudo
并且可以简单地运行sudo -s
以获得 root shell。
答案2
你不需要做任何事。默认情况下,用户没有sudo
访问权限,要使用su
该用户需要 root 密码。
只要您不明确允许用户使用sudo
,无论是将他们添加到sudoers
,还是将他们添加到已经具有 - 访问权限的组中sudo
,他们都无法使用。