배경 이야기: 클라이언트에는 POSIX와 NFSv4가 혼합된 환경이 있습니다. POSIX는 터치되거나 작업이 수행될 때마다 기본 NFSv4 ACL을 중단합니다. 그들은 NFSv4 ACL에서 삭제 매개변수가 꺼진 경우에도 사용자가 한 폴더를 다른 폴더로 이동할 수 있다고 명시했습니다. 이동하는 것이 삭제되는 것과 같습니다.
그런 다음 클라이언트는 폴더에 chmod 1755를 시도하지만 파일은 여전히 이동할 수 있습니다.
파일의 상위 ACL은 다음과 같습니다.
#NFSv4 ACL
#owner:root
#group:root
special:owner@:rwxc:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (X)CHOWN (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
special:group@:rwx-:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:everyone@:rwx-:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
이 상위 폴더에 테스트 디렉터리를 생성하면 다음 NFSv4 ACL이 표시됩니다.
#NFSv4 ACL
#owner:root
#group:root
special:owner@:rwxc:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (X)CHOWN (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
special:group@:r-x-:allow
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:everyone@:r-x-:allow
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
이 새 디렉터리에 테스트 파일을 생성하면 다음 NFSv4 ACL이 표시됩니다.
#NFSv4 ACL
#owner:root
#group:root
special:owner@:rw-c:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (X)CHOWN (-)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
special:group@:r---:allow
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:everyone@:r---:allow
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
NFSv4 ACL = MODE4_SVTX에 고정 비트를 적용하면 도움이 될 수 있다고 생각되는 다음을 발견했습니다.이를 기존 NFSv4 ACL에 직관적으로 통합하려면 어떻게 해야 합니까? 일단 그것을 알아낸 후에는 계속해서 나무 아래로 밀어낼 수 있었습니다.
이러한 폴더를 다른 폴더로 이동할 수 있도록 하는 것이 ACL의 하위 삭제 요소입니까?
목표: NFSv4 ACL에서 고정 비트를 허용하여 파일 소유자 이외의 다른 사람이 파일을 이동/삭제하는 것을 방지하는 방법을 찾습니다.
추가 정보:
두 개의 액세스 마스크 비트는 디렉터리 항목을 삭제하는 기능을 제어합니다. 개체 자체("대상")의 ACE4_DELETE와 포함 디렉터리("부모")의 ACE4_DELETE_CHILD입니다. 많은 시스템은 또한 일부 시스템에서 대상 또는 상위를 소유한 사용자에게만 연결 해제를 허용하기 위해 디렉토리에 "고정 비트"(MODE4_SVTX)를 사용합니다. 결정은 대상이 쓰기 가능한지 여부에 따라 달라집니다.
대상에서 ACE4_DELETE가 허용되거나 상위에서 ACE4_DELETE_CHILD가 허용되는 경우 서버는 연결 해제를 허용해야 합니다. (상위 또는 대상이 이러한 권한 중 하나를 명시적으로 거부하는 경우에도 마찬가지입니다.)
문제의 ACL이 위 사항을 명시적으로 허용하거나 거부하지 않고 MODE4_SVTX가 상위 항목에 설정되지 않은 경우 서버는 ACE4_ADD_FILE이 허용되는 경우에만 삭제를 허용해야 합니다. MODE4_SVTX가 설정되면 서버는 삭제자에게 상위 또는 대상이 있어야 하거나 대상에 쓰기 가능하도록 요구할 수도 있습니다.
이를 통해 서버는 쓰기 비트 대신 ACE4_ADD_FILE을 사용하여 기존 UNIX 의미 체계와 유사한 기능을 지원할 수 있습니다.