有没有一种方法可以在用户输入的命令生效之前对其进行授权?
例如,当用户键入 时cp file1 file2
,该命令将不会被执行,并且 root / root 等效用户必须登录才能“授权”用户键入的命令。
有这样的工具/解决方案可以做到这一点吗?
答案1
您可以用包装器替换您想要批准使用的任何二进制文件,该包装器将提醒操作员、存储请求的操作并延迟它直到获得批准。只需删除执行即可并阅读来自相关程序(对于相关用户)的权限,并在这些用户的路径中的某个位置放置一个具有相同名称的包装器。 (删除读取权限对于通过将程序提供给适当的解释器来防止程序的执行是必要的。)
不过,您可能想问一下,这种详细监管的总体思路是什么?安全SE。对我来说,它似乎产生的问题比它解决的问题还要多(如果它能解决任何问题的话)——我的感觉是,你正试图通过用锤子砸苹果来煮煎蛋卷(即在错误的地方使用错误的工具来实现某些目标)。
答案2
没有基本的机制来授权命令,因为这几乎毫无意义。核心 Unix 权限机制是关于保护对数据的访问。如果您可以读取数据,您就可以用它做任何您想做的事情。例如,不可能“允许读取但禁止复制”(复制只是在一个地方读取,在另一个地方写入),那么为什么要尝试呢?
如果您不希望用户访问某个文件,请不要授予他们访问该文件的权限。
如果您偶尔需要用户获得对文件的受控访问权限,则可以使用电子邮件。 “你好,鲍勃,wibble
由于一些原因,我需要访问该文件。请发给我。”
答案3
您可以将它们设置为仅运行sudo
并创建一个询问道将其发送给 root 用户的命令
这可能是一个好的开始(仅当 root 登录时才有效):
PS:我没有测试过,可能有错误
function asksudo {
# for users
write root "asksudo from $(whoami):"
write root "\"$(whoami)\" \"$(PWD)\" && $*"
}
execsudo {
# to authorize root executes this with yes/no and the last line of the message
if [ "$1" = "no" ]
then
write $2 "Your command '${*:3}' has been denied" && exit 0
exit 1 # fails to send the message
fi
[[ "$1" != "yes" ]] && echo "invalid decision" && exit 1;
cd $3 && ${*:4}
write $2 "Your command '${*:3}' has been executed"
}