Linux-루트에서도 파일이 삭제되는 것을 방지 / 보호하는 방법이 있습니까?


89

직장의 응용 프로그램에서 사용하는 매우 중요한 파일이 있는데, 파일이 삭제되지 않도록해야합니다. 어떻게해야합니까?

linux  files 

13
백업을 수행하면 복원 할 수 있습니다. 그 외에는 chattr +i도움이 될 수 있지만 파일을 읽기 전용으로 설정하고 (으로 재정의 할 수도 있음 chattr -i) SELInux 등으로 파일을 보호 할 수도 있습니다.
Sven

43
루트조차도 루트조차 죽일 수없는 프로세스를 만들 수 있습니까?
Mark Gabriel

4
@MarkGabriel 예. 포크 폭탄. :)
reirab


8
HW 관리자가 디스크를 가져 와서 제거하고 파쇄하여 잔재를 태우고 한숨에 먹이를 줄 수 있습니다. 또는 일부 C (++) 프로그래머가 일부 코 악마를 유발할 수 있습니다. 중요한 것은 무엇이든 백업하십시오. 두번.
Pavel

답변:


133

예, 파일의 속성을 읽기 전용으로 변경할 수 있습니다.

명령은 다음과 같습니다.

chattr +i filename

그리고 그것을 비활성화하려면 :

chattr -i filename

보낸 사람 man chattr:

i속성이 있는 파일은 수정할 수 없습니다. 파일을 삭제하거나 이름을 바꿀 수 없으며이 파일에 대한 링크를 만들 수 없으며 파일에 데이터를 쓸 수 없습니다. 수퍼 유저 또는 CAP_LINUX_IMMUTABLE기능을 소유 한 프로세스 만이 속성을 설정하거나 지울 수 있습니다.


11
관심 들어, BSD와 동등한이다chflags schg
앤드류 Domaszek

85
루트 액세스 권한이있는 사용자는 해당 플래그를 설정 해제 한 다음 파일을 삭제할 수 있습니다. 우연히 일어날 가능성은 없지만 의도적 인 삭제에는 반대하지 않습니다.
Grant

6
보안 수준이 충분히 높게 설정되어 있으면 @Grant 가 아닙니다 . 부팅 프로세스는 네트워크가 활성화되기 전에 보안 수준을 2로 설정하므로 플래그를 재설정하려면 로컬 시스템 액세스가 필요합니다 (그러나 이는 해당 시간 이전에 부팅 프로세스에 사용 된 파일도 변경할 수 없음을 의미합니다).
Simon Richter

16
하나의 극단적에 걸릴하고자하는 경우 @Grant, 당신은 파티션이 삭제되거나 디스크가 ... 10 ^ 30 년 노 (furnace) 또는 양성자 붕괴에 투입되는 것을 방지 할 수 없습니다
하겐 폰 Eitzen

2
@Itai Ganot man 4 일 전에 읽었 으면 좋겠다. 나는 시험에서 질문을했다 = /
vfbsilva

84

CD에 굽습니다. CD를 CD-ROM 드라이브에 넣고 거기에서 액세스하십시오.


15
상자 밖으로 생각하면 +1. 그리고 afaik, 그것은 어떤 상황에서 이전에 사용되었습니다 (cd가있는 블랙 박스 cdrom 드라이브가 목적지로 배송되었습니다). 어쨌든 누군가 드라이브를 분리 할 수없는 경우에는 적절하지 않을 수 있습니다.
Alex Mazzariol

1
키스 사랑해! +1
MonkeyZeus

2
이것이이 질문에 대한 정답이라고 생각합니다. 파일 속성 (chattr -i)을 변경해도 악의적 인 작업을 막을 수 없습니다.
Bruno von Paris

7
오늘날 내장 된 카드 리더기의 풀 사이즈 SD 카드는 더 나은 솔루션 일 수 있습니다. 전력 소비가 적고, 많은 경우에 더 빠르게 액세스하며, 쓰기없이 사용할 수 있습니다.
Chris H

3
@ jpmc26 따라서 CD-ROM 드라이브입니다. 그것들은 읽기 / 전용입니다.
Thorbjørn Ravn Andersen '12

29
  1. 파일 시스템 이미지를 작성하십시오.
  2. 이미지를 마운트하십시오.
  3. 파일을 마운트 된 이미지로 복사하십시오.
  4. 이미지를 마운트 해제하고 읽기 전용으로 다시 마운트하십시오.
  5. 이제 삭제할 수 없습니다.

예:

