我想允许一个用户以 root 身份运行 specialscript.sh
所以在他的文件夹中我创建了
-rwxr---- 1 root deployers 142 Jul 16 14:07 specialscript.sh
在 sudoers.d/specialscripts 中:
user123 ALL=(root) NOPASSWD: /home/user123/specialscript.sh
$ sudo specialscript.sh
Running script as user root
$
完美的
其他用户无法访问/home/user123
文件 - 所以它是安全的。如果某些用户将其移动到其他文件夹,它将不起作用。
但
因为用户属于部署者组,所以他可以看到该文件的内容(这是故意的)。
但他也可以编辑此文件。保存后所有权更改为
-rwxr---- 1 user123 user123 142 Jul 16 14:07 specialscript.sh
但他仍然可以以 root 身份运行它......
$ sudo specialscript.sh
Running script as user root
HAHAHA! I CAN RUN rm -rf!
$
目前我能看到的唯一预防措施是更改组或删除读取(这会阻止读取)或chattr +i /home/user123/specialscript.sh
但这不是明显的行为......
答案1
父目录的所有者无法编辑该文件,但可以删除并重新创建它:
移动:
$ ls -aslh
total 8,0K
4,0K drwxr-xr-x 2 user user 4,0K 17. 7. 12:35 .
4,0K drwxr-xr-x 6 user user 4,0K 17. 7. 12:34 ..
0 -rwxr-x--- 1 root adm 0 17. 7. 12:35 test.sh
$ rm test.sh
rm: remove write-protected regular empty file 'test.sh'? y
使用不同的用户重新创建(从父目录继承):
$ touch test.sh
$ chmod 750 test.sh
$ ls -aslh
total 8,0K
4,0K drwxr-xr-x 2 user user 4,0K 17. 7. 12:36 .
4,0K drwxr-xr-x 6 user user 4,0K 17. 7. 12:34 ..
0 -rwxr-x--- 1 user user 0 17. 7. 12:36 test.sh
为了防止这种情况,请将脚本放在所有父目录都归 所有的路径中root:root
。Linux 目录结构惯例,这样的路径将是/usr/local/sbin/script.sh
。
该
/usr/local
目录是本地编译的应用程序默认安装到的位置——这可以防止它们破坏系统的其余部分。
该
/sbin
目录与该目录类似/bin
。它包含通常由 root 用户运行以进行系统管理的基本二进制文件。