'rm'명령에 대한 비밀번호를 설정하는 방법


29

내 친구는 터미널을 사용하여 파일을 계속 삭제합니다. rm명령 암호를 만드는 방법을 설명하여 도와주세요 .


50
"친구"가 먼저 액세스하지 못하도록 사용자 계정을 비밀번호로 보호하려고합니다.
Andrea Lazzarotto

14
실제로 시스템 작동 방식을 배우고 그 기능을 사용해야합니다.
AlexP

13
친구가 컴퓨터를 보호하지 않은 채로 돌려서 컴퓨터를 조여 "레슨을 가르치려고"하고있을 가능성이 있습니다. 계정을 보호하고 게스트 액세스를 허용하지 않거나 권한을 줄인 게스트 액세스를 제공하여 해당 레슨을 학습하십시오.
Ken Williams

4
unlink명령에 대해서도 기억하십시오 . 또한 대한 mv명령, 그것으로 할 수 있습니다 효율적으로 덮어 쓰기 파일 때문이다. 또한 ...
코스

17
적을 필요로하는 이런 친구들과 함께?
kasperd

답변:


46

패키지 자체를 설치하거나 파일을 제거하거나 암호를 천 번 입력하거나 잠재적으로 방해하는 rm것과 같은 많은 코드 해킹이 없다면 명령 자체 에 이러한 암호를 설정하는 쉬운 방법이 없습니다. apt-get사람들에게 명령에 액세스 할 (자신의 파일을 삭제, 당신처럼)이 필요합니다. 여러 사용자 계정과 여러 액세스 권한 세트를 갖고 홈 디렉토리와 같은 다른 데이터 섹션에 대한 액세스를 제한하여 액세스 할 수 없도록 할 수 있습니다.

(다른 옵션은 Videonauth 가 게시 한 다른 답변에 자세히 설명 된대로 각 사용자의 개별 사용자 계정과 액세스 제어 목록입니다. )

핵심 문제는 다음과 같습니다. 친구가 시스템을 사용하도록합니다. 여기에는 수많은 보안 관련 사항 이 있습니다. "박스에 물리적으로 액세스 할 수있는 사람은 시스템을 제어하고 모든 작업을 수행 할 수 있습니다"라는 개념은 IT 보안 만트라이므로 물리적 시스템 액세스를 '공유'하지 않습니다. 신뢰할 수있는 공인 담당자를 제외하고.


유일한 진정으로 이 작업을 수행하는 온건 한 방법은 친구에 대한 액세스 권한을 부여하지 않는 것입니다 당신의 당신이 정말로만큼의 파일에 대해 걱정하지 마십시오, 컴퓨터를, 그리고 그들에게 사용할 수있는 '전용'고객 '시스템'을 제공합니다. 파일을 안전하게 유지하는 가장 안전한 방법입니다.


물론, 이것이 옵션이 아니라면, 가장 안전한 유일한 옵션은 여러 사용자 계정을 각 사용자마다 하나씩 다른 홈 폴더로 구성하고 자신의 홈 디렉토리에 액세스하거나 다른 사용자의 집에 액세스하는 것을 허용하지 않는 것입니다 디렉토리. 그런 다음 원하지 않는 모든 항목을 홈 디렉토리에 보관하고 sudo액세스 권한, root비밀번호를 제공하거나 비밀번호를 공유 하지 마십시오 .

이것은 당신이 이것을하는 방법입니다 :

내 이름이 "Foo"이고 친구 인 "Bar"사용자가 내 시스템을 사용하지만 파일에 액세스하지 않기를 원합니다. 첫 번째 단계는 내 홈 디렉토리에 대한 본인 이외의 사람에 대한 액세스를 거부하는 것입니다. 이는 다른 사용자가 파일을 삭제 하지 못하도록하고, 다른 사용자가 홈 디렉토리에서 스누핑하지 않고 홈 디렉토리에있는 유형의 항목을 보지 못하게하기위한 것입니다.

chmod 750 /home/Foo

두 번째 단계는 "Bar"에 대한 사용자 계정을 만드는 것입니다 (아래에 괄호 안에있는 내용은 입력하지 말고 정보 목적으로 만 사용하십시오). 이런 식으로, 우리는 자신의 별도의 액세스 권한 집합을 가질 수 있습니다.

sudo adduser --create-home --user-group --shell /bin/bash Bar
sudo passwd Bar
(set a temporary password - you will not see characters as you type though)

세 번째 단계는 아무도하거나 자신의 파일로 꺼낼 수 있도록 다음도 자신의 홈 디렉토리를 제한하는 것입니다. 이것은 단지 일을 평등하게 만들고 있습니다.

sudo chmod 750 /home/Bar

손을 씻고 잘 헹군 다음 시스템 사용자가 많더라도이 단계를 반복하십시오. 파일에 액세스 할 수 없으며 관리자 권한을 부여 sudo하지 않기 때문에 파일을 삭제하지 않고 파일을 삭제할 수 없습니다. 허용하지 않기 때문에 파일을 삭제할 수 없습니다. 물건을 만지십시오. 그리고 수퍼 유저가되지 않으면 파일을 볼 수 없습니다.


