
로그인하면 다음을 수행할 수 있습니다.
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
그런 다음 vim(이 아닌 root
)을 열고 편집하고 bar
force write를 사용하면 w!
파일이 수정됩니다.
운영 체제에서 파일 수정을 금지하는 방법은 무엇입니까?
2017년 3월 2일 업데이트됨
chmod 500 foo
이것은 빨간 청어입니다. 디렉토리에 대한 쓰기 권한은 파일 내용을 수정하는 기능과는 아무 관련이 없으며 오히려 파일을 생성하고 삭제하는 기능과 관련이 있습니다.chmod 400 foo/bar
실제로 파일 내용이 변경되는 것을 방지합니다.하지만, 그렇습니다아니요파일의 권한이 변경되는 것을 방지합니다. 파일 소유자는 항상 파일에 대한 권한을 변경할 수 있습니다(파일에 대한 액세스 권한이 있다고 가정, 즉 모든 상위 디렉터리에 대한 실행 권한이 있는 경우). 실제로 strace(1)은 이것이 vim(7.4.576 Debian Jessie)이 수행하는 작업임을 나타냅니다. vim은 파일 소유자에게 일시적으로 쓰기 권한을 추가하기 위해 chmod(2)를 호출하고 파일을 수정한 다음 chmod(2)를 호출합니다. 쓰기 권한을 다시 제거하십시오. 이것이chattr +i
작동하는 이유입니다chattr -i
. 이론적으로 루트로 실행하면 vim(또는 모든 프로그램)은 chattr을 사용하여 불변 파일에서 chmod로 수행할 수 있는 것과 동일한 작업을 수행할 수 있습니다.
답변1
Linux에서는 대부분의 파일 시스템에 대해 "불변" 속성을 설정할 수 있습니다.
chattr +i foo/bar
불변 속성을 제거하려면 다음을 -
사용하세요 +
.
chattr -i foo/bar
파일의 현재 속성을 보려면 lsattr을 사용할 수 있습니다.
lsattr foo/bar
이것채팅(1)맨페이지는 사용 가능한 모든 속성에 대한 설명을 제공합니다. 설명은 다음과 같습니다 i
.
A file with the `i' attribute cannot be modified: it cannot be deleted
or renamed, no link can be created to this file and no data can be
written to the file. Only the superuser or a process possessing the
CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
답변2
당신은 할 수 있습니다:
- 파일 소유자를
root
새로 생성된 가상 사용자 로 변경 - 올바른 그룹을 유지하십시오.
chmod 440
그룹(예: 귀하)별로 읽기를 허용하는 데 사용됩니다 .
올바른 사용자가 그룹의 유일한 사용자가 아닌 경우 새 그룹을 만들어 그룹에 추가하고 해당 그룹을 사용해야 합니다. 그러나 귀하는 파일의 소유자가 아니므로 vi
파일 소유자를 변경할 수 없습니다.
답변3
전체 디렉토리 트리를 읽기 전용으로 만들려면:
cd <directory>
find ./ -print0 | sudo xargs -I {} -0 chattr +i {}
다시 읽을 수 있게 하려면 +i
로 변경하십시오 -i
.