限制用户仅使用我想允许他们运行的单个命令

限制用户仅使用我想允许他们运行的单个命令

我想在 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 设置为外壳可以限制本地和远程登录。

相关内容