启用 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$
问题:
setuid 是否仅适用于执行标志?
例如: - 如果实际文件权限为 4711 ,则非所有者用户无法读取该权限。 为什么它不提升所有者权限4711并允许其他人阅读内容。
答案 0 :(得分:0)
注意:只有vaisakh(所有者)拥有写入权限。
但是由于s(setuid)已启用,因此文件将以所有者(vaisakh)的权限(rws)执行。
不。 setuid位仅对 true 可执行文件有意义,而不适用于脚本或文本文件。
我在chmod (1)
的联机帮助页上说(强调我的):
4000(setuid位)。设置此位的可执行文件将会 运行有效的uid设置为文件所有者的uid ...
但是当你运行一个shell脚本时,可执行文件确实是/bin/sh
(或者你使用的任何shell)。
那么在编辑时发生了什么? vim
实际上在只读模式下打开原始文件(应警告它不可写)。在保存时,原始文件将重命名为备份文件,并使用当前文件内容创建普通新文件。根据编辑器配置,可以立即删除备份文件。所以真正重要的是对包含该文件的文件夹的写访问权。顺便说一句,这也解释了为什么文件丢失了setuid位。