我有一个像这样的
[root@testbox ~]# ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 113 Feb 21 21:29 /etc/resolv.conf
我使用/ etc / sudoer为我的用户启用了无密码sudo
%mayur ALL=(ALL) NOPASSWD: ALL
我想要一些方法,如果我尝试编辑这个特定的文件,我会被阻止。 例如..我想基于THE FILE NAME阻止这些命令
$ echo 123 | sudo tee /etc/resolv.conf ## SHOULD GET BLOCKED
$ touch newfile | echo 123 > newfile | sudo cp newfile /etc/resolv.conf ## SHOULD GET BLOCKED
我的努力:
%mayur ALL=(ALL) NOPASSWD: ALL,!/* /etc/resolv.conf
任何有效的方法都会有所帮助。感谢。
编辑:我希望能够将多个服务器上的解决方案应用于具有sudo访问权限的多个用户
答案 0 :(得分:1)
您可以使用包装器:
#!/bin/bash
declare -A EXCLUDE
while IFS= read -r FILE; do
EXCLUDE[$FILE]=.
done < /etc/sudoers.exclude-list
for ARG in "$@"; do
TARGET=$(exec /usr/bin/readlink -m -- "$ARG")
[[ -n $TARGET && -n ${EXCLUDE[$FILE]} ]] && {
echo "sudo: Sorry, target is not allowed: $TARGET"
exit 1
}
done
exec /path/to/real/sudo-in-secured-location "$@"
其中/etc/sudoers.exclude-list
是绝对实际文件路径的基于行的列表。条目不得包含额外的空格,列表不得为DOS格式。
此脚本必须具有与真实sudo相同的所有权和权限。