루트가 아닌 사용자는 "sudo vi /etc/hosts"를 실행한 후 루트 액세스 권한을 얻습니다.

루트가 아닌 사용자는 "sudo vi /etc/hosts"를 실행한 후 루트 액세스 권한을 얻습니다.

Linux 시스템에서 루트가 아닌 사용자가 파일을 열면,

$ sudo vi /etc/hosts

그리고 그만 말해요:sh

루트 액세스 권한을 얻으세요.

1) 위에서 언급한 것처럼 루트가 아닌 사용자가 어떻게 루트 사용자가 될 수 있습니까?

2) Linux는 왜 이러한 해킹 방법이 보안을 침해하도록 허용합니까?

답변1

루트가 아닌 사용자는 성공적으로 실행되면 루트가 됩니다 sudo(가정 대상 사용자 지정 ). 루트로 실행을 root시작합니다 . 쉘을 vi요청하면 vi현재 사용자 루트로 쉘을 성실하게 실행합니다! vi를 "종료"하기 위해 이 명령을 사용해서는 안 된다는 점을 분명히 해야 합니다. :sh그러려면 쉘이 필요하기 때문입니다. 대신 종료하세요 :q.

Linux는 이와 같은 기능을 허용합니다. 그것이 바로 그것이기 때문입니다 sudo! 어쩌면 당신은 sudo에 대한 강의를 본 적이 있을 것입니다:

귀하는 귀하의 로컬 시스템 관리자로부터 일반적인 강의를 들으셨을 것으로 생각됩니다. 일반적으로 다음 세 가지 사항으로 귀결됩니다.

#1) 타인의 사생활을 존중합니다.

#2) 입력하기 전에 생각해보세요.

#3) 큰 힘에는 큰 책임이 따른다.

!sudo는 일반적으로 다음과 같이 부정 연산자 형태로 "모든" 액세스 권한을 부여할 때 이에 대해 제한된 "과속 방지턱"을 제공합니다.

jill        SERVERS = /usr/bin/, !SU, !SHELLS

여기서 jill에게는 /usr/bin에 있는 프로그램을 실행할 수 있는 권한이 부여되지만 SU 또는 SHELLS 별칭에 나열된 프로그램은 실행할 수 없습니다.

이것sudoers 매뉴얼 페이지sudo를 통해 대량 액세스 권한을 부여한 다음 이를 제한하는 방법에 대한 전체 "보안 참고 사항" 섹션이 있습니다.

'!'에 대한 제한 연산자

ALL에서 "빼기"를 위해 "!" 연산자를 사용하는 것은 일반적으로 효과가 없습니다. 사용자는 원하는 명령을 다른 이름으로 복사한 다음 해당 명령을 실행하여 이 문제를 쉽게 피할 수 있습니다.

그리고

일반적으로 사용자가 sudo ALL을 사용하는 경우 사용자 사양의 "!" 요소에 관계없이 루트 셸을 제공하는 자체 프로그램을 만드는 것(또는 자체적인 셸 복사본을 만드는 것)을 막을 수 없습니다.

더 관련성이 높은 것은 다음과 같습니다.

쉘 탈출 방지

sudo가 프로그램을 실행하면 프로그램은 다른 프로그램 실행을 포함하여 원하는 모든 작업을 자유롭게 수행할 수 있습니다. 프로그램에서 셸 이스케이프를 허용하여 사용자가 sudo 액세스 제어 및 로깅을 우회할 수 있도록 허용하는 경우가 많기 때문에 이는 보안 문제가 될 수 있습니다. 쉘 이스케이프를 허용하는 일반적인 프로그램에는 쉘(분명히),편집하다, 호출기, 메일 및 터미널 프로그램

답변2

성공 하면 sudo vi /etc/hosts시스템 관리자가 사용자가 vi /etc/hosts루트로 실행할 수 있도록 허용했음을 의미합니다. 이것이 바로 sudo의 핵심입니다. 이를 통해 시스템 관리자는 특정 사용자에게 추가 권한으로 특정 명령을 실행할 수 있는 권한을 부여할 수 있습니다.

사용자에게 실행 권한이 부여되면 쉘 실행 및 시스템의 모든 파일 덮어쓰기를 vi포함하여 모든 vi 명령을 실행할 수 있는 권한이 있습니다 . 실행 전용 규칙은 사용자가 임의의 명령을 실행할 수 있도록 허용하므로 의미가 없습니다.:sh:wvi /etc/hosts

관련된 "해커"는 없습니다. 보안 취약점은 보안 모델의 허점이 아니라 구성 오류에서 발생합니다. Sudo는 구성 오류를 특별히 방지하려고 하지 않습니다. 문서는 이해하기 매우 어렵습니다. 의심스러우면 주변에 물어보고 너무 복잡한 작업은 시도하지 마세요.

일반적으로 사용자에게 의도한 것보다 더 많은 권한을 부여하지 않고 특정 권한을 부여하는 것은 어려운 문제입니다. vi와 같은 대화형 프로그램을 실행할 수 있는 권한을 부여하는 것과 같은 불도저 접근 방식은 실패할 수밖에 없습니다. 일반적인 권장 사항은 작업을 완료하는 데 필요한 최소 권한을 부여하는 것입니다. 사용자가 파일을 수정할 수 있도록 허용하려면 편집기 실행 권한을 부여하지 마세요. 대신 다음을 수행할 수 있습니다.

  • 파일에 쓸 수 있는 권한을 부여하십시오. 이것은 가장 쉬운 방법이며 원하지 않는 일을 할 위험이 가장 적습니다.

    setfacl u:bob:rw /etc/hosts
    
  • sudo를 통해 파일을 편집할 수 있는 권한을 부여합니다. 이렇게 하려면 편집기 실행 권한을 부여하지 마세요. sudo 문서에 설명된 대로 실행 권한을 부여하면 sudoedit편집기가 호출됩니다.원래 사용자로그런 다음 추가 권한을 사용하여 파일을 수정하십시오.

    bob ALL = sudoedit /etc/hosts
    

    sudoeditsudo 메소드 는 편집기에서 파일을 여는 것보다 호출해야 하기 때문에 설정이 더 복잡하고 사용자에게 덜 투명 하지만 모든 액세스가 기록된다는 장점이 있습니다.

사용자가 편집할 수 있도록 허용하면 /etc/hosts보안 인프라에 영향을 미칠 수 있습니다. 어디에서나 특정 시스템에 해당하는 호스트 이름을 사용하는 경우 해당 사용자는 이를 다른 시스템으로 가리킬 수 있습니다. 그것에 대해 생각해보세요어쨌든 이것은 아마도 불필요할 것이다.

관련 정보