我想在 Ubuntu 22.04 CLI 上创建一个只能运行 ifconfig 的用户。就是这样。出于安全原因,他们不能使用任何其他命令,甚至不能使用 cd 或 ls。他们登录、查看机器的私有 IP 地址,然后注销。
有没有办法以这种方式限制用户?
答案1
建立在petep 的其他回答,除了创建用户之外,在这种情况下您可能还需要考虑做一些事情。
在默认的 Ubuntu 中,有一些登录前 SSH 内容会生成 MOTD,向您提供有关系统和其他信息。此外,您还需要为用户设置一个临时主目录,以防万一创建文件。
首先,为了禁用动态 MOTD,您需要以/etc/pam.d/sshd
超级用户身份进行修改并找到以下两行:
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
#
通过在行首放置一个来注释掉它们,然后保存文件。这将禁用动态 MOTD 提供系统信息。
现在,我们开始创建用户。我们将把 petep 的步骤压缩为一组较小的命令。我们将创建用户,然后设置密码。
sudo useradd --home=/tmp --shell /sbin/ifconfig user1
sudo passwd user1
完成此操作后,您重新启动了机器一次(以便 PAM 识别更新),然后当该用户 SSH 时,他们将只能获得输出ifconfig
,然后他们的连接将立即终止。
但是,请记住,如果你需要此用户运行任何内容其他ifconfig
从安全角度来看,配置用户可以运行和不能运行的内容会更加困难,因为人们普遍认为特定用户将有权访问“大多数”标准定义的可执行文件 - 如果不是这种情况那么PATH
你必须用一组较小的命令在一个目录中正确地 chroot 该人员,而修改和长期维护会变得非常繁琐。
答案2
只需将用户 shell 更改为 ifconfig 命令即可。
但是必须设置用户密码?
sudo useradd user1
sudo passwd user1
sudo usermod --shell /sbin/ifconfig user1
答案3
如果你说的是远程登录(通过 ssh),你可以利用ForceCommand
选择sshd_config
,可用于强制执行特定命令,忽略来自客户端的任何命令。与 结合使用Match User
,可将此限制限制于特定用户。
在/etc/ssh/sshd_config
,添加以下行
Match User username
ForceCommand ifconfig
这将忽略用户发出的任何命令用户名并执行ifconfig
。
或者ifconfig
,配置一个小脚本,检查提供的命令,如果不是,则回显错误ifconfig
。
例子:
Match User limiteduser
ForceCommand /opt/custom/ssh/forcecommand.sh
然后/opt/custom/ssh/forcecommand.sh
可能看起来像这样:
#!/bin/bash
# Check for allowed command
if [ -z "$SSH_ORIGINAL_COMMAND" ]; then
# User entered with no command - creating shell
exec $SHELL -l
else
if [ "$COMMAND1" == 'ifconfig' ]; then
# Allowed command
exec ${SSH_ORIGINAL_COMMAND}
else
echo "Rejected - you are not allowed to issue ${SSH_ORIGINAL_COMMAND}"
exit 1
fi
fi
如果你想限制本地登录,你可能想看看外壳,这是一个用 Python 编写的 shell,它允许您将用户的环境限制为有限的命令集和其他内容。我自己还没有尝试过,但它看起来是根据您的要求制作的。
将用户的 shell 设置为外壳可以限制本地和远程登录。