항상 다음 사항을 기억하십시오 : 누군가에게 머신에 대한 물리적 인 액세스 권한을 부여하거나 일반적으로 액세스하면 파일과 데이터가 위험에 처하게됩니다. 이것은 IT 보안 분야에서 널리 수용되고 있으며 계속해서 사실입니다. 컴퓨터에 친구 액세스를주는 것은 항상 두 데이터가 위험에 노출 주변에 엉망 그들에게 자신의 시스템을 제공, 또는 단지에 대한 액세스를 제공하지 않는 것입니다 귀하의 기계를.


디스크 암호화에 대한 참고 사항

디스크 암호화는 타사로부터 데이터를 보호하는 데 효과적이지만 제한이 있습니다.

  1. 시스템이 켜져 있으면 디스크가 이미 해독 된 상태이므로 위험에 노출됩니다.
  2. 일부 시스템은 디스크 암호화 방식 을 깨뜨 렸습니다 . 예를 들어, 일부 Acer 시스템은 암호를 사용하여 암호화 / 암호 해독 만 승인하고 하드 코드 된 암호를 사용하거나 쉽게 해독되는 취약한 암호화를 사용합니다.
  3. 항상 '키'로 침입하거나 시스템을 끈 직후 나 RAM 데이터가 '사라'거나 악화되기 전에 메모리에서 키를 추출하는 방법이 있습니다. (나는 이것에 대해 깊이 가지 않겠지 만 이러한 위험 존재한다).
  4. 시스템의 암호화 여부에 관계없이 시스템에 대한 물리적 액세스는 항상 데이터를 위험에 노출시킵니다. 잠재적으로 시스템에 대한 전체 액세스 권한을 부여하지 않으려는 사람에게 물리적 액세스 (또는 원격 네트워크 액세스)를 제공하지 마십시오.

디스크 암호화는 이러한 문제를 해결하지 못하지만, 위협 행위자에게는 두통을 더 가중시킵니다. 나쁜 사람은 암호화되어 있으면 포기하거나 고문을 당할 수도 있습니다 (대기적인 XKCD 보안 코믹 스트립 ).

따라서 시스템이 암호화되어 있지만 다른 사용자가 시스템을 사용하도록 허용하는 경우 암호를 해독 할 암호가 있거나 랩톱의 암호를 해독하여 SSH에 들어가거나 물리적으로 액세스 할 수 있습니다. 이 두 경우 모두 나쁘다.

즉, 시스템이 암호화되지 않은 경우이 섹션은 관련이 없습니다.


내 노트북에는 암호화 된 하드 드라이브가 있습니다. 다른 사람의 액세스를 허용하는 것이 여전히 위험합니까?
Tim

2
@Tim 예, 시스템 전원이 켜져 있고 암호가 해독 된 경우. 또한 꺼져있는 경우에도 여전히 RAM에 저장된 암호 해독 키를 찾는 올바른 기술, 시간 및 헌신을 통해 가능합니다. 디스크 암호화는 100 % 보호 기능이 아닙니다. 그 주변에는 여러 가지 방법이 있습니다. "나쁜 사람이 실제로 많은 시간과 노력을들이 고자 하는가?" OP의 질문으로 판단하면 시스템이 켜져 있고 (완전히 또는 부분적으로) 암호화되지 않으므로 삭제 위험이 있습니다.
토마스 워드

3
@Tim Thomas의 답변에 추가하기 위해 일부 랩탑은 디스크 암호화 구현을 손상 시켰습니다 (하드웨어 FDE에 의존하는 경우). AFAIR Acer 랩탑은 실제로 암호화에 암호를 사용하지 않으며, 하드 코드 된 암호로 암호화 / 암호 해독을 승인 할 때만 암호를 사용합니다.
gronostaj

신뢰할 수없는 사람이 암호화 된 시스템인지 여부에 관계없이 데이터에 액세스 할 경우 항상 위험에 노출됩니다
Sergiy Kolodyazhnyy

1
@LightnessRacesinOrbit apt-get가 실행dpkg 되어 자주 사용하는 스크립트실행 합니다 rm. 내 Xenial 상자에서 cd /var/lib/dpkg/info; grep -P '\brm\b' *inst344 줄을 출력합니다 .이 중 333 rm설치 스크립트 에서 명령 의 실제 사용과 같습니다 . grep -P '\brm\b' *rm제거 스크립트 (패키지 파일이 아닌 구성 파일을 삭제)에 더 많이 표시됩니다.
Eliah Kagan

19

파일을 사용하지 않고 쉽게 삭제하는 방법이rm 있기 때문에 이것은 실제로 명령 에 관한 것이 아닙니다 . 문제가 친구가 의도하지 않게 rm명령을 잘못 사용하는 경우 해당 명령의 사용을 구체적으로 제한하거나 다른 방식으로 작동하게하는 솔루션이 도움이 될 수 있습니다. 반대로, 문제가 친구가 의도하지 않은 방식으로 데이터를 의도적으로 취급하고있는 경우 문제는 실제 보안 조치를 구현해야 하며 rm명령 자체 (또는 개별 명령 세트)에 중점을 둔 솔루션은 필요 하지 않습니다. 당신을 안전하게 지켜줄 것입니다.

