getegid가 다른 사람에게는 작동하지만 나에게는 작동하지 않는 이유는 무엇입니까?

getegid가 다른 사람에게는 작동하지만 나에게는 작동하지 않는 이유는 무엇입니까?

다음 테스트 프로그램이 있습니다.

//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에 대한 이 질문.

관련 정보