UID 0이 사용자 네임스페이스의 SUID 파일에 대한 하드 링크를 처리하지 않는 이유는 무엇입니까?

UID 0이 사용자 네임스페이스의 SUID 파일에 대한 하드 링크를 처리하지 않는 이유는 무엇입니까?

루트 권한(네임스페이스 내부 UID 0, 외부 권한 없음)으로 실행되는 사용자 네임스페이스 셸에 대해 다음 레코드를 고려하세요.

# cat /proc/$$/status | grep CapEff
CapEff: 0000003cfdfeffff
# ls -al
total 8
drwxrwxrwx  2 root   root   4096 Sep 16 22:09 .
drwxr-xr-x 21 root   root   4096 Sep 16 22:08 ..
-rwSr--r--  1 nobody nobody    0 Sep 16 22:09 file
# ln file link
ln: failed to create hard link 'link' => 'file': Operation not permitted
# su nobody -s /bin/bash -c "ln file link"
# ls -al
total 8
drwxrwxrwx  2 root   root   4096 Sep 16 22:11 .
drwxr-xr-x 21 root   root   4096 Sep 16 22:08 ..
-rwSr--r--  2 nobody nobody    0 Sep 16 22:09 file
-rwSr--r--  2 nobody nobody    0 Sep 16 22:09 link

분명히 프로세스에는 CAP_FOWNER 권한(0x8)이 있으므로 임의 파일에 대한 하드 링크가 가능해야 합니다. 그러나 .SUID 소유의 테스트 파일은 연결할 수 없습니다 nobody. 프로세스가 nobody파일로 전환한 다음 링크하는 것을 막을 수 있는 방법이 없으므로 상위 네임스페이스는 문제가 되지 않는 것 같습니다.

linkUID 0 네임스페이스가 UID를 전환하지 않고 하드 링크를 처리할 수 없는 이유는 무엇입니까 ?file

답변1

질문에 설명된 동작은 버그이며다가오는 Linux 4.4에서 수정되었습니다..

관련 정보