액세스를 제어하거나 정직한 실수를 방지해야합니까?

친구가 파일을 삭제하지 않기를 원한다고 가정하면 두 가지 가능성이 있습니다.

  1. 그들은 의도적으로 그것을 할 수 있습니다. 이 시나리오에서 친구는 의도적으로 파일을 삭제하고 있으며 컴퓨터를 사용할 때 데이터를 어떻게 취급하는지에 대한 사용자의 희망을 따르 려고 한다고 믿을 수도 없습니다 . Thomas Ward가 자세히 설명했듯이이 문제에 대한 유일한 해결책 은 실제 효과적인 보안 조치를 사용하는 것 입니다. 종종 가장 좋은 방법은 컴퓨터를 사용하지 못하게하는 것입니다. 그러나 사용자가 자신의 사용자 계정을 사용하게하면 약간의 보호가 제공 될 수 있습니다.

  2. 그들은 실수로 그것을 할 수 있습니다. 이 시나리오에서 친구는 사고가 발생하기 쉬우 며 rm원치 않는 명령을 계속 실행 합니다. 그들은 당신과 당신의 데이터를 존중하기를 원하지만 실제로 잘못된 명령을 계속 실행하거나 잘못된 파일을 삭제하거나 그와 비슷한 것을하기 때문에 실제로 그렇게하지 않습니다. 이런 일이 일어나고 있다고 믿는 것이 좋지만, 데이터를 중지하도록 지시 한 후에 데이터를 계속 삭제하는 사람들이 악의없이 운영하고 있다고 가정하지 않도록주의해야합니다.

    또한 의도가 좋더라도 별도의 사용자 계정을 제공하는 것은 컴퓨터를 사용하지 못하게하는 것 외에도 파일을 삭제하지 못하게하는 가장 확실한 방법입니다.

상황이 실제로 # 2 인 경우-친구가 파일을 삭제 하려고 하지 않고 실수로 파일을 삭제하지 않는 데 도움이 필요 하며 실수로 파일을 삭제 하는 유일한 방법은 실수로 작은 명령을 잘못 사용하는 것입니다 (예 rm:) 그들이 올바르게 사용하는 데 특히 문제 가 있다고 Videonauth의 답변 기술이 유용 할 수 있습니다. 하지만 당신은 때문에 그들이, 보안 조치 아니라는 것을 이해해야합니다 명령은 단지 중 하나입니다 많은 파일 삭제에 쉬운 방법 . 자세한 내용은 아래를 참조하십시오.rm

"내 상황이 기본적으로 내 컴퓨터를 사용하는 다른 사람들이 아닌 다른 컴퓨터를 rm잘못 사용하는 것과 같은 것 입니까?"

대답이 아니요 이면 정보 보안의 문제이므로 친구가 사용자 계정을 사용하지 못하게해야합니다. 대답이 yes 이면 잘못 사용하는 경우와 동일한 방법을 사용할 수 있습니다rm .

  • 교육. 친구들은 자신이하는 일과 그것을 피하는 방법을 알아야합니다.
  • 인터페이스 변경. 파일을 삭제하는 실제 기능 (별도의 사용자 계정이 필요함)을 제거 하지 않으면 추가 조치없이 파일 자체 만 실행 하여 파일 을 실수로 삭제 하기가 더 어려워 질 수 있습니다 . Videonauth의 답변이에 대한 한 가지 접근 방식을 제공합니다. 이 답변에서 나는 다른 것을 제시한다.rm filefile

그러나 친구는 아무것도 잘못을하려고하지 않더라도, 당신은해야 여전히 그들의 자신의 별도의 사용자 계정을 사용하는 것을 고려하십시오 . 이렇게하면 여전히 문제가 해결됩니다. 의도적 인 파괴로부터 데이터를 보호하는 것과 동일한 보안 조치가 의도하지 않은 파괴로부터 데이터를 보호합니다. 악의적 인 의도가 없어도 누군가가 원하지 않는 일을 계속하면 그 일을 삼가라고 믿을 수 없습니다.

만들기 rm삭제 캔 도움말 전에 확인하는 것은 몇 가지 실수를 방지 할 수 있습니다.

사람들이 실수로 파일을 삭제 하는 것을 피하기 위해 실제로 실행 되는 쉘 별명rm만들 수 있습니다 . 플래그를 전달하면 각 파일을 삭제하기 전에 사용자에게 프롬프트를 표시합니다 (참조 ).rmrm -i-irmman rm

당신은 추가하여 (사용자 계정)이 작업을 수행 할 수있는 alias rm='rm -i'당신에 .bash_aliases또는 .bashrc파일. 자세한 내용은 이 질문질문 을 참조하십시오. 이것은 새로 열린 bash 쉘에 적용됩니다.

