sudo를 통해 실행할 때 setuid 바이너리 설치에서 `apt-get`, `yum`을 비활성화합니다.

sudo를 통해 실행할 때 setuid 바이너리 설치에서 `apt-get`, `yum`을 비활성화합니다.

권한이 있기 때문에 시스템에 무언가를 설치할 수 있지만 프로그램을 설치할 수 있는 권한 sudo만 있다고 가정해 보겠습니다. sudo이 경우 다음이 포함된 루트 소유 바이너리를 설치하는 패키지를 만드는 것은 매우 쉽습니다.사용자 ID 비트 설정설치 시 설정하고 바이너리를 실행합니다.어느루트로 공급하도록 명령합니다. 이로 인해 특정 사용자가 원하는 대로 권한을 변경할 수 있는 패키지에 대한 제한된 sudo 액세스를 허용하는 것은 안전하지 않습니다. 또 다른 명백한 (IMO) 보안 결함은 소프트웨어 패키지가 파일을 업데이트 /etc/sudoers하고 사용자에게 모든 종류의 추가 권한을 부여할 수 있다는 것입니다.

내가 아는 한 호출 방법에 대해 설정하거나 확인할 수 있는 옵션 apt-get도 없습니다 yum. 이로 인해 일반 기본 위치에 설치가 가능하지만 제한적인 방식으로 설치됩니다(예: 이미 사용 가능한 파일을 덮어쓰지 않거나 덮어쓰지 않음). setuid 비트 설정).

내가 뭐 놓친 거 없니? 그러한 제한이 있는 설치가 있습니까? 다른 설치 프로그램에서도 사용할 수 있나요? 아니면 이러한 제한을 무효화하는(그리고 이를 구현하는 데 시간 낭비가 되는) 다른 알려진 해결 방법이 있습니까?

답변1

이는 SELinux 정책을 통해 가능할 수도 있지만(SELinux 또는 루트를 제한할 수 있는 기타 보안 모듈 없이는 불가능할 수 있음) 이는 의미가 없습니다.

알다시피, 패키지는 설치됨을 선언할 수 있습니다 /etc/sudoers. 이를 방지하기 위해 임시 규칙을 만들더라도 패키지는 여전히 에 있을 수 있습니다 . 또는 다음 번에 사용자가 로그인할 때 읽을 수 있도록 /etc/sudoers.d파일을 넣을 수도 있습니다 . /etc/profile.d또는 부팅 시 루트로 시작되는 서비스를 추가할 수 있습니다. 목록은 계속됩니다. 이는 관리하기 어렵고, 문제가 있는 상황을 발견하더라도 너무 많은 패키지가 설치되지 않아 신경 쓰지 않을 것입니다(예: 시설에서 대부분의 보안 업데이트를 허용하지 않음). 이 패키지가 할 수 있는 또 다른 일은 나중에 사용하도록 속일 수 있는 프로그램을 설치하는 것입니다(예를 들어 쓰기 액세스를 완전히 비활성화하면 /bin설치할 수 있음 /usr/local/bin/ls). 다음에 프로그램을 호출할 때 이 프로그램은 귀하의 계정을 통해 백도어를 주입합니다. . 패키지 설치로 인해 잠재적인 보안 허점이 발생하는 것을 방지하려면 신뢰할 수 있는 패키지만 설치하도록 제한하거나 설치된 패키지를 절대 사용하지 않도록 해야 합니다.

기본적으로 사용자를 신뢰하지 않는다면 사용자가 시스템에 임의의 패키지를 설치하도록 허용할 수 없습니다. 배포판에 없는 것이 필요한 경우 홈 디렉터리에 소프트웨어를 설치하도록 하세요.

신뢰할 수 없는 사용자가 더 많은 패키지(안전하다고 승인한 사전 정의된 소스 목록에서)를 설치하거나 기본 시스템의 기존 패키지를 업그레이드할 수 있도록 하려면 안전할 수 있지만 예방 조치를 취해야 하며, 특히 설치 중 상호 작용을 비활성화해야 합니다. . 바라보다내 SSH 사용자에게 "apt-get update" 및 "apt-get update"에 대해 비밀번호 없는 sudo를 제공하는 것이 안전합니까?에 대한 몇 가지 생각 apt-get upgrade.

최신 Linux 버전(커널 ≥ 3.8)에서는 모든 사용자가 다음을 수행할 수 있습니다.사용자 네임스페이스 시작사용자 ID는 0입니다. 이를 통해 기본적으로 사용자는 자신의 디렉터리에 자신의 배포판을 설치할 수 있습니다.

답변2

사용자가 임의의 패키지를 생성하고 설치 프로그램이 신뢰하는 저장소에 업로드할 수 있는 경우 귀하가 찾고 있는 방식으로 시스템을 보호할 수 있는 방법이 없습니다(적어도 그렇지 않음 apt-get). 패키지의 유지 관리자 스크립트는 root시스템에서 실행되거나 system apt유형 에서 실행 되므로 패키지를 설치하면 패키지 작성자가 해당 시스템에 효과적으로 액세스할 수 있습니다.yumdnfroot

아마도 SELinux와 같은 것을 사용하면 사용자에게 특정 위치에 패키지를 설치할 수 있는 충분한 액세스 권한을 부여하지만 아무런 해를 끼치지 않는 정책을 가질 수 있습니다(예를 들어등을 /etc/sudoers건드리지 않고 물론 패키지 관리자 구성도 포함하지만 모든 것을 잡을 수 있을지 의문입니다. (저는 SELinux에 대해 충분히 알지 못합니다.)/sbin/usr/sbin

저장소에 들어가는 내용을 제어할 수 있다면 괜찮습니다. 누구든지 저장소에 무엇이든 업로드할 수 있다면 서명을 요구하는 것은 실제로 큰 도움이 되지 않습니다. 적어도 서명이 일치하지 않으면 경고와 프롬프트만 표시되며 이는 재정의될 수 있으며 구성 방법이 없다고 apt-get생각합니다. apt-get재정의를 허용하지 않습니다.

관련 정보