"chmod -R 777 /"이 왜 파괴적인가?


255

이것은 파일 권한에 대한 정식 질문 이며 777이 "파괴적"인 이유 입니다.

서버 결함에 이미 많은 참조가 있기 때문에이 문제를 해결하는 방법을 묻지 않습니다 (OS 재설치). 왜 파괴적인 일을합니까?

이 명령을 실행하면 운영 체제가 거의 즉시 파괴됩니다. 제한을 제거하면 기존 프로세스에 어떤 영향을 미치는지 잘 모르겠습니다. 예를 들어, 무언가에 대한 읽기 액세스 권한이없고 터미널에서 빠르게 잘못 입력 한 후 갑자기 액세스 할 수있게되었습니다. 왜 Linux가 중단됩니까?


2
이 질문을봤을 때 숨을 쉬었습니다.
Alireza Savand

답변:


344

우선 사소한 용어 nitpick : 권한을 제거chmod 하지 않습니다 . 그것들 이 바뀌 었습니다.


이제 문제의 핵심-이 모드 777는 "누구 든지이 파일을 읽고, 쓰거나 실행할 수 있습니다"라는 의미입니다.- 누구든지 원하는대로 원하는 작업을 수행 할 수있는 권한부여 했습니다.

자, 왜 이것이 나쁜가요?

  1. 모든 사람이 시스템의 모든 파일을 읽거나 수정하게합니다.
    • 암호 보안 작별 키스 (누구든지 섀도 파일을 읽고 암호를 해독 할 수 있지만 왜 귀찮습니까? 암호를 변경하십시오! 훨씬 쉽습니다!).
    • 바이너리 바이너리를위한 보안 키스 (누군가는 언제든지 새로운 login프로그램을 작성할 수 있음).
    • 파일에 작별 인사하기 : 한 명의 사용자가 잘못 지시 rm -r /하면 끝납니다. OS는 그들이 원하는 것을 할 수 있도록 지시 받았다!
  2. 시작하기 전에 파일에 대한 권한을 확인하는 모든 프로그램을 열화했습니다.
    sudo, sendmail및 다른 많은 호스트는 더 이상 시작되지 않습니다. 주요 파일 사용 권한을 검사하고, 원래의 사용 권한이 아닌 것을 확인하고, 오류 메시지를 쫓아냅니다.
    비슷하게 ssh끔찍하게 손상 될 것입니다 (키 파일에는 특정 권한이 있어야합니다. 그렇지 않으면 "안전하지 않은"것이며 기본적으로 SSH는이를 사용하지 않습니다).
  3. setuid / setgid 비트가있는 프로그램에서 setuid / setgid 비트를 지 웠습니다.
    모드 777는 실제로 입니다. 그 앞자리에있는 것들 중 및 비트가 있습니다. setuid / setgid 인 대부분의 프로그램은 특정 권한으로 실행해야하므로 해당 비트 세트가 있습니다. 그들은 지금 부서졌다.0777setuidsetgid
  4. 당신은 깨진 적이 /tmp/var/tmp zero'd있어 그 주요 8 진수의 다른 점은이다 sticky bit-에있는 파일을 보호하는 그 /tmp(그리고 /var/tmp그것들을 소유하지 않는 사람들에 의해 삭제되는가).
    (불행히도)을 수행하여 "정리"하는 잘못 동작하는 스크립트가 많이 있으며 rm -r /tmp/*, 끈적 끈적한 비트를 설정하지 않으면 /tmp 해당 디렉토리의 모든 파일에 작별 인사 를 할 수 있습니다.
    스크래치 파일이 사라지면 잘못 작성된 프로그램이 실제로 화가 날 수 있습니다 ...
  5. 혼란스럽고 /dev /proc비슷한 파일 시스템
    생겼습니다. 이것은 /dev실제 파일 시스템 인 구형 Unix 시스템에서 더 많은 문제 이며, 시스템 mknod변경 사항은 재부팅을 통해 권한이 유지되지만 모든 시스템에서 포함되어있는 파일은로 작성된 특수 파일입니다. 장치 사용 권한을 변경하면 명백한 보안 위험 (모든 사람이 모든 TTY를 읽을 수 있음)에서 명백하지 않은 잠재적 인 커널 패닉 원인에 이르기까지 심각한 문제가 발생할 수 있습니다.
    Credit to @Tonny for pointing out this possibility
  6. 소켓 및 파이프가 파손되거나 다른 문제가 발생할 수 있음 소켓 및 파이프가 완전히 파손되거나 세계적으로 기록 가능한 결과로 악의적 인 주입에 노출 될 수 있습니다.
    Credit to @Tonny for pointing out this possibility
  7. 당신은 당신의 시스템의 모든 파일을 실행했습니다
    사람들이 많은 .자신의 PATH환경 변수 (당신이해야하지!) -이 지금처럼 불쾌한 놀라움을 일으킬 수있는 사람이 편리하게 명령처럼라는 이름의 파일을 드롭 (말할 수있는 makels, 그리고 악성 코드를 실행하는 데 도움이됩니다.
    Credit to @RichHomolka for pointing out this possibility
  8. 일부 시스템에서는 chmodACL (액세스 제어 목록)
    재설정됩니다. 즉, 모든 곳에서 권한을 수정하는 것 외에도 모든 ACL을 다시 작성해야 할 수도 있습니다 (이 명령은 실제적인 예입니다).
    Credit to @JamesYoungman for pointing out this possibility

이미 실행중인 시스템 부분이 계속 실행됩니까? 아마도 한동안은.
그러나 다음에 프로그램을 시작하거나 서비스를 다시 시작하거나 천국을 금지하면 위의 # 2와 # 3이 추악한 머리를 뒤로 젖히기 때문에 상처받은 세계에있는 상자를 다시 부팅하십시오.


1
적어도 일부 시스템 /tmp에서는 재부팅 후 고정됩니다. 다른 많은 것들이 모두 망가진 것 같습니다. 적어도 방금 테스트 한 VM에서는 재부팅으로 /tmp권한이 수정 된 것으로 보입니다 . 시작 스크립트에 어딘가에 무언가가 있어야합니다.
Zoredache

@Zoredache tmpfs일반적으로 사용하는 시스템은 디스크에 / tmp가있는 시스템 (시작 스크립트에 따라 다름)
voretaq7

45
해당 setuid 및 setgid를 지적하면 +1이 제거됩니다. 이것은 매우 파괴적인 측면입니다. 시도 실행 find / -perms -4000 -type f하고 find / -perms -2000 -type f이러한 플래그에 의존하는 다양한 바이너리를 볼 수 있습니다.
Kyle Smith

2
"less foo.txt"와 같은 것을 입력하면 설정된 실행 비트에 관계없이 less.txt라는 파일을 실행하지 않습니다. less.txt 디렉토리가 경로에 있어야하고 "less.txt foo.txt"를 입력해야합니다. 실제로 우발적 인 것은 아닙니다. 쉘 완성을 사용하더라도 덜 멈출 것이며 여전히 .txt를 추가해야합니다. 실행 가능 비트가 설정된 임의의 텍스트 파일을 호출하려면 ./nameoffile.txt가 있어야합니다.
The Real Bill

3
@Deji는 everyone(: 말 그대로 세 진수 권한 자리 그 기준 중 하나를 충족하지 않는 파일을 소유 한 그룹의 사용자, 사용자, 파일을 소유 한 사용자를 포함하여 세트의 조합으로 정의된다 User, GroupOther). 즉 , 시스템에 액세스 할 수있는 모든 사용자입니다 . (이 문맥에서 "액세스"는 쉘 계정이 될 수 있습니다. 이것은 일반적으로 그것을 해결하는 방법이지만 데이터를 디스크에 쓰는 웹 양식 / CGI를 통한 액세스도 포함합니다 : www사용자는 이제 시스템의 모든 파일에 쓸 수 있습니다 , 이는 임의의 방문자가 너무 수 있다는 것을 의미합니다).
voretaq7

102

한 가지 중요한 점은 주요 구성 파일에 대한 파일 시스템 권한을 확인하는 ssh / sudo와 같은 많은 도구가 있다는 것입니다. 권한이 잘못된 경우 심각한 보안 문제를 나타내므로 이러한 도구는 실패하도록 설계되었습니다. 내 데비안 테스트 시스템과 다른 시스템에서는 로그인 바이너리 또는 PAM의 무언가에 권한 검사가 있기 때문에 로그인 기능이 실패합니다.

따라서 실제로 시스템이 손상되는 것은 아닙니다. 권한이 잘못되면 많은 도구가 즉시 실패하도록 설계되었습니다.

시스템을 부팅 한 후 재부팅 chmod 777 -R /하면 부팅되고 명시적인 권한 검사가없는 프로세스를 시작할 수 있습니다. 따라서 시스템은 실제로 죽지 않았으며 다소 사용 불가능한 by-design 입니다.

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