困惑:使用setuid特殊权限标记

时间:2018-05-03 12:07:30

标签: linux file-permissions setuid file-ownership

启用 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(所有者)拥有写入权限

但是由于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 (权限 rws - >> rwx )?
  2. 文件的最小权限是什么,以便使用setuid(让非所有者用户继承所有者权限)? Read-Execute(r_x)!
  3. setuid 是否仅适用于执行标志?

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

1 个答案:

答案 0 :(得分:0)

  

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

     

但是由于s(setuid)已启用,因此文件将以所有者(vaisakh)的权限(rws)执行。

不。 setuid位仅对 true 可执行文件有意义,而不适用于脚本或文本文件。

我在chmod (1)的联机帮助页上说(强调我的):

  

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

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

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