如何限制 Linux 用户可以运行的可执行命令的范围?
例如,我只希望用户能够运行ls
命令,而不能执行其他任何操作。如果尝试运行cat
,linux 将抛出错误或返回 null。
我研究过alias
设置预定义自定义命令列表的命令,但这不会限制用户运行其他命令。我实际上很想设置alias
命令,然后将范围限制为这些命令。
我也调查过本文档限制用户,但仍然不确定如何去做。
范围:我正在使用服务帐户在我们的 PHP 应用程序中运行 ssh 命令。我想限制该服务帐户的命令,以防止有人将命令注入其中的情况ssh_exec();
- 例如ls
并注入| some command
我想我会尝试这个:https://github.com/ghantoos/lshell
答案1
您还可以将命令绑定到授权密钥文件中的特定 ssh 密钥。
from="host.com",command="/bin/ls" ssh-dss <SSH PUBLIC KEY>
这样做的目的是限制使用特定 ssh public 的账户访问,以便仅从特定主机运行特定命令。请参阅
man sshd
以获得更多选项。
答案2
我可能会通过编写包装器脚本来解决这种情况。这里有一个部分解决方案可供您开始使用,请阅读并查看您是否无法从此链接找到它。
我知道这指定了 UID 的使用,如果多个用户需要此功能,请考虑使用 GID 并将所有这些类型的用户放在同一个组中。
欢呼并祝你好运!
答案3
如果要限制 SSH 用户的命令执行,可以ChrootDirectory
使用OpenSSH 4.9p1
您还会发现静态链接的二进制文件busybox
对于设置 chroot 环境非常有用。(上面的文章花了很多功夫来设置完整的 chroot 环境。)