1

启用 setuid 的文件权限( rws )。

文件所有者:vaisakh

vaisakh@computer:~/me$ ls -l
total 4
-rwsr-xr-x 1 vaisakh vaisakh   60 May  3 17:05 vaisakh.sh

切换到另一个用户var23

vaisakh@computer:~/me$ su var23
Password:

重新检查权限

var23@computer:/home/vaisakh/me$ ls -l
total 4
-rwsr-xr-x 1 vaisakh vaisakh   60 May  3 17:05 vaisakh.sh

也可用于 var23

var23@computer:/home/vaisakh/me$ ./vaisakh.sh
Its vaisakh
total 4
-rwsr-xr-x 1 vaisakh vaisakh   60 May  3 17:05 vaisakh.sh

检查写权限。

注意: 只有 vaisakh(owner) 有写权限

但由于启用了 s(setuid),文件将在所有者 (vaisakh) 的权限 (rws) 下执行。

意味着它将允许 'var23' 写入文件

var23@computer:/home/vaisakh/me$ vim vaisakh.sh

var23编辑文件后,再次检查文件权限。

var23@computer:/home/vaisakh/me$ ls -l
total 4
-rwxr-xr-x 1 var23 var23   67 May  3 17:09 vaisakh.sh
var23@computer:/home/vaisakh/me$

文件内容 vaisakh.sh。

var23@computer:~/var23/Prometheus/me1$ cat vaisakh.sh
#!/bin/sh
echo "Its vaisakh"
ls -l
var23@computer:~/var23/Prometheus/me1$

问题:

  1. 无法理解为什么所有权从vaisakh -> var23 (permission too rws -> rwx ) 改变?
  2. 文件需要什么最低权限才能使用 setuid(让非所有者用户继承所有者权限)?读取执行(r_x)!
  3. setuid是否仅适用于执行标志?

    例如:- 如果实际文件权限是4711,非所有者用户无法读取它。为什么它不提升所有者权限 4711 并允许其他人阅读内容。

4

1 回答 1

1

注意:只有 vaisakh(所有者)有写权限。

但由于启用了 s(setuid),文件将在所有者 (vaisakh) 的权限 (rws) 下执行。

没有。setuid 位仅对真正的可执行文件有意义,对脚本或文本文件无效。

我的手册页chmod (1)说(强调我的):

4000(setuid 位)。 设置了此位的可执行文件将运行时将有效 uid 设置为文件所有者的 uid...

但是当您运行shell 脚本时,可执行文件确实是/bin/sh(或您使用的任何 shell)。

那么在编辑时发生了什么?vim实际上以只读模式打开原始文件(应该警告它不可写)。在保存时,原始文件被重命名为备份文件,并使用当前文件内容创建一个普通的新文件。根据编辑器配置,备份文件可能会立即被删除。所以真正重要的是对包含文件的文件夹的写访问权限。顺便说一句,这也解释了为什么文件丢失了 setuid 位。

于 2018-05-03T14:42:47.160 回答