2

我有一个像这样的具有root权限的文件

[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

我想要某种方式,如果我尝试编辑这个特定文件,我会被阻止。例如..我想根据文件名阻止这些命令

$ 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
  • 这根本没有帮助。
  • 我还检查了 sudoers 手册页,但似乎正则表达式支持不是那么好。

任何有效的东西都会有所帮助。谢谢。

编辑:我希望能够在多个具有 sudo 访问权限的用户的多个服务器上应用解决方案

4

1 回答 1

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 "$@"

Where/etc/sudoers.exclude-list是基于行的绝对真实文件路径列表。条目不得包含多余的空格,列表不得为 DOS 格式。

此脚本必须与真正的 sudo 具有相同的所有权和权限。

于 2014-08-04T16:03:59.517 回答