setgid 바이너리에 권한이 없고 설치가 올바르지만 뭔가 빠졌는데 뭐죠?

setgid 바이너리에 권한이 없고 설치가 올바르지만 뭔가 빠졌는데 뭐죠?

매뉴얼 페이지, 설치, 권한을 확인했습니다.

(편집: 요청한 대로 기록을 시퀀스로 병합합니다. 사소한 문제처럼 보이기 시작했습니다. 마지막 편집 이후 새로운 것은 없으며 모든 좋은 내용을 하나로 묶었습니다.)

~/sandbox/6$ editfunc doit
~/sandbox/6$ -x doit
+ doit
+ find
.
+ cp /bin/ln /bin/id .
+ sudo chown jthill:jthill id ln
+ chmod g+s id ln
+ mkdir protected
+ chmod 770 protected
+ touch data
+ set +xv
~/sandbox/6$ ls -A
data  id  ln  protected
~/sandbox/6$ ls -Al
total 92
-rw-r--r-- 1 jthill jthill     0 Nov  8 02:39 data
-rwxr-sr-x 1 jthill jthill 31432 Nov  8 02:39 id
-rwxr-sr-x 1 jthill jthill 56112 Nov  8 02:39 ln
drwxrwx--- 2 jthill jthill  4096 Nov  8 02:39 protected
~/sandbox/6$ sudo su nobody
[nobody@home 6]$ ./id
uid=619(nobody) gid=617(nobody) egid=1000(jthill) groups=617(nobody)
[nobody@home 6]$ ./ln ln protected
./ln: failed to create hard link ‘protected/ln’ => ‘ln’: Operation not permitted
[nobody@home 6]$ ./ln data protected
./ln: failed to create hard link ‘protected/data’ => ‘data’: Operation not permitted
[nobody@home 6]$ ln ln protected
ln: failed to create hard link ‘protected/ln’ => ‘ln’: Permission denied
[nobody@home 6]$ ln data protected
ln: failed to create hard link ‘protected/data’ => ‘data’: Permission denied
[nobody@home 6]$ exit
~/sandbox/6$ 

답변1

그것을 발견:

  • 설정된 경우 sysctl fs/protected_hardlinks,
  • 소유자가 아닌(그리고 CAP_FOWNER가 없는) 하드 링크는 다음과 같아야 합니다.
    • 특별하지 않은
    • 사용자 ID가 설정되지 않았습니다.
    • setgid가 실행 가능하지 않습니다
    • 읽기 및 쓰기 가능

에 따르면 fs/namei.c. SO의 일부 사람들은 사람들이 추가할 수는 있지만 볼 수는 없는 보관용 폴더를 갖고 싶어했습니다(내 생각에는 이것이 Windows 기능인 것 같습니다). 저는 이것이 setgid가 좋을 몇 안 되는 곳 중 하나라고 생각했고, 스모크 테스트를 통해 여기.

특히 모두에게 감사드립니다.안톤출처 확인을 제안한 사람.

(편집: sysctl 철자법)

관련 정보