연결 해제/삭제를 거부하는 캐시 디렉터리를 만드는 것이 가능합니까?

연결 해제/삭제를 거부하는 캐시 디렉터리를 만드는 것이 가능합니까?

다운로드 후 절대 변경되지 않는 파일을 저장하는 캐시 디렉토리가 있습니다. 그러나 이 캐시 디렉터리를 사용하는 프로그램은 캐시에서 파일을 삭제합니다. 거부된 rw 디렉토리를 생성할 수 있는 메커니즘(예: 회로 차단/바인딩 옵션)이 있습니까 unlink?

답변1

이러한 기능은 일부 파일 시스템의 Linux에서 구현되었습니다.추가 모드속성. 이 속성은 다음 사용자만 사용할 수 있습니다.뿌리사용자(또는 충분히 능력이 있는). ~에서chattr:

속성

"a" 속성이 설정된 파일은 다음 위치에서만 열 수 있습니다.추가 모드글쓰기를 위해.수퍼유저 또는 CAP_LINUX_IMMUTABLE 기능이 있는 프로세스만 이 속성을 설정하거나 지울 수 있습니다.

실제로 명시적으로 설명하지 않더라도 이는 디렉터리에 영향을 미칩니다. 파일을 디렉터리에 추가(또는 링크)할 수는 있지만 더 이상 삭제하거나 이름을 바꿀 수는 없습니다.

최소한 속성이 지원됩니다.외부 4,xfs그리고BTFS(그러나 예를 들면 그렇지 않다.임시 파일 시스템) 파일 시스템.

완전한 예. 정상적인 행동:

$ mkdir mytest
$ echo 1 > mytest/foo
$ mv mytest/foo mytest/bar
$ echo 2 > mytest/foo
$ rm mytest/foo

이제 속성이 설정되었습니다.

$ sudo chattr +a mytest
$ echo 3 > mytest/foo
$ rm mytest/foo
rm: cannot remove 'mytest/foo': Operation not permitted
$ rm mytest/bar
rm: cannot remove 'mytest/bar': Operation not permitted
$ mv mytest/foo mytest/baz
mv: cannot move 'mytest/foo' to 'mytest/baz': Operation not permitted

파일이 수신되지 않으므로 파일 자체에는 영향을 미치지 않습니다.추가 모드속성 자체:

$ echo 4 >> mytest/foo
$ echo 5 >> mytest/bar
$ cat mytest/foo
3
4
$ cat mytest/bar
1
5

여전히 잘릴 수 있습니다.

$ : > mytest/foo
$ cat mytest/foo
$

또는 다른 곳에 연결/연결 해제:

$ mkdir mytest2
$ ln mytest/foo mytest2/foo
$ rm mytest2/foo
$ 

적용되는 제한사항을 제거하는 유일한 방법은 다음과 같습니다.뿌리,는뿌리삭제추가만속성과 chattr -a mytest.

관련 정보