'!' 的限制操作员
使用“!”从 ALL 中“减去”命令通常无效操作员。用户可以通过将所需的命令复制到不同的名称然后执行该命令来轻松规避此问题。例如:
账单 ALL = ALL, !SU, !SHELLS
并不能真正阻止 bill 运行 SU 或 SHELLS 中列出的命令,因为他可以简单地将这些命令复制到不同的名称,或者使用编辑器或其他程序的 shell 转义。因此,此类限制最多应被视为建议性的(并通过政策强化)。
一般来说,如果用户拥有 sudo ALL,则没有什么可以阻止他们创建自己的程序,为他们提供 root shell(或制作自己的 shell 副本),无论任何“!”如何用户规范中的元素。
什么是
他可以简单地将这些命令复制到不同的名称
意思是?是命令别名还是其他什么?
答案1
命令通常是(*)文件,文件可以用不同的名称复制。
例如
$ cp /bin/ls /tmp/lslsls
$ % /tmp/lslsls -l /tmp/lslsls
-rwxr-xr-x 1 ilkkachu wheel 187040 Dec 5 20:03 /tmp/lslsls
现在,如果sudo
允许我运行除ls
root 之外的任何内容,我仍然可以运行lslsls
,它现在具有完全相同的内容。即使使原始文件只执行(不可读)也没有多大帮助,因为人们通常可以找到另一个可执行相同操作的二进制文件。 (我曾经不得不使用一个sudo
被配置为不允许运行/bin/sh
或 的系统/bin/bash
。但其他一切都可以,包括运行apt-get
,所以我考虑只安装 zsh。)
(* shell 内置函数和函数是一个例外。)
手册页还提到使用“从编辑器或其他程序中转义 shell”,这是指在 vi 中使用类似:shell
or的命令,或者简单地使用or (至少在 GNU AWK 中)。这些都不会受到 sudo 实施的限制的影响。:!bash
sudo perl -e 'exec "sh"'
sudo awk 'BEGIN { system("sh") }'