사용자 소유 디렉토리에서 특정 파일이 삭제되는 것을 방지 할 수있는 방법이 있습니까?


42

하자 말 사용자는이 Directory1에를 그리고 포함 을 File1을 File2 CantBeDeletedFile는 사용자가 삭제할 수되지 않을 것이다, 그래서 어떻게 할 CantBeDeletedFile를 ?

Directory1 의 소유권을 변경하고 쓰기 권한을 제거하면 사용자가 파일을 삭제할 수 없습니다. 또한 새 파일 등을 추가 할 수 없습니다.

삭제되지 않는 파일을 설정할 수 있기를 원합니다.

보다 구체적인 설명.

사용자 프로필을 만들고 있습니다. 데스크톱 에서 응용 프로그램 시작 관리자 파일을 만들고 있습니다. 그래서 일부 런처 파일 (.desktop)을 설정하고 사용자가 파일을 시작할 수만 있고 이름을 바꾸거나 삭제할 수 없으며 실행하기 만하면됩니다.

현재 사용자가 파일을 포함하는 디렉토리를 소유하고있는 경우. 그는 삭제할 수 있습니다.

모든 * nix에 대한 일반적인 방법이없는 경우 Linux 및 ext4 FS입니다.

답변:


40

(나는 사용자의 집에 침입하는 것을 좋아하지 않는다. 나는 그들이 집에서하고 싶은 것은 무엇이든 할 수 있어야한다고 생각한다. 그러나 어쨌든…)

이것은 적어도 리눅스에서 작동해야합니다. 나는 user이미 그룹의 구성원 이라고 가정 합니다 user. 해결책은 Directory1디렉토리의 소유권을 변경 하고 고정 비트를 디렉토리에 설정하는 것입니다.

chown root:user Directory1
chmod 1775 Directory1

그런 다음 사용하십시오.

chown root Directory1/CantBeDeletedFile

이제 user고정 비트 ¹로 인해이 파일을 제거 할 수 없습니다. 에서 user여전히 자신의 파일을 추가 / 제거 할 수 있습니다 Directory1. 그러나 Directory1절대 비워지지 않으므로 삭제할 수 없습니다 .


1. 디렉토리에서 고정 비트가 활성화되면 소유자 이외의 사용자는 디렉토리 내에서 자신의 파일 만 제거 할 수 있습니다. /tmp권한이 1777= 같은 디렉토리에서 사용됩니다 rwxrwxrwt.


나도 싫어하지만 사용자는 Linux 세계의 초보자입니다. 그들은 우연히 실행 프로그램을 삭제하면 그들은 우리 기술 지원 : 스팸하기 시작
bakytn

작동합니다 감사합니다! 어떻게 진행할 지 잘 모르겠습니다. chattr 또는 이런 식으로. 당신의 방법에 있다면. 여전히 디렉토리를 루트로 삭제할 수 있습니다. 상위 솔루션 (chattr)을 사용하면 루트조차도 폴더를 삭제할 수 없습니다.
bakytn

@bakytn : 이것은 단지 예방책입니까, 아니면 실제로 지원 전화를 받았습니까? 대부분의 초보자는 아마 그들이 모르는 파일을 엉망으로 만들기에는 너무 무서울 것입니다.
Lie Ryan

@Lie Ryan은 지원을 요청할 것이라고 100 % 확신합니다. 그러나 예, 현재는 예방 조치 일뿐입니다.
bakytn

조만간 훈련 용 바퀴가 벗겨 져야합니다. 자전거를 타는 법을 배우지 못하면 사고가 일어날 것입니다. 내가 먼저 가장 가까운 벽에 가서 머리를 쾅, 당신은 '실수'ThisDesktopFile을 삭제 한 경우 아마도 "온라인 도움말 withcopious 보충 및 스팸 통조림, 대답에 동의 열심히 할 다음 (행운) 반대 3 회, 그리고 cp /here/is/the/master/ThisDesktopFile $HOME. 서명 : BOfH "
vonbrand

63

i속성으로 파일을 변경할 수 없도록하십시오 .

chattr +i file.desktop

자세한 내용 man chattr은 참조하십시오.


8
언급 된 매뉴얼 페이지에서 추론 할 수 없으므로이 메모를 추가합니다 chattr.ext2 / ext3 / ext4 파일 시스템에서만 작동합니다.
manatwork

이거 진짜 멌있다! 효과가 있었다! 감사합니다! 우아한 솔루션이지만 한 가지 제한 사항이 있습니다. 루트조차도 파일을 먼저 변경하지 않으면 해당 파일을 삭제할 수 없습니다. 그러나 이것은 실제로 너무 시원합니다. 어떤 답변을 수락할지 확실하지 않았습니다. 적은 빠른 더 일반적인 방법 만 허용
bakytn

@manatwork 적어도 XFS에서도 작동합니다. 다른 파일 시스템도 이러한 속성을 지원한다고 생각합니다.
Ruslan

'실행 취소'이 명령에 바로 할chattr -i file.desktop
GreenRaccoon23

1
방금 Linux의 zfs에서 이것을 테스트했으며 작동했습니다. 백업 프로그램 bacula이 폴더를 무시 하도록 지시하는 데 사용되는 파일이 삭제되는 것을 막고 싶었습니다 .
drescherjm

2

유닉스 파일 사용 권한을 가진 개별 파일의 삭제를 막을 수있는 방법이 없다고 생각하지만 해결 방법을 생각할 수 있습니다. 제거 될 때 그것을 대체하는 데몬을 작성하십시오. inotify-toolsLinux를 사용하는 경우 이런 종류의 작업에 적합합니다.

삭제 된 항목을 대체 할 수있는 몇 가지 방법이 있습니다. 새 항목을 복사하거나 실제 파일을 안전한 곳에 보관하고 링크를 사용자 디렉토리에 복사하십시오. 링크의 경우 심볼릭 링크 또는 하드 링크를 사용할 수 있습니다. 심볼릭 링크로 시작하지만 일부 (매우 적은) 프로그램은 심볼릭 링크를 올바르게 처리하지 않습니다. 사용자에게 이와 같은 프로그램이 있으면 하드 링크를 대신 사용하십시오.


0

간단한

chmod -i filename

해당 파일을 삭제하지 못하게 "보호"합니다.

rm filename
rm: remove write-protected regular file 'filename'?

여전히 삭제할 수는 있지만 최소한 현재하고있는 일에 대해 충분히 확신해야합니다.

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