이것은 실제 보안을 제공 하지 않으며 실수를 예방하는데도 완벽한 이유는 아닙니다.

  • 메시지가 표시되면 삭제를 진행하도록 선택할 수 있습니다.
  • 별명을 실행 /bin/rm하거나 별명을 제거하는 등 여러 가지 방법으로 별명을 무시할 수 있습니다 ( unalias rm).
  • 별칭 확장이 발생하지 않는 상황이 많으며 이러한 상황 rm에서는 실행되지 않습니다 -i.
  • 그들은 필요하지 않은 기술을 사용하여 파일을 삭제할 수 있습니다 rm( Videonauth의 접근 방식마찬가지로 -아래 참조).
  • 파일을 덮어 쓰거나 내용을 변경하는 등 Videonauth의 접근 방식과 같이 파일을 삭제하지 않고도 데이터를 손상시킬 수 있습니다.

그러나 실제 보안이 필요하지 않은 경우 (위 참조)이 방법이 필요할 수 있습니다. 친구가 시스템 제공 rm명령 을 사용하지 못하게하는 방법과 비교하여 :

  • 앨리어싱 rm을하는 rm -i실수를 방지에 덜 효과적이다 - 그들은 파일을 제거하기 위해 다른 기술을 사용하여로 이동 될 때까지. 그 시점에서 rm그들이 잘못 사용하려고 시도하지 않더라도 그것들을 사용 하지 못하게하는 것은 완전히 효과가 없을 것 unlink입니다.

  • 다른 한편으로, 별칭 확장은 쉘의 대략적인 대화식 사용과 같은 일부 상황에서만 발생하기 때문에 친구는 실제로 프롬프트가 표시되지 않을 때 프롬프트가 표시 될 것이라고 생각할 수 있습니다 (명령이 있기 때문에 예를 들어, 또는 다른 쉘에서 발행 된 스크립트). Videonauth의 방법 에는이 문제가 없으므로이 방법 의 객관적인 이점입니다 alias rm='rm -i'.

  • 스크립트를 실행할 때 별칭을 사용하도록 의도적으로 작성하지 않으면 별칭이 확장되지 않습니다. 앨리어싱 것을이 방법 rm으로하면 rm -i다 치신 것은 매우 어렵다. 이것은의 객관적인 장점입니다 alias rm='rm -i'.

rm 다른 완전히 평범한 프로그램으로는 할 수없는 일을 할 수 없습니다.

에 대한 특별한 것은 없습니다 rm. 파일을 제거하는 편리하고 자체 문서화 된 방법이므로 파일에 대한 액세스를 제한하면 파일에 의존하는 수많은 스크립트가 손상 될 위험이 있습니다. 그러나 파일을 삭제하는 유일한 방법과는 거리가 멀며 일반적인 프로그램 일뿐입니다.

일부 명령은 제한된 ( 루트가 아닌 ) 사용자가 실행하지 않고 수행 할 수없는 일부 작업을 수행합니다. 예를 들어, sudo허용 여부를 확인한 후 다른 사용자로 프로그램을 실행할 수 있습니다. passwd사용자 비밀번호가 저장된 데이터베이스를 편집하지만 자신의 비밀번호 만 변경할 수 있습니다 (루트가 아닌 경우 다른 사람의 비밀번호를 변경할 수 있음).

/usr/bin/sudo그리고 /usr/bin/passwd그들이 가지고 있기 때문에 그렇게 할 수 setuid 비트의 표시로 나타나는 세트를 s가장 왼쪽 열에 표시가 실행할 때 ls -l:

ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root  60272 Feb 18  2016 /bin/rm
-rwsr-xr-x 1 root root  54256 Mar 29  2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo

공지 사항 /bin/rm없음이 s그 권한은 다음과 같습니다 -rwxr-xr-x, 동안 /usr/bin/passwd/usr/bin/so-rwsr-xr-x대신. 이것은 있도록 상관없이 실행하는 사람들하게 passwd또는 sudo루트가 실행 파일의 소유자이기 때문에, 실제로, 루트 사용자로 실행합니다. (setgid 비트도 있으며, 설정되면 호출자가 아닌 그룹 소유자의 그룹 ID로 실행 파일이 실행됩니다.)

아직 발견 (또는 발견되었지만 아직 패치되지 않은)되지 않은 보안 취약점을 제외 sudo하고 passwd그들이 일을 할 만 할 수 있도록하는 유틸리티는 매우 신중하게 작성되어 있기 때문에 안전은 발신자가 허용되어야한다 할 것.

/bin/rm이런 식으로 작동하지 않습니다. 필요하지 않기 때문에 setuid가 아닙니다. 디렉토리 권한 (및 때때로 파일 권한 )은 사용자가 삭제할 수있는 파일을 제어하며,이를 수행하기 위해 루트가 될 필요는 없습니다. 완벽하게 명확하게하기 위해 setuid 비트를 설정하지 마십시오rm . 보안 문제는 그 이후로 누가 실행하든 rm루트가 그것을 실행 한 것처럼 비참 할 것입니다 ! (같은 유틸리티 sudopasswd누가 정말 그들을 실행의 확인 뭔가를 확인는 그 일을하기 전에 허용되지 않는다; rm않는 그런 일은.)

