사용자가 파일을 삭제할 수는 있지만 읽거나 쓸 수는 없는 권한 구성이 있습니까?
답변1
파일의 권한에 따라 파일을 읽고, 쓰고, 실행할 수 있는 사람이 결정됩니다. 상위 디렉토리의 권한에 따라 삭제할 수 있는 사람이 결정됩니다. POSIX에서 파일을 삭제하는 것은 상위 디렉토리에 쓰는 것과 유사하며 실제로 삭제된 파일 자체와는 아무런 관련이 없기 때문입니다.
따라서 파일을 읽거나 쓸 수 없지만 상위 디렉터리에 쓸 수 있는 사람은 누구나 파일을 삭제할 수 있습니다.
mkdir a
chmod 777 a
touch a/b
chmod 000 a/b
b
a
누구도 root
읽거나 쓸 수 없지만 b
누구나 삭제할 수 있는 파일을 디렉터리에 생성합니다 b
.
(누구나 대체 가능하니 참고하세요 b
.)
답변2
예, 가능합니다. 무언가를 삭제하는 데 필요한 유일한 쓰기 작업은 해당 inode를 삭제하는 것입니다. 이를 위해서는 상위 디렉터리에 쓰기 권한이 필요합니다(다음과 같이 정의됨).POSIX).
실제로 이 파일에서는 아무것도 변경할 필요가 없습니다. 파일의 참조 카운터가 0에 도달하면 해당 파일은 삭제된 것으로 간주됩니다. 참조 카운터는 파일을 가리키는 inode 수에 파일에 대한 열린 파일 처리기 수를 더한 것과 같습니다. 파일이 사용되지 않으면 후자는 0이 됩니다. 따라서 파일에 포함된 1개의 inode가 삭제되면 파일도 삭제됩니다(다른 하드 링크가 없는 경우).
한 가지 예:
새 디렉터리를 만들고 그 디렉터리로 이동합니다.
mkdir /tmp/test
cd /tmp/test
그러면 다음과 같이 됩니다 root
:
sudo su
다음 명령 앞에 쓰는 것은 sudo
완료된 쓰기 작업에 필요하므로 아무런 효과가 없습니다 root
. 사용자 실행은 echo
중요하지 않습니다.
그런 다음 새 파일을 만들고 권한을 변경한 다음 루트 셸을 다시 종료합니다.
echo some content > someFile
chmod 600 someFile
exit
디렉토리의 내용을 표시할 수 있습니다.
ll
출력은 다음과 같습니다. 대신 사용자 이름을 사용하십시오 christoph
.
total 12
drwxrwxr-x 2 christoph christoph 4096 Oct 8 14:27 ./
drwxrwxrwt 13 root root 4096 Oct 8 14:25 ../
-rw------- 1 root root 13 Oct 8 14:27 someFile
마지막 1
줄은 파일을 가리키는 inode가 1개만 있음을 의미합니다. 따라서 해당 항목 1개를 삭제한 후 열려 있는 프로그램이 없으면 파일은 사라집니다(열린 경우 해당 프로그램을 닫거나 종료한 후에 사라집니다). 이런 경우가 종종 있지만 항상 그런 것은 아닙니다. 바라보다https://en.wikipedia.org/wiki/Hard_link더 많은 정보를 알고 싶습니다.
보시다시피 파일에 대한 읽기 또는 쓰기 권한은 없지만 디렉터리에 대한 쓰기 권한은 있습니다(현재 디렉터리는 .
마침표( )로 표시됨). 이는 다음과 같은 방법으로 파일을 삭제할 수 있음을 의미합니다.
rm someFile
하지만 파일이 쓰기 금지되어 있다는 경고가 표시됩니다.
rm: remove write-protected regular file 'someFile'?
"yes"를 입력 y
하고 Enter를 누르세요.
그런 다음 파일이 사라집니다.
$ ll
total 8
drwxrwxr-x 2 christoph christoph 4096 Oct 8 14:27 ./
drwxrwxrwt 13 root root 4096 Oct 8 14:27 ../