启用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$
问题:
- 无法理解为什么所有权从 vaisakh -> var23 发生变化(权限也rws -> rwx)?
- 一个文件需要多少权限才能使用setuid(让非所有者用户继承所有者权限)?读取-执行(r_x) !
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/