나는 많은 chmod와 chown 및 이들의 조합을 시도했습니다.
나는 여전히 해당 사용자의 홈 디렉터리에 있는 파일을 해당 사용자가 읽을 수는 있지만 쓰기나 실행은 불가능하게 하고 싶습니다. 그러나 나는 여전히 해당 사용자가 사용자의 홈 폴더에 쓸 수 있도록 하여 사용자가 폴더에 파일을 추가할 수는 있지만 이러한 명령을 실행한 폴더 내의 파일을 삭제할 수는 없도록 하고 싶습니다.
더 많은 데이터:
- 이 홈 디렉터리는 암호화되어 있습니다.
- bash 스크립트에 넣을 수 있는 한 내가 요구하는 솔루션이 여러 줄인지 여부는 별로 신경 쓰지 않습니다.
답변1
내가 아는 유일한 방법은 이름에서 알 수 있듯이 파일 속성을 변경하는 chattr(1)을 사용하는 것입니다.
속성 섹션에서 다음을 읽을 수 있습니다.
"'i' 속성이 있는 파일은 수정할 수 없습니다. 삭제하거나 이름을 바꿀 수 없고, 파일에 대한 링크를 만들 수 없으며, 파일의 메타데이터 대부분을 수정할 수 없으며, 파일을 쓰기 모드로 열 수 없습니다. 수퍼유저 또는 소유자 CAP_LINUX_IMMUTABLE 기능이 있는 프로세스만 이 속성을 설정하거나 지울 수 있습니다.
--실제 사례:
: lsattr example.file
------------------- example.file
: ls -lh example.file
-rw------- 1 tntx tntx 15 Dec 23 20:43 example.file
: su -
Password:
root@foo: chattr +i example.file
root@foo: exit
logout
: lsattr example.file
----i-------------- example.file
: cat example.file
testing chattr
: echo "adding text" >> example.file
ksh93: example.file: cannot create [Operation not permitted]
Same with vi:
Read-only file, not written; use ! to override.
:w!
Error: example.file: Operation not permitted.
And then trying to mv:
: mv example.file example.file2
mv: cannot move 'example.file' to 'example.file2': Operation not permitted
What about cp:
: ls -lh example.file*
-rw------- 1 tntx tntx 15 Dec 23 20:43 example.file
-rw------- 1 tntx tntx 15 Dec 23 21:02 example.file2
: /usr/bin/lsattr example.file*
----i-------------- example.file
------------------- example.file2
따라서 사용자만 읽을 수 있도록 파일을 잠글 수 있지만 자유롭게 cp(1)하고 새 파일에서 편집할 수 있기 때문에 실패합니다.
답변2
사용자가 모드를 변경할 수 있으므로 chmod로는 충분하지 않습니다.
먼저 사용자가 파일을 편집하지 못하도록 방지합니다.
- chmod go-w «파일 이름»
- chown «다른 사용자» «파일 이름»
이제 사용자는 여전히 파일을 삭제할 수 있으므로 이를 방지해 보겠습니다. (파일이 포함된 디렉터리에서 파일을 제거하면 파일이 삭제됩니다. 중지해야 합니다.)
- chown «다른 사용자» «디렉토리 포함»
- chmod +t «디렉토리 포함»
이제 사용자가 쓸 수 있는 포함 디렉터리를 만듭니다.
- chown «사용자 이름» «디렉토리 포함»
- chmod g+w «디렉토리 포함»
실행을 막을 수는 없습니다. 실행 비트를 설정할 수는 없지만 사용자가 파일을 읽을 수 있으면 복사할 수 있습니다. 복사할 수 있으면 실행 가능하게 만들 수 있습니다.