sudoers 中的 sudo 文件 - 为什么用户可以修改文件?

sudoers 中的 sudo 文件 - 为什么用户可以修改文件?

我想允许一个用户以 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:rootLinux 目录结构惯例,这样的路径将是/usr/local/sbin/script.sh

/usr/local目录是本地编译的应用程序默认安装到的位置——这可以防止它们破坏系统的其余部分。

/sbin目录与该目录类似/bin。它包含通常由 root 用户运行以进行系统管理的基本二进制文件。

相关内容