我有以下文件:
----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
文件的权限或将文件所有者更改为其他内容,而不是wojtek
或daro
。