setuid (또는 setgid) 비트가 실행 파일에 설정되어 있는지 확인하면 실행할 수있는 사람을 제한하여 보안을 향상시킬 수 있는지 여부를 알 수 있습니다. setuid (또는 setgid)가 아닌 실행 파일은 특별한 상태가 아니며 누구나 복사 및 복사를 실행하거나 다른 컴퓨터에서 자신의 복사본을 가져 오거나 동일한 작업을 수행하는 스크립트 또는 프로그램을 작성하거나 사용할 수 있습니다. 그것을 할 다른 프로그램.

없이 파일 삭제 rm

rmUbuntu에서 파일을 삭제하지 않는 확실한 방법 은 그래픽 파일 브라우저 (Unity 또는 GNOME Shell을 사용하는 경우 노틸러스)에서 해당 위치로 이동하여 파일을 삭제하는 것입니다. 를 사용하지 않고 터미널에서 파일을 삭제하는 데 사용할 수있는 명령이 많이 있습니다 rm.

예를 들어, foo.txt현재 디렉토리에서 호출 된 파일을 제거하기 위해 Ubuntu에서 기본적으로 작동하며에 액세스 할 필요가없는 다음 명령 rm이이를 수행합니다. (확실히, 삭제 후 표준 시스템 유틸리티 만 설치 한 16.04 최소 시스템 에서 테스트했습니다 /bin/rm.)

  • unlink foo.txt
  • busybox rm foo.txt
  • perl -e 'unlink("foo.txt")'
  • python3 -c 'import os; os.remove("foo.txt")'( 이전 릴리스 python대신 python3)

물론이 목록은 거의 완성되지 않았습니다. 이러한 명령의 전체 목록은 불가능합니다. 파일 삭제 방지는 별도의 사용자 계정과 파일 및 디렉토리 권한을 얻기 위해 존재하는 것 중 하나입니다. 그들은 그것을 막기 위해 아주 잘 작동합니다. 반대로 rm명령을 변경하거나 (암호를 요구하거나 다른 방식으로) 접근을 제한하여 rm전혀 막을 수는 없습니다.


2
실제로 사용하려면 GNU rm-I옵션이 마음에 듭니다 . 4 개 이상의 파일을 삭제하거나 재귀 삭제를 요청하는 메시지 만 표시합니다. 당신은 항상 사용하는 습관을들이는 것은 그래서 -f, \rm피할 별칭 확장, 또는 입력을 y읽지 않고. 그러나 그것은 당신이 의도하기 전에 return을 누르거나 glob가 많은 파일과 일치하는 나쁜 오타를 피할 수 있습니다.
Peter Cordes 2016

2
파일을 연결 해제하는 또 다른 흥미로운 방법은 mv foo.txt /tmp/.gone다음과 같습니다 /tmp. 또는 mv여러 파일의 이름을 모두 같은 이름으로 바꾸려면 마지막 파일 만 남습니다. 또는 이름이 불명확 한 파일 이름을 바꾸어 파일을 숨길 수도 있습니다. 이 답변의 첫 번째 부분에서 지적했듯이, 무능이 아닌 악의에 대항하여 방어하려는 경우 사람들을 계정에서 차단해야합니다.
Peter Cordes

16

/bin/rm다음 행을 통해 명령 의 권한을 변경하여 sudo 액세스없이 명령을 실행할 수 없도록합니다.

sudo chmod 750 /bin/rm

이것은 특히 rm시스템에서 제공 한 명령 을 사용하지 못하게합니다 . 다른 방법으로 파일을 삭제하지 못하게하는 것은 아닙니다.

rmdir디렉토리를 삭제하는 일반적인 방법 인 명령 을 사용하지 못하게하려면 실행 파일 경로에 동일한 방식으로 권한을 설정할 수 있습니다.

sudo chmod 750 /bin/rmdir

또한 sudo 권한을 가진이 명령 만 사용할 수 있습니다.

그것은 다른 문제는 사용을 발생처럼하지 당신이 경우 다시 변경하기 755위해chmod


@muru가 지적했듯이 위의 내용은 매우 조잡한 솔루션이며 루트 계정 에서 실행되지 않는 시스템 서비스를 손상시킬 수도 있습니다. 그러므로 내가 같은 아마도 훨씬 더 안전 할 ACL (액세스 제어 목록)을 사용하여 여기에 다른 옵션을 추가 ( 뿐만 아니라으로 읽을 좋은 및 ACL은 일반적으로 요즘 우분투 시스템에 설치되어 있기 때문에 당신은 가능 부분을 건너 뛸 수 있습니다) :

차단하려는 사용자에 대해서만 위와 동일한 작업을 수행하면

sudo setfacl -m u:<user-name>:- /bin/rm /bin/rmdir

<user-name>파일 사용을 방지하려는 실제 사용자 이름으로 바꾸십시오 .

