我想限制用户除 ssh 命令之外的所有命令

我想限制用户除 ssh 命令之外的所有命令

我是 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 命令,但不能运行任何其他命令。

相关内容