sudo가 아닌 사용자에게 권한 거부 대신 "rm: 쓰기 금지된 일반 빈 파일 제거" 메시지가 표시됩니다.

sudo가 아닌 사용자에게 권한 거부 대신 "rm: 쓰기 금지된 일반 빈 파일 제거" 메시지가 표시됩니다.

Linux 서버에 추가 디스크를 추가했습니다.

fstab에 다음 줄을 추가했습니다.

UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1          ext4    defaults 0 0

그런 다음 마운트 지점 /disk1을 생성하고 마운트했습니다.

 sudo mkdir /disk1
 sudo mount /disk1

그런 다음 사용자 "hari"로 빈 파일 touch1.txt를 만들었고 해당 권한은 다음과 같습니다.

sudo touch test1.txt

-rw-rw-r-- 1 hari hari     0 Sep 12 18:23 test1.txt

이제 다른 사용자로 로그인하여 test1.txt 파일을 삭제하면 "권한이 거부되었습니다"라고 말하는 대신 실제로 요청한 다음 거부합니다. 왜 이렇게이다? 그리고 어떻게 하면 "정상"처럼 작동하게 할 수 있나요?

hari2@UBUNTU01:/disk1$ rm test2.txt
rm: remove write-protected regular empty file ‘test2.txt’? y
rm: cannot remove ‘test2.txt’: Operation not permitted

답변1

제거 작업과 관련하여 Unix 권한은 약간 이상합니다.

우선 파일을 삭제하려면 디렉터리에서 해당 파일에 대한 링크를 제거해야 합니다. 대부분의 Unix 파일 시스템은 하드 링크를 허용하므로 파일이 둘 이상의 디렉토리에서 링크될 수 있으므로 링크가 둘 이상 존재합니다. 링크를 제거해도 파일에 대한 다른 링크가 없는 한 파일은 삭제되지 않습니다.

이러한 이유로 파일을 "제거"하는 데 사용되는 실제 시스템 호출을 이라고 합니다 unlink. 그러나 링크 해제를 수행하는 쉘 명령 유틸리티는 rm"제거"를 의미하는 니모닉인 이라고 합니다.

연결 해제 작업으로 인해예배 규칙서(디렉토리 항목을 제거하여) 파일이 아닌 작업에 필요한 권한은 쓰기 권한입니다.디렉토리에. 파일 자체에 대한 권한은 관련이 없습니다.

그러나 알고 보니 쓰기 권한이 있는 디렉터리에서 실제로 자신에게 속하지 않은 파일을 삭제하려고 시도하는 것은 흔한 실수입니다. (정확하게는 흔한 상황은 아니지만, 그런 경우가 있을 경우 실수로 파일 삭제를 시도하는 경우가 다소 흔합니다.)

시스템 관리자가 자신의 발가락을 쏘는 것을 방지하기 위해 rm유틸리티는 먼저 유틸리티를 호출하는 사람에게 쓰기 권한이 있는지 확인합니다.파일, 파일 링크를 해제하는 데 해당 권한이 필요하지 않더라도 마찬가지입니다. 분명한 이유로 파일 삭제를 시도하기 전에 이 확인을 수행합니다.

유틸리티 rm~ 아니다"작업 전 확인"은 일반적으로 나쁜 스타일로 간주되므로 파일 링크를 해제하는 데 사용이 허용되는지 확인하십시오. 오히려 원하는 작업을 수행하고 운영 체제에서 오류가 반환되면 실패를 보고합니다. 이 경우 사용자에게 디렉터리에 대한 쓰기 권한이 없기 때문에 OS는 EACCES를 보고합니다.

불행한 결과는 쓰기 권한이 없는 디렉터리에서 쓰기 권한이 없는 파일을 삭제하려고 하면 rm계속할지 여부를 헛되이 묻고 실패를 보고한다는 것입니다.

관련 정보