파일을 수정할 수 없도록하려면 어떻게합니까?


35

로그인 한 상태에서 다음을 수행 할 수 있습니다.

mkdir foo
touch foo/bar
chmod 400 foo/bar 
chmod 500 foo

그런 다음 vim (, not root)을 열고 edit bar을 사용하여 강제로 쓰면 w!파일이 수정됩니다.

운영 체제에서 파일 수정을 허용하지 않게하려면 어떻게합니까?

2017 년 3 월 2 일 업데이트

  1. chmod 500 foo 디렉토리에 대한 쓰기 권한은 파일 내용을 수정하는 기능과는 관련이 없으며 파일을 작성하고 삭제하는 기능과는 관련이 없습니다.

  2. chmod 400 foo/bar실제로 파일 내용이 변경되는 것을 방지합니다. 그러나 파일의 권한이 변경되는 것을 막지 는 못합니다 . 파일 소유자는 파일에 액세스 할 수 있다고 가정합니다 (예 : 모든 조상 디렉토리에 대한 권한을 실행한다고 가정). 사실, strace (1)는 이것이 vim (7.4.576 Debian Jessie)이하는 일임을 보여줍니다. vim은 chmod (2)를 호출하여 파일 소유자에 대한 쓰기 권한을 임시로 추가하고 파일을 수정 한 다음 chmod ( 2) 다시 쓰기 권한을 제거하십시오. 그렇기 때문에 chattr +i작동하는 것은 root 만 호출 할 수 있습니다 chattr -i. 이론적으로, vim (또는 모든 프로그램)은 루트로 실행되는 경우 불변 파일에서 chmod와 동일한 방식으로 chattr과 동일한 작업을 수행 할 수 있습니다.


3
나는 후드 아래에서 vim실제로 권한을 변경 한 다음 다시 사용하고 있다고 생각합니다 .
jordanm

당신이 있습니까 하지 로 실행 root?
Alvin Wong

앨빈, 나는 이것을 루트가 아닌 사용자로한다. 명확히하기 위해 게시물을 편집했습니다.
user2141130

답변:


49

Linux에서 대부분의 파일 시스템으로 "immutable"속성을 설정할 수 있습니다.

chattr +i foo/bar

불변 속성을 제거하려면 다음 -대신 사용하십시오 +.

chattr -i foo/bar

파일의 현재 속성을 보려면 lsattr을 사용할 수 있습니다.

lsattr foo/bar

는 chattr (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.

3
Linux에서이 불변 플래그는 ext2 / 3 / 4뿐만 아니라 많은 파일 시스템에서 사용할 수 있습니다 (최소한 btrfs, hfsplus, jfs, nilfs2, xfs, ocfs2, ubifs, gfs2, reiserfs AFAICT (코드를 통해 빠르게 살펴보기))
Stéphane Chazelas

@StephaneChazelas chattr명령이 e2fsprogs내 시스템 패키지의 일부인 것을 보았습니다 . 그래서 제가 그 진술을했습니다. 귀하의 의견에 따라 답변을 업데이트했습니다.
jordanm

심볼릭 링크에서는 작동하지 않습니다 :-(.이 솔루션은 루트를 포함한 모든 사용자 가 실수로 심볼릭 링크를 수정할 수 없도록하기 때문에 좋을 것 입니다.
natenho

불변은 xattr이 아닌 inode 플래그가 정확합니까? 정확한 ioctl 플래그?
ytpillai

1

당신은 할 수 있습니다 :

  1. 파일 소유자 root또는 더미 새로 작성된 사용자로 변경
  2. 올바른 그룹을 유지하십시오.
  3. chmod 440그룹별로 읽기를 허용하는 데 사용 합니다 (사용자 본인).

올바른 사용자가이 그룹의 유일한 사용자가 아닌 경우 새 그룹을 작성하여 그룹에 추가하고이 그룹을 사용해야합니다. 그러나 vi파일 소유자가 아니므로 파일 소유자를 변경할 수 없습니다.


3
부모 디렉토리에 쓸 수 있다면, vim은 파일을 삭제하고 새로운 파일을 생성 할 수 있습니다 (그리고 할 때 수행하는 작업 :w!). vim은 디렉토리의 권한을 일시적으로 변경하는 한 가지 않습니다. 따라서 디렉토리를 쓰기 불가능하게 유지하는 것이 안전해야합니다.
Stéphane Chazelas 2016 년

0

전체 디렉토리 트리를 읽기 전용으로 만들려면

cd <directory>
find ./ -print0 | sudo xargs -I {} -0 chattr +i {}

다시 읽을 수있게하려면로 변경 +i하십시오 -i.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.