에서와 같이 chmod사용하여 setfacl -m실행에서 특정 사용자를 방지 rm하고 rmdir만 시스템이 제공하는 명령에 적용됩니다. 노틸러스에서 파일 및 폴더를 삭제하거나 다른 터미널 명령을 사용하여 파일 및 폴더를 삭제하지는 않습니다.

설명:

  • -m플래그는 파일 ACL을 수정하는 것을 의미합니다.
  • 변경의 첫 번째 부분은 u사용자를 나타냅니다. u사용자, g그룹 및 o기타 모든 사용자에 대해 다음 값 을 가질 수 있습니다.
  • 중간 부분 <user-name>은 변경하려는 내용에 따라 실제 사용자 이름 또는 그룹 이름을 끌 수 있습니다. 전체 변경 사항을 설정하려면 비워 두십시오.
  • 세 번째 부분에는 설정하려는 권한 종류가 있습니다. 여기 예제에서는 권한을 전혀 설정하지 않기 위해 읽기 권한, 쓰기 권한 및 실행에 대한 -다음 문자 r를 포함 할 수 있습니다 .wx

4
다른 사람에 대한 실행 권한을 제거하는 것보다 ACL을 사용하는 것이 좋습니다. 루트로 실행되지 않는 시스템 서비스는 이제 장애가 있습니다.
muru December

2
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdirIIRC. 다음과 같이 ACL을 테스트 할 수 있습니다getfacl /bin/rm /bin/rmdir
muru

2
이와 같은 ACL의 유일한 단점은 이러한 장기를 유지하는 것이 사악하고 까다 롭다는 것입니다. 시스템을 사용 하는 각 사람에 대해 시스템에 개별 사용자가없는 경우 유지 관리 할 수 ​​없습니다 . 그렇지 않으면 좋은 생각입니다.
토마스 워드

4
@DavidFoerster 네. 없이 파일을 효과적으로 삭제하는 방법에는 여러 가지가 있습니다 rm. Videonauth가 제공 한 솔루션은 사고가 발생하기 쉬운 사용자가 물건 삭제를 중지하는 데 도움이되는 가능한 방법이지만 실제 보안을 제공하지는 않습니다 (OP의 친구가 의도적으로 OP의 희망을 파괴하려고 시도 하지 않으면 괜찮을 수 있음 ) . Videonauth :이 게시물을 편집하여 사람들이 실제로 rm명령을 수행 할 필요가 없기 때문에 파일을 삭제하지 못하게한다는 사실을 분명히 밝힙니다 . (나는 당신이 그렇게 말하고 싶지 않다면 그것을 직접 편집하는 것을 자제하고 있습니다.)
Eliah Kagan

1
Perl, Python 및 시스템의 모든 컴파일러를 사용하면 다른 사용자도 파일을 삭제할 수 있습니다. 사람들이 파일을 삭제하지 못하게하려면 rm명령 에 대한 권한을 변경하는 것 이상이 필요합니다 .
Jonathan Leffler

8

이것은 매우 간단한 대답이며 암호를 제공하지 않고 rm 명령을 사용하여 누군가를 자연스럽게 중지시킵니다. 안전한 솔루션이 아니며 다른 답변의 대체 제안을 암시해야합니다.

그러나 alias를 사용하여 rm 명령의 작동 방식을 변경할 수 있습니다. 시험:

alias rm="sudo -l >/dev/null && rm"

이것은 rm 명령을 입력 할 때 sudo -l 명령을 실행하는 것입니다. 이 명령은 사용자가 비밀번호를 입력하도록합니다. 그들이 그것을 올바르게 얻는다면, 그것은 그들의 특권을 나열하고 (이 출력을 버립니다) 상태 0으로 빠져 나옵니다. 잘못되면 오류가 있습니다.

그런 다음 sudo 명령 뒤에 "&&"를 붙여 다음 명령을 종료합니다 (이 경우 이전 명령이 상태 0으로 종료 된 경우에만 "rm"). 즉, 암호가 올바른 것입니다.

이것을 영구적으로 만들려면에 alias 명령을 포함 시키십시오 ~/.bashrc.

이것은 매우 쉽게 물리 칠 수 있습니다 (예를 들어, 그들은 단순히 입력 할 수 /bin/rm있습니다).


5

때때로 그것은 우리의 친구가 아니라 우리 자신의 최악의 적입니다

rm요청한 OP와 같이 암호로 보호하는 스크립트를 작성 했지만 실수로 삭제하지 않도록 편집을했습니다.

  • /
  • /집
  • /큰 상자

편집 : 2017 년 3 월 5 일-터미널에서 실행 중인지 확인하는 방법을 변경하십시오.


스크립트 작성

gksu gedit /usr/local/bin/rm다음 줄에서 사용 하고 복사 하십시오 .

#!/bin/bash

tty -s;
if [ "0" == "$?" ]; then Terminal="Y"; else Terminal="N"; fi

