sudo의 위험성은 무엇입니까?

sudo의 위험성은 무엇입니까?

데비안에는 Docker에 대한 경고 항목이 있습니다:

Docker 그룹 멤버십은 sudo보다 더 위험합니다

나에게 이것은 sudo 자체가 위험하다는 것을 의미합니다(Docker(그룹 멤버십)보다는 덜하지만).

sudo의 위험은 무엇입니까(아마도 일반적으로, 잘못된 구성 외에)?
특히나, 어떻게더반이것은 sudo가 위험하다는 것을 의미합니까?

답변1

docker와 sudo 모두 전체 루트 액세스를 제공합니다. 최악의 위험은 본질적으로 두 경우 모두 동일합니다.

해커가 전체 루트 액세스 권한을 얻은 경우 복구에는 일반적으로 서버 재구축이 포함됩니다. 그들은 무엇이든 할 수 있고 서버에서 무엇이든 숨길 수 있습니다.

따라서 sudo는 구성을 통해 루트 액세스를 제한할 수 있으므로 덜 위험합니다. Sudo는 사용자에 대해 실행할 명령을 제어하도록 구성할 수 있습니다. 또한 sudo 사용자는 (일반적으로) 암호를 입력해야 합니다. 이렇게 하면 해커가 해당 사용자 계정에 액세스할 수 있지만 암호는 없을 경우 일부 악의적인 공격을 방지할 수 있습니다.

Docker의 경우 이러한 구성 기능이 없으므로 "더 위험"합니다. 올바른 "docker run" 명령을 알고 있다면 docker 호스트에서 루트로 명령줄을 가져올 수 있습니다. 예:

docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 /bin/sh

답변2

Unix 권한은 일반적으로 권한이 있는 사용자가 시스템에 최소한의 영구적인 손상을 줄 수 있도록 설정됩니다.

sudo 명령은 신뢰할 수 있는 사용자의 권한을 루트로 승격시킵니다. 루트는 운영 체제를 변경하여 오작동을 일으키는 것을 포함하여 시스템에서 모든 작업을 수행할 수 있습니다. 이로 인해 sudo 및 일반 루트 액세스가 위험해집니다.

sudo 액세스 권한이 있는 순진한 사용자는 루트 액세스가 필요하지 않고 루트 대신 사용자 권한으로 실행해야 하는 명령도 포함하여 모든 명령에 sudo 접두사를 붙일 수 있습니다. 사용자는 종종 부주의하며, 루트로 철자가 틀린 명령을 실행하면 매우 심각한 결과를 초래할 수 있습니다. 문제의 명령이 정확하고 운영 체제를 손상시키려는 의도가 없더라도 루트로 실행하면 사용자 계정에 손상을 줄 수 있으므로 sudo가 특히 위험합니다. 여기에 사용자가 경험이 없으며 sudo를 사용하여 Google에서 찾은 명령을 검색하지 않고 실행할 가능성이 높으며 이는 sudo를 치명적으로 위험하게 만들 수 있다는 사실을 추가합니다.

sudo 액세스를 허용하여 부여되는 기본 권한은 전체 루트 액세스입니다. 그러나 sudo를 미세 조정하여 루트가 아닌 특정 사용자나 그룹으로 권한을 높이거나 특정 명령에 대한 루트(또는 루트가 아닌) 액세스를 제한하는 등 보다 제한된 액세스를 제공할 수 있습니다. 그러나 이를 위해서는 특별한 구성이 필요하며 일반적으로 "sudo" 액세스를 요청할 때의 의미는 아닙니다.

답변3

sudoer에서 다른 사용자 그룹을 열거하고 싶지 않은 많은 관리자는 그렇게 할 수 있어야 합니다...

각 관리자를 sudo 그룹에 추가하고 sudoers에서 기본 "%sudo ALL=ALL..." 항목을 활성화합니다.

sudo의 더 나은 사용법

대신 역할에 대해 생각하십시오. 따라서 시스템의 한 부분에 postgres 클러스터를 담당하는 관리자 그룹이 있는 경우:

postgres 슈퍼유저(debian의 postgres)로서 postgres 관리 명령을 실행할 수 있는 시스템의 그룹에 이러한 사용자를 추가합니다. 따라서 postgres 자체만 수정할 수 있습니다. 예를 들어 postgres/users에서 새 데이터베이스/역할을 생성할 수 있지만 postgres는 수정할 수 없습니다. 시스템 사용자를 postgres 사용자에 매핑하는 방법.

도커와 sudo

docker 데몬은 suid root로 표시되므로 docker의 역할을 고려하세요. docker의 각 애플리케이션에 대해 이를 역할로 전환하고 사용자가 sudo를 사용하여 docker를 시작하도록 강제합니다.

Sudo는 sudoers.d에 자체 정의를 갖도록 각 역할에 대해 구성됩니다.

저는 docker를 사용하지 않습니다. 누구든지 docker를 사용하는 방법에 대한 예를 제공할 수 있습니까? 먼저 다른 사용자의 docker 명령에서 exec 비트를 제거합니다. 즉, 다음과 같습니다.

chmod o-x /usr/bin/docker

도커를 이런 식으로 호출하는 건가요? 도커 이미지가 여러 개 있나요? 그렇다면 각 역할에 역할을 부여하고 sudoers.d에서 이에 대한 정의를 정의하세요.

관련 정보