Setgid 奇怪的行为

Setgid 奇怪的行为

我有以下文件:

----rw---- 1 wojtek users    4 Oct 26 15:56 data.txt
-rwx--s--x 1 wojtek users 8864 Oct 26 16:00 fopen_setgid

当我跑步时fopen_setgid

  • 然后daro一切都按预期进行:程序以users组权限(而不是daro组)运行,因此没有错误
  • 然后wojtek我收到错误Permission denied,但我不知道为什么。难道它不应该以组权限运行程序users,而不是 wojtek像本例那样允许程序成功打开文件的组daro吗?

唯一要做fopen_setgid的就是打开data.txt

  • 用户daro仅属于 1 个组:daro

  • 用户wojtek只有1组:wojtek

  • 该群组users没有成员

我的操作系统是 Debian 9(延伸)

答案1

我没有找到参考,但我只是测试了一下。该问题setgid与进程的 UID、GID 以及文件和文件权限无关,而仅取决于此。

我创建了一个文件

echo test > test.txt

更改了权限

chmod 064 test.txt

并且无法再访问它

$ cat test.txt
cat: test.txt: Permission denied

尽管我的小组可以rw访问。

$ ls -l test.txt
----rw-r-- 1 myuser myuser 5 Nov  5 16:11 test.txt
$ id
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),129(sambashare)

然后我将文件所有者更改为root并且可以成功打开该文件。

$ sudo chown root test.txt 
$ ls -l test.txt
----rw-r-- 1 root myuser 5 Nov  5 16:11 test.txt
$ cat test.txt            
test

显然,如果用户和组都匹配,则所有者访问位优先于组访问位。 (在Ubuntu 19.04上测试)

因此,解决方法是添加u+rw文件的权限或将文件所有者更改为其他内容,而不是wojtekdaro

相关内容