if [ $Terminal == "Y" ] ; then
    # Running from terminal don't allow delete of / or /toplevel directory even if sudo
    for i in ${@:1}
    do
        # Skip options -i -r -v -d 
        if [[ ${i:0:1} != "-" ]] ; then
            # if parameter doesn't begin with '-' it's file or directory, so get real path.
            fullname=$(realpath "$i" 2>&1) # No error messages if file doens't exist
            # We must have at least two `/` in the full path
            levels=$(echo "$fullname" | tr -cd '/' | wc -c)
            if (( $levels == 1 )); then # Test for 1, will be zero when file doesn't exist.
                echo "Attempting to remove top level directory '$fullname'"
                echo "Use 'sudo /bin/rm $@' instead."
                exit 1 # error
            fi
        fi
    done
fi


if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo rm ..." is ok)
  if [ $Terminal == "Y" ] ; then
  # Only running from a terminal needs password (ie not cron)

    # log rm usage to /var/log/syslog
    PARENT_COMMAND="$(ps -o comm= $PPID)"   
    logger "$PARENT_COMMAND"" - rm command was used on file: ""$fullname"

    # Get password
    Password=$(zenity --password --title="Password for rm")
    encryptPassword=$(echo -n "$Password" | md5sum)

echo "md5sum: $encryptPassword" # Comment out after viewing one time and updating line below.

    if [[ "$encryptPassword" != "d2c30dc65e59558c852ea30b7338abbe  -" ]]; then
        echo "Invalid password!"
        exit 1
    fi
  fi # non-terminals can't enter password.
fi # root doesn't need to enter password.

# Call REAL rm command with parameters passed to this wrapper sript
/bin/rm "$@"

exit 0

비밀번호 "WE2U"를 원하는 것으로 변경하고 파일을 저장하십시오.

rm스크립트를 실행 가능으로 표시

다음을 rm사용하여 새 스크립트를 실행 파일로 플래그 지정하십시오 .

sudo chmod +x /usr/local/bin/rm

작동 원리

rm 비밀번호

비밀번호가 WE2U아닌 경우, 처음 스크립트를 실행할 때 "유효하지 않은 비밀번호"가 표시되고 입력 한 비밀번호의 암호화 키가 표시됩니다. 이 암호화 키를 터미널에서 스크립트로 복사하여 붙여 넣습니다. 그런 다음 터미널에서 암호화 키를 표시 한 에코로 줄을 주석 처리하십시오.

경로 /usr/local/bin는 목록에서 /bin명령 보다 높기 때문에 rm호출됩니다. 유효한 암호를 얻은 후에 /bin/rm는 실제 제거를 수행하기 위해 호출 합니다.

Thomas Ward가 다른 답변에서 지적했듯이, sudo apt-get install ...비밀번호를 입력해야 할 경우 비밀번호를 수천 번 요청할 수 있습니다. 스크립트 sudo는 사용 여부를 확인 하고 비밀번호를 묻지 않습니다. 또한 rmGUI 애플리케이션 내에서 호출 된 경우 비밀번호가 필요하지 않습니다.

터미널을 사용하여 수동으로 호출 logger할 때마다 기록하기 위한 스크립트 호출 rm명령 사용법이에 기록됩니다 /var/log/syslog.


1
스크립트에 해시 된 버전의 비밀번호를 포함시켜 비밀번호를 마스킹 한 다음 사용자가 비밀번호를 입력 할 때마다 비밀번호를 해시하고 하드 코딩 된 해시와 비교하여 확인할 수 있습니다.
InitializeSahib

@InitializeSahib 해시 된 비밀번호 지원 (암호화)이 스크립트에 추가되었습니다.
WinEunuuchs2Unix

3

다른 대안은 루트가 아닌 사용자가 액세스 할 수없는 디렉토리에 중요한 파일의 백업 사본을 작성하는 것입니다. 백업 대상에 대한 경로에서 적어도 하나의 디렉토리가 루트 및 모드 700이 소유하고 있는지 확인하기 만하면 자동으로 사용 rsync하거나 unison동기화 할 수 있습니다 . 그러면 모든 파일의 사본 두 개가 생성됩니다. 컴퓨터를 사용하거나 무인 상태로두기 전에 항상 잠 그거나 로그 아웃해야한다는 점을 제외하고는 게스트 사용자 만 사용하는 것이 더 안전합니다.


3
삭제가 전파되는 것을 피하는 방법을 지적하고 싶습니까? 그리고 사용자가 영구적으로 삭제 해야하는 작업을 수행 할 때 영구적으로 사용하도록 설정하고 해제하는 것이 이상적입니다.
ostergaard

@ajostergaard 내 생각은 친구로부터 컴퓨터를 되 찾을 때마다 누락 된 것이 없는지 수동으로 확인하고 그 밖의 것을 복원한다는 것입니다. 그러나 내 자신이 선호하는 도구는 GUI 대화 형 모드에서 동시에 사용되므로 삭제를 쉽게 볼 수 있습니다.
Random832

2

찾고있는 질문에 대한 직접적인 대답은 아니지만 :

친구가 rm명령을 사용하여 파일을 삭제하는 경우 친구가 무능하거나 바보이거나 세션에 로그인하고 무인 상태로 두지 않도록 가르치려고하는 BOFH 지망생입니다. 모든 경우에 해결책은 동일합니다. 세션에 로그인 한 상태로 방치하지 마십시오 .

