linux - 困惑 : File ownership changed with setuid special permission flag

标签 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

Checking the write permission.

注意: 只有 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(让非所有者用户继承所有者权限)?读取-执行(r_x) !
  3. setuid是否只适用于执行标志?

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

最佳答案

Note: Only the vaisakh(owner) have write permission.

But since the s(setuid) is enabled, file will execute with owner(vaisakh)'s permission(rws).

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

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

4000 (the setuid bit). Executable files with this bit set will run with effective uid set to the uid of the file owner...

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

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

关于linux - 困惑 : File ownership changed with setuid special permission flag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50154737/

相关文章:

我可以在没有 sudo 的情况下运行包含 setuid() 的 C 程序吗?

linux - 通过 SSH 写入多个远程终端

linux - 页错误处理程序如何知道从哪里获取 4K 字节?

hadoop - HDFS 上的文件权限

linux - 是否可以授予 'person A' 读/写访问权限和 'Person B' 只读访问权限

在 C 中运行 setuid 程序的正确方法

python - Linux/Python 如何以非根用户身份导入根访问 py 模块?

linux - 源 bashrc 在 cron 中不起作用

Linux:在默认浏览器中打开 URL 的命令

java - 在android中设置文件读取权限