# dd if=/dev/zero of=readonly.img bs=1024 count=1024
# mkfs.ext2 readonly.img
# mkdir readonlyfolder
# mount readonly.img readonlyfolder/
# echo "can't delete this" > readonlyfolder/permanent.txt
# umount readonlyfolder
# mount -o ro readonly.img readonlyfolder
# cat readonlyfolder/permanent.txt 
can't delete this
# rm readonlyfolder/permanent.txt 
rm: cannot remove `readonlyfolder/permanent.txt': Read-only file system

3
mount -o remount,rw readonlyfolder/ && rm readonlyfolder/permanent.txt
Kaz Wolfe

3
이것을 조금 더 취하면 압축되거나 읽기 전용 squashfs이거나 사용할 수 있습니다 cramfs. 파일 시스템을 빌드하려면 특별한 도구가 필요합니다.
Zan Lynx

7

리눅스는 소위있다 바인드 마운트 오히려 강력하고 유용한 기능입니다 옵션을 알고 :

%  cd $TMP && mkdir usebindmountluke && cd usebindmountluke
%  echo usebindmountluke > preciousfile
%  sudo mount -B preciousfile preciousfile
%  sudo mount -oremount,ro preciousfile
%  echo sowhat > preciousfile
zsh: read-only file system: preciousfile
%  rm preciousfile
rm: cannot remove ‘preciousfile’: Read-only file system

— 여기서 수행되는 작업은 바인드 마운트 파일 자체에 대한 것이며 (예, Linux에서 수행 할 수 있음) R / O 모드에서 다시 마운트됩니다. 물론 이것은 디렉토리에서도 가능합니다.


6

파일에 대한 여러 개의 하드 링크도 만들어야합니다. 일반 사용자가 액세스 할 수없는 다양한 위치에 있어야합니다.

이런 방식으로 채팅 보호 기능을 무시하더라도 데이터는 그대로 유지되므로 응용 프로그램이 찾고있는 위치에서 데이터를 쉽게 복원 할 수 있습니다.


11
하드 링크는 파일 내용을 보호하지 않습니다.
200_success

그러나 원래 질문 인 DELETION으로부터 추가 보호 기능을 제공합니다.
바베큐

2
@barbecue 응용 프로그램이 찾는 이름으로 파일의 연결이 해제 된 경우 파일의 내용이 다른 이름으로 존재하는지는 중요하지 않습니다. 예상 이름을 가진 파일을 찾으려면 파일이 여전히 삭제되었습니다.
CVn

5

다른 사람들이 귀하의 질문에 답변했습니다. @Sven이 의견에서 언급했듯이 질문에 대한 일반적인 해결책은 "파일을 잃어 버리지 않도록 어떻게합니까?" 파일의 백업을 만드는 것입니다. 파일의 사본을 만들어 여러 곳에 저장하십시오. 또한 파일이 매우 중요하고 회사에 백업 서비스를 사용하여 중요한 데이터를 백업하기위한 정책이있는 경우이 파일을 서비스에 포함시킬 수 있습니다.


2
물론 파일이 정기적으로 백업되고 있기 때문에 루트 사용자 권한으로 상자에서 작업하는 사용자에 대한 또 다른 보호 계층을 원했습니다.

5

Linux에서 불변 플래그는 파일 시스템의 일부 유형에서 지원 (같은 기본 것들의 대부분입니다 ext4, xfs, btrfs...)

지원되지 않는 파일 시스템에서 다른 옵션은 파일을 읽기 전용 모드로 바인드 마운트하는 것입니다. 두 단계로 수행해야합니다.

mount --bind file file
mount -o remount,bind,ro file

하지만 부팅 할 때마다 (예 :을 통해) 수행해야 /etc/fstab합니다.


누구든지 umount파일이 다시 쓰기 권한을 갖기를 바랍니다
whoan

3

Kevin의 답변에 대한 의견 에서 Jerry는 다음과 같이 언급합니다.

물론 파일이 정기적으로 백업되고 있기 때문에 루트 사용자 권한으로 상자에서 작업하는 사용자에 대한 또 다른 보호 계층을 원했습니다. –

이 연습은 정말 나쁜 아이디어이기 때문에 변경할 수 없다고 가정합니다.

읽기 전용 장치 사용에 대한 모든 제안은 같은 문제가 있습니다. 필요할 때 합법적으로 변경할 수있는 PITA입니다. SD 카드와 같은 잠금 가능한 드라이브의 경우 변경을 위해 잠금을 해제 할 때 갑자기 취약한 문제가 발생합니다.

대신에 다른 머신을 NFS 서버로 설정하고 중요한 파일이있는 디렉토리를 사용자가 루트가있는 머신에 공유하는 것이 좋습니다. 신뢰할 수없는 사용자가있는 시스템이 수정할 수 없도록 마운트를 읽기 전용으로 공유하십시오. 합법적으로 변경해야 할 경우 NFS 서버에 연결하여 변경할 수 있습니다.

우리는 이것을 웹 서버에 사용하므로 웹 서버를 성공적으로 악용하면 서버가 다시 제공하거나 구성을 변경할 파일을 삽입하거나 변경할 수 없습니다.

이것은 마운트 지점과 관련된 모든 마운트 포인트와 동일한 방식으로 스톨을 무시할 수 있습니다.

  • 보호 된 디렉토리의 사본을 작성하십시오
  • 디렉토리를 마운트 해제하십시오
  • 마운트 대신 사본을 이동하거나, 마운트에 공간이 충분하지 않으면 심볼릭 링크를하십시오.

중요한 파일을 정기적으로 백업하고 원본을 실수로 삭제하지 않도록 보호하는 것이 "정말로 정말 나쁜 생각"인 이유는 무엇입니까? OP의 원래 질문과 귀하가 언급 한 답변에 대한 OP의 의견에서 우려는 악의적 인 활동이 아니라 우연한 / 무능한 활동이라는 것이 분명합니다.
Craig

1
@Craig : 특히 중요한 파일을 엉망으로 만드는 것을 신뢰하지 않는 경우 루트를 가진 많은 사용자를 갖는 것은 나쁜 생각입니다.
Joe H.

아 ... 물론입니다. :-) 그러나 그것은 OP 질문의 핵심이 아니 었습니다. 영업 이익이 있음을 주장 하다 실수로 파일을 삭제로부터 보호해야한다 루트 액세스 권한이있는 사용자가.
Craig

@Craig : 그것은 질문의 핵심하지 않을 수도 있습니다,하지만 그것은 이다 문제 (XY 문제?)의 핵심 ...하지만 그들은 setuid를 사용을 할 수 있다면, 그래서 나는 그들이 루트로 무슨 일을하는지 아무 생각이 없다 및 / 또는 제한된 sudo 권한. Jerry는 그가 의도하지 않은 제거 ( "무엇이든지 삭제되지 않도록해야합니다")로부터 보호하려고 노력하고 있다는 것을 언급 한 바에 따라이 질문을 다시 읽어야합니다. (내 응답을 유발 한) 참조하십시오.
Joe H.


2

설계 상 읽기 전용 인 ISO 9660 이미지를 작성하지 않는 이유는 무엇입니까?

ISO 이미지를 마운트하면 CD-ROM처럼 보이지만 하드 드라이브의 성능에 따라 마운트 된 이미지의 파일은 실제 CD-ROM의 파일처럼 삭제되지 않습니다.

민감한 파일을 CD에 굽고 CD-ROM에서 실행한다는 아이디어는 흥미 롭습니다. 파일에서 불변 비트를 설정하는 것만으로는 충분하지 않다고 가정합니다.

성능을 포함하여 실제 CD에서 CD를 실행하면 부정적인 문제가 발생할 수 있습니다 (CD-ROM 드라이브는 하드 드라이브 나 SSD보다 훨씬 느립니다). CD-ROM이 잘 알려진 개인에 의해 제거되어 액세스해야하는 다른 디스크로 교체 될 가능성이 있습니다. 악의적 인 당사자가 디스크를 꺼내서 전자 레인지 (또는 휴지통)에 던져서 파일을 "삭제"할 가능성이 있습니다. 한 파일에 대한 전용 하드웨어 CD-ROM 드라이브와 다른 요인이 있어야하는 불편 함이 있습니다.

그러나 OP는 주요한 의도는 악의적 인 행위가 아닌 실수로 인한 삭제를 방지하고 사고가 발생할 경우 해당 파일을 백업하고 복구 할 수 있다는 점을 분명히 밝혔지만 파일이 실수로 삭제되었습니다.

탑재 된 ISO 이미지에서 파일을 실행하면 요구 사항을 충족하는 것 같습니다.


1
루트는 이미지를 직접 조작하여 파일을 계속 삭제할 수 있습니다. 마운트되는 정상적인 파일 일뿐입니다.
Thorbjørn Ravn Andersen

@ ThatbjørnRavnAndersen 어떻게 그렇게? 설계 상 ISO 9660은 변경할 수 없습니다. 변경을 한 당사자는 전체 ISO 파일을 삭제하고 교체해야합니다. 그들이 그렇게 할 수 없었습니다. 그러나 그들은 엄청난 지식 없이도 파일 하나를 가져 와서 외과 적으로 삭제할 수 없었습니다. 드라이브에서 실제 CD-ROM을 제거하고 쓰레기 수거통에 버리는 것이 훨씬 쉽습니다. ;-)
Craig

이미지 파일을 0으로 덮어 쓰면됩니다.
Thorbjørn Ravn Andersen 님이

@ ThorbjørnRavnAndersen 나는 그 점을 충분히 쉽게 인정할 것이다. 주의 할 점은 의도적으로 이미지를 분리하고 덮어 쓰는 것입니다. 철저한 perp는 shred그 시점에서 그것을 할 것 입니다. 그러나 머신에 대한 물리적 액세스를 거부하지 않는 한 ISO 파일을 마운트 해제하고 덮어 쓰는 것보다 드라이브에서 물리적 CD를 꺼내서 쓰레기 수거통에 넣는 것이 더 쉬운 것처럼 보입니다. 그리고 OP는 중요한 파일이 정기적으로 백업되므로 악의적 인 장난이 아닌 우발적 인 손상에 대한 추가 조치 일뿐이라고 발표했습니다.
Craig

변경 불가능한 경우에도 ISO9660 이미지를 변경하는 방법을 지적했습니다. 내 요점은 비트가 전혀 쓰기 가능하면 루트가 쓸 수 있다는 것입니다.
Thorbjørn Ravn Andersen '12
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.