禁止使用特定命令

禁止使用特定命令

我在集群上开发工具。每个用户在其.bash_profile.我有一个登录节点,某些工具不应在该节点上运行。如何防止用户从特定节点使用这些工具?

到目前为止,我已经考虑在一个函数中重新定义工具的命令,以覆盖原始工具:

$ tool  # Launches the tool normally.

$ vim common-env.sh  # Is sourced in each user's .bash_profile
function tool() {
  if [ $(is_in_forbiden_node) -eq 0 ]; then
    echo "You have to leave node X before launching this command!"
    return 1  # Forbids the use of the original tool.
  else 
     command tool  # Launches the original tool normally.
  fi
}
export -f tool

这是可行的,但这远非完美无缺。用户仍然可以通过键入以下内容来规避此限制:

$ command tool

或者 :

$ /usr/bin/env tool

有哪些替代方案?请注意,我不是系统管理员,因此任何需要管理员权限的操作都不会让我受益。

答案1

创建一个新组,为可执行文件提供这样的新组,并删除该可执行文件的可执行位(以及读取权限)。

这是“游戏”程序的常见方法,但我认为它与您正在寻找的非常相似。

答案2

没有行政权力,唯一剩下的地方就是tool它自己。特别是,您需要tool检查它是否在允许的节点上运行。

您需要小心执行此检查的方式。例如,环境变量不可信。此外,像 shell 脚本这样进行检查并在允许的情况下启动工具的包装器也无法工作,因为用户可能首先调用实际的工具。

相关内容