我有以下测试程序:
//File: egid_test.c
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv)
{
int egid = getegid();
printf("my effective group is %d\n", egid);
return 0;
}
我运行以下一系列命令:
$ sudo groupadd so_test
$ grep so_test /etc/group
so_test:x:1002:
$ gcc egid_test.c
$ ./a.out
my effective group is 1000
$ sudo chown :so_test a.out
$ sudo chmod g+s a.out
$ ./a.out
my effective group is 1000
我期望最后一行的结果是“我的有效组是 1002”。同事们得到的正是这个结果。我却不知道。
为什么?如何调试我的机器和/或配置出了什么问题?
(Ubuntu 16.04.6 LTS) **在尝试此操作后
使用以撤消组创建sudo groupdel so_test
附加信息:
$ ls -l a.out
-rwxrwsr-x 1 ashelly so_test 8664 Nov 1 12:17 a.out
$ stat a.out
File: 'a.out'
Size: 8664 Blocks: 40 IO Block: 4096 regular file
Device: 33h/51d Inode: 23466994 Links: 1
Access: (2775/-rwxrwsr-x) Uid: ( 1000/ ashelly) Gid: ( 1002/ so_test)
Access: 2019-11-01 12:17:46.149582840 -0700
Modify: 2019-11-01 12:17:08.949341154 -0700
Change: 2019-11-01 12:38:01.454109385 -0700
Birth: -
$ df .
Filesystem 1K-blocks Used Available Use% Mounted on
/home/ashelly/.Private 660427896 45250096 581606988 8% /home/ashelly
$ mount | grep /home/ashelly
/home/.ecryptfs/ashelly/.Private on /home/ashelly type ecryptfs (rw,nosuid,nodev,relatime,ecryptfs_fnek_sig=<...>,ecryptfs_sig=<...>,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)
是否是 cryptfs 上的“nosuid”标志导致了问题?
答案1
感谢@icarus,我意识到我的主目录与我的同事不同,是从 ecryptfs 加密分区安装的,该分区设置了标志nosuid
。 (显然是为了修补一个安全漏洞)。
这会阻止 sgid 位生效。如果我将程序移至/usr/local/bin
没有标志的nosuid
,它会正确报告有效组。
此时,我需要的是一个好的答案这个关于 ecryptfs 和 nosuid 的问题。