我是 root 用户,不希望用户可以执行除 ssh 之外的所有 linux 命令。他们只需在其用户中使用 ssh 命令。该怎么做?请大家帮忙。
答案1
有几种不同的方法可以实现此目的。以下是一些选项:
使用 bash shell 的内置限制模式:您可以通过运行 bash -r 或 rbash 以限制模式启动用户的 shell。这将阻止用户执行大多数命令,包括更改目录、设置环境变量以及使用 /bin/sh 运行命令。但是,用户仍然可以运行 bash shell 内置的命令,例如 cd、echo 和 exit。
使用 bash shell 的 alias 命令:您可以使用 alias 命令定义允许用户运行的自定义命令。例如,您可以像这样为 ssh 创建别名:
alias ssh='/usr/bin/ssh'
这将允许用户运行 ssh 命令,但他们将不能运行任何其他命令。
使用 bash shell 的内置命令:内置命令允许您运行命令,就像从命令行运行一样,而不是作为函数或内置命令运行。您可以使用它来允许用户运行特定命令,同时仍然阻止他们运行其他命令。例如:
command ssh
这将允许用户运行 ssh 命令,但他们将不能运行任何其他命令。
使用 bash shell 的 enable 内置函数:enable 内置函数允许您启用或禁用特定的 shell 内置函数或命令。您可以使用它来允许用户运行特定命令,同时阻止他们运行其他命令。例如:
enable -n ssh
这将禁用 ssh 命令,因此用户将无法运行它。
使用 bash shell 的 export 命令:可以使用 export 命令设置用户不得更改的环境变量。例如:
export PATH=/usr/bin:/usr/sbin
这会将用户的 PATH 环境变量设置为仅包含 /usr/bin 和 /usr/sbin 目录,因此他们只能运行位于这些目录中的命令。
使用自定义 shell:您可以创建一个仅允许用户运行特定命令的自定义 shell。例如,您可以创建一个名为 ssh-only 的 shell 脚本,如下所示:
#!/bin/bash
# Check if the first argument is "ssh"
if [ "$1" == "ssh" ]; then
# If it is, run the ssh command
/usr/bin/ssh "$@"
else
# If it's not, print an error message
echo "Command not allowed"
fi
然后,使用 chsh 命令将用户的 shell 设置为 /path/to/ssh-only。这将允许用户运行 ssh 命令,但不能运行任何其他命令。