파일 액세스 권한을 읽기 전용으로 변경했지만 여전히 파일에 쓸 수 있습니다. 왜?

파일 액세스 권한을 읽기 전용으로 변경했지만 여전히 파일에 쓸 수 있습니다. 왜?

저는 buildroot를 사용하여 구축된 소규모 임베디드 시스템을 실행하고 있습니다. 대상 장치에 파일 권한을 설정하려고 할 때 이상한 동작이 발생했습니다. 혼란스러운 점을 설명하기 위해 다음과 같은 간단한 예를 시도했습니다.

# cd /mydir
# touch tmp.txt
# echo "rubbish" > tmp.txt
# cat tmp.txt
rubbish

# chmod 0444 .
# chmod 0444 tmp.txt
# echo "new-rubbish" > tmp.txt
# cat tmp.txt
new-rubbish

나는 이것에 대해 매우 혼란스러워합니다. 파일과 디렉터리를 읽기 전용으로 설정하면서도 파일 내용을 수정할 수 있는 방법은 무엇입니까? 같은 디렉터리에 실행 파일이 있는데 실행하려고 하면 다음과 같은 메시지가 나타납니다.

# chmod 0444 my_binary
# ./my_binary
-sh: ./my_binary: Permission denied

내가 예상한 대로 작동합니다. 분명히 나는 ​​Linux에서 파일 액세스 모델이 작동하는 방식에 대해 몇 가지 근본적인 오해를 가지고 있습니다. 읽기 전용으로 설정한 파일에 쓸 수 있는 이유를 설명할 수 있는 사람이 있나요?

답변1

이 작업을 수행하는 것으로 보이면 root이는 해당 디렉토리에 쓸 수 있는 권한이 있음을 의미합니다. root권한이 .인 경우에도 파일에 추가할 수 있습니다 -r--r--r--.

이것

echo "new-rubbish" > tmp.txt

JoelDavis가 지적한 것처럼 파일을 자르므로 파일을 삭제하고 다시 쓰지 않습니다(사용 시 bash).

관련 정보