이는 새 시스템을 업그레이드하거나 얻을 때마다 시스템을 특별히 변경할 필요가 없다는 장점이 있으며, 예상치 못한 방식으로 실패 할 것으로 예상되는 명령에 의존하는 스크립트 및 사용하는 스크립트도 방지합니다.

또한 "친구"가 다음 단계로 넘어 가지 않도록하는 이점도 있습니다. mv간단한 제거가 원하는 것을 수행하지 않는 것을 알 때 파일을 / dev / null로 이동하기로 결정한 경우 명령 을 "암호 보호"하고 싶습니까? 당신이 이와 같은 게임에있을 때 유일한 승리 이동은 재생하지 않는 것입니다.


1

나는 계획 한 것과 비슷한 가능성이 있습니다. 파일 서버에서 사진의 기본 저장소에 쓰기 가능하면 (기술적으로 또는 실수로) 가족의 누군가가 무언가를 삭제하거나 실수로 gui를 끌어서 디렉토리를 이동 시키거나 이름을 바꾸지 않고 편집 된 버전으로 원본을 덮어 씁니다. .

다른 사람이 권한을 쓸 수 없게 만들지 않으면 서 보호 할 수 있다는 것을 깨달았습니다. ZFS는 주기적 스냅 샷을 생성하여 실수로 삭제하거나 덮어 쓰는 작업을 취소 할 수 있습니다. (백업과 달리 스냅 샷은 가볍고 쓰기 중 복사이므로 스토리지 사용량이 증가하지 않습니다.)

ZFS는 FreeBSD에 고유합니다. Linux에는 스냅 샷이있는 btrfs가 있습니다.


0

매우 바보 같은 문제에 대한 매우 바보 같은 해결 방법.

당신은하고 싶지 않은 경우 chmod rm, rmdir또는 mv(위해 mv filename /dev/null) 또는 사용 ACL을, 당신이 암호 아무도 더미 사용자를 만들 수 있지만, 당신은 알고 별칭에 각 명령을 sudo [user]하고 친구들이 모르는 각 명령에 대해 별칭을 . 이렇게하면 친구가 입력 할 때 rm시스템에서 비밀번호를 입력하라는 메시지가 표시되지만 (비밀번호를 잘못 추측하면 실패한 시도가 기록됨) 여전히 입력 rmalias하거나 실제로 파일을 삭제하도록 선택한 모든 항목을 입력 할 수 있습니다.

또는 홈 디렉토리에 액세스 할 수없는 게스트 계정을 만들 수도 있습니다.


당신이 올바른 길을 가고있는 것처럼 들립니다. 당신의 대답은 설정하는 방법 별칭에 정교화에 의해 향상 될 수 sudo [user]dummy user
WinEunuuchs2Unix

0

rm을 암호로 보호 하려면 루트 권한이 필요한 rm에 대한 랩퍼를 작성하고 그렇지 않은 경우 암호를 요청하십시오. (참고 : coreutils 패키지를 업데이트하거나 다시 설치 하면이 래퍼가 사라질 수 있습니다 .) 또한 rm 만 보호하므로 파일을 삭제하는 방법은 여러 가지가 있습니다.


터미널을 열고 루트가됩니다. 그런 다음 sudo mv /bin/rm /bin/rmold이전 rm 을 다른 곳 으로 옮기십시오 .

이제 sudo nano /bin/rm래퍼를 만들기 위해 실행하십시오 .

Nano에 다음을 입력하십시오.

#!/bin/bash
/bin/rmold "$@"
exit "$?"

그런 다음을 누른 상태에서을 CTRL눌러 X종료하십시오. Y메시지가 표시되면을 누른 다음을 눌러 ENTER파일을 저장하십시오.

마지막으로 적절한 권한을 부여해야합니다.

sudo chmod a+x /bin/rm

그리고 당신은 간다.


1
아주 좋은 이유가 없다면, 스크립트 변수는 항상 인용 해야합니다 : $@=> "$@". 여기서 제안하는 것은 원본과 안전의 매우 위험한 버전입니다. ( 무고한 사용자를 보호하기 위해 추가 rm된) 파일이 있으면 어떻게됩니까? foo -i -r *-i
xhienne

@xhienne이 말한 "인용 부호 외에도 $@파일을 삭제하는 많은 방법이 있기 때문에 보안이 전혀 제공되지 않는다는 독자에게 분명히 경고하는 것이 좋습니다. 하나는에 전화하는 rmold것이지만 다른 답변과 의견에서 논의 된 것처럼 여러 가지 다른 방법이 있습니다. (그렇다하더라도,이 방법으로 문제가있을 것이다 rm것입니다 느낌 이없이라고 - 그것은 현재 사용자로 파일을 삭제와 같은을 sudo, 정상 rm! 호출자와 실행 - 그들이 최근 한 경우 만 루트로 그렇게 sudo에드, 그들은 '수상 t는 그들이 경우에도 시스템 파일 삭제 될 수 있습니다 알 알고 변화에 대해).
엘리야 케이건에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.