권한이 없는 사용자로서 EXT4
나는 필요한 모든 권한( )을 가지고 있는 파일 시스템의 디렉토리를 가지고 있습니다 . 이를 통해 루트가 소유한 경우에도 rwx
그 안에 있는 파일(예: vim file
및 )의 내용과 소유권을 변경할 수 있습니다. , 그리고 ( 및 ) :w!
을 변경할 권한이 없더라도 마찬가지입니다 .root:root
0644
루트가 소유한 디렉토리가 권한이 없는 사용자가 소유한 디렉토리 내에 있는 경우 이것이 가능합니까?
답변1
디렉터리 소유자는 필요에 따라 디렉터리의 내용을 변경할 수 있습니다. 디렉터리 소유자가 쓸 수 없는 디렉터리에 파일이 존재하더라도 디렉터리 소유자는 해당 파일을 삭제하고 같은 이름의 새 파일을 생성할 수 있습니다.
보다 일반적으로, 디렉토리에 대한 쓰기 액세스 권한이 있으면 해당 디렉토리에서 파일을 삭제하고 생성할 수 있습니다. 따라서 파일에 대한 쓰기 권한이 없는 경우 파일에 쓰는 것이 아니라 기존 파일을 삭제하고 동일한 이름을 가진 새 파일을 생성하여 해당 디렉터리의 파일을 변경할 수 있습니다.
당신이 디렉토리를 소유하고 parent
있고 그 디렉토리에 루트가 소유한 하위 디렉토리가 포함되어 있고 child
쓰기 권한이 없다면 child
그 안에 있는 파일을 수정할 수 없습니다 child
. 그러나 이름을 바꾸고 child
이라는 새 하위 디렉터리를 만들 수 있습니다 child
. 이 하위 디렉터리는 귀하가 소유하므로 원하는 것은 무엇이든 포함할 수 있습니다.
이것이 바로 개인 키 파일에 대한 OpenSSH의 온전성 검사와 같이 파일 제어를 확인하는 보안 검사가 전체 디렉터리 체인을 루트까지 확인하는 이유입니다. 마찬가지로, 사용자에게 파일 실행을 위한 sudo 권한을 부여하는 경우 파일의 전체 경로는 루트에 의해 제어되어야 합니다. 예를 들어 사용자에게 홈 디렉터리에서 프로그램을 실행할 수 있는 sudo 권한을 부여하지 마십시오. (반면에 setuid 루트 프로그램은 어디서나 가능합니다. 왜냐하면 setuid는 파일 경로가 아닌 파일 자체에 추가되기 때문입니다.) 디렉토리 경로의 중간 단계를 제어하는 사람은 누구나 편집을 하지 않고 자신의 콘텐츠를 바꿀 수 있습니다. 콘텐츠 파일이지만 경로의 해당 지점에서 디렉터리 이름을 변경하면 됩니다.
답변2
나는 당신이 말한 전제를 복제할 수 없습니다.
내가 소유한 디렉토리에는 루트가 소유한 파일이 포함되어 있습니다.
$ ls -ld mydir mydir/file2
drwxrwxr-x 2 user1 user1 4096 Jan 5 13:52 mydir
-rw-rw-r-- 1 root root 0 Jan 5 13:52 mydir/file2
root
파일의 소유권을 주장해 보세요 mydir
.
$ chown user1 mydir/file2
chown: changing ownership of 'mydir/file2': Operation not permitted