공유하려고 하는 git(실제로는 git-annex) 저장소가 있는데 그 중 일부는 몇 개의 디렉토리에 set-group-id 비트를 설정하는 것과 관련이 있습니다. 이것은 Debian GNU/Linux Stretch 상자의 ext4 파일 시스템에 있습니다. 이상한 이유로 chmod g+s DIRECTORY
생략됨 ( chmod
가독성을 위해 블록 주위에 빈 줄이 추가됨):
$ stat objects
File: objects
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd06h/64774d Inode: 12353692 Links: 260
Access: (0775/drwxrwxr-x) Uid: ( 1000/ anthony) Gid: ( 1025/git-books)
Access: 2018-07-30 14:43:13.831641743 -0400
Modify: 2018-07-28 14:28:14.970667931 -0400
Change: 2018-07-30 14:46:38.179597449 -0400
Birth: -
$ chmod g+s objects
$ echo $?
0
$ stat objects
File: objects
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd06h/64774d Inode: 12353692 Links: 260
Access: (0775/drwxrwxr-x) Uid: ( 1000/ anthony) Gid: ( 1025/git-books)
Access: 2018-07-30 14:43:13.831641743 -0400
Modify: 2018-07-28 14:28:14.970667931 -0400
Change: 2018-07-30 14:50:43.355539381 -0400
Birth: -
지금까지 확인한 내용은 다음과 같습니다.
nosuid
작동을 방해할 수 있는 이상한 설치 옵션(예: )은 없는 것 같습니다 . fstab을 확인했는데/proc/mounts
, 표시됩니다./dev/mapper/slow-srv /srv ext4 rw,relatime,nobarrier,errors=remount-ro,stripe=384,data=ordered 0 0
- 디렉토리에 이상한 ACL이 없는 것 같습니다
setfacl -b objects
. 이렇게 한 후에도 chmod는 여전히 작동하지 않습니다. strace
on은chmod
시스템 호출이 성공했고 sgid 비트가 설정되었음을 보여줍니다.fchmodat(AT_FDCWD, "annex", 02775) = 0
- 동일한 파일 시스템의 다른 디렉토리에는 set-group-id 비트가 설정되어 있습니다. 실제로 동일한 세션의 다른 git-annex 저장소에 이전에 몇 가지를 설정했습니다.
답변1
알고 보니 며칠 전에 그룹을 만들고 본인도 추가했지만,내 생각새로운 SSH 연결이지만 그렇지 않습니다. OpenSSH의 연결 재사용 기능( ControlMaster
// 등) 을 사용하다 보니 ControlPath
실제로 약 10일 전부터 연결에 로그인되어 있어서 내 세션(프로세스)에 새로운 그룹이 설정되지 않았습니다. 으로 이를 확인했습니다 id
.
로그인 후 ssh -o ControlPath=none HOST
내 세션에 그룹이 있고 유효한지 id
확인했습니다 .git-books
chmod g+s
권한 거부 오류가 표시되지 않는 이유는 표준에서 이러한 동작을 요구하는 것 같습니다.파일용구현 시 다음 비트를 무시할 수 있습니다.
호출 프로세스에 적절한 권한이 없고 파일의 그룹 ID가 유효 그룹 ID 또는 보충 그룹 ID 중 하나와 일치하지 않고 파일이 일반 파일인 경우 비트 S_ISGID(성공적인 반환 후 set-group-ID 켜짐) 파일 모드에서 chmod()) 실행에서)를 지워야 합니다.
다른 구현 정의 제한 사항으로 인해 모드의 S_ISUID 및 S_ISGID 비트가 무시될 수 있습니다.
단일 Unix 사양 v4 2018 버전,chmod.http://pubs.opengroup.org/onlinepubs/9699919799/functions/chmod.html(등록이 필요할 수 있습니다).
아마도 오류를 반환하는 것은 정상이고 일관성이 없을 수도 있습니다 ☹.