我在集群上开发工具。每个用户在其.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 脚本这样进行检查并在允许的情况下启动工具的包装器也无法工作,因为用户可能首先调用实际的工具。