사용자가 루트 액세스/권한으로 특정 바이너리만 실행하도록 허용

사용자가 루트 액세스/권한으로 특정 바이너리만 실행하도록 허용

특정 사용자에게 sudo만 사용하도록 허용하고 싶습니다 /sbin/iptables.

iptables를 구성하는 bash 스크립트가 있습니다. 문제는 이를 /sbin/iptablessudo 가능으로 구성하는 것만으로는 충분하지 않다는 것입니다. 스크립트 자체도 sudo 가능해야 합니다.

문제는 이 파일을 사용자가 편집할 수 있어(구성을 변경할 수 있음) 루트로 모든 명령을 실행할 수 있다는 것입니다.

이 문제를 해결하는 올바른 방법은 무엇입니까?

답변1

두 가지 접근 방식을 볼 수 있습니다.

  1. 사용자에게 무제한 /sbin/iptables사용을 허용하고 sudo(이것은 위험합니다. 이는 사용자를 어떻게든 신뢰한다는 의미입니다) 사용자의 권한으로 스크립트를 실행합니다. 이 스크립트는 필요할 때 sudo마다 호출됩니다. /sbin/iptables이는 결국 정기적으로 일부 비밀번호를 입력해야 하므로 스크립트가 빠르게 실행된다고 가정합니다.

    • 장점: 스크립트에 대한 신뢰가 필요하지 않습니다.
    • 단점: 이미 언급했듯이 /sbin/iptables사용자에게 무제한 액세스를 제공하는 데에는 위험이 있습니다.
  2. 스크립트를 호출해야만 사용자를 허용합니다 sudo.

    • 장점: /sbin/iptables스크립트에 의해 사용이 제한됩니다.
    • 단점: 대본이 완벽해야 한다.

언급한 질문과 관련하여: 스크립트 소유자가 say root이고 일반적인 권한을 갖고 있는 경우 rwxr-xr-x, 다른 사용자는 이를 수정할 수 없으며 실행할 수만 있습니다(결국 sudo더 많은 권한을 얻어야 함).

해결 방법 2의 경우, 셸 스크립트(보다 강력한 바이너리/프로그램)의 경우 스크립트 실행을 수정할 수 있는 환경 변수와 여러 외부 요인에 유의하세요. sudo 구성이 잠재적으로 유해한 각 변수의 정의를 올바르게 재설정하는지 확인하세요.

— 1. 실제로
필요한 경우 sudo구성할 수 있습니다 NOPASSWD.

답변2

위키피디아에서:

setuid 및 setgid(각각 "실행 시 사용자 ID 설정" 및 실행 시 그룹 ID 설정"의 약어)[1]는 사용자가 실행 파일 소유자 또는 그룹의 권한으로 실행 파일을 실행할 수 있도록 허용하는 Unix 액세스 플래그입니다. 이는 컴퓨터 시스템의 사용자가 일시적으로 상승된 권한으로 프로그램을 실행하여 특정 작업을 수행할 수 있도록 하는 데 종종 사용됩니다. 제공된 가정된 사용자 ID 또는 그룹 ID 권한이 항상 승격되는 것은 아니지만 최소한 구체적입니다.

이런 것을 시도해 보세요

stefan@linux-ulsk:/usr/bin> zypper up
Root privileges are required for updating packages.
linux-ulsk:~ # whereis zypper
zypper: /usr/bin/zypper /usr/bin/X11/zypper /usr/include/zypper /usr/share/zypper /usr/share/man/man8/zypper.8.gz
linux-ulsk:~ # chmod u+s /usr/bin/zypper
linux-ulsk:~ # exit
stefan@linux-ulsk:/usr/bin> zypper up
Retrieving repository ...

이전에는 불가능했던 루트 권한 없이 zypper를 시작할 수 있습니다.

setuid 및 setgid에 주의하세요! 일부 책 인용문:

쉘 스크립트에 setuid 권한을 부여하지 마십시오. 그들을 파괴하는 몇 가지 기술이 알려져 있습니다.

답변3

파일의 그룹 소유자를 변경하고 사용자를 그룹에 추가해 볼 수 있습니다. 그런 다음 chmod파일에 그룹 권한을 할당하면 필요한 작업을 수행할 수 있습니다.

이는 불안정한 솔루션이지만 작동합니다.

답변4

귀하(또는 적절한 계정)가 파일의 소유자인지 확인하고 그룹이 아닌 귀하만 파일을 쓸 수 있도록 설정하세요. 따라서 사용자가 올바른 그룹에 있다고 가정하면 권한은 750과 비슷할 것입니다.

실행할 수는 있지만 파일에 쓸 수 없는 경우 해당 명령을 sudo 목록에 안전하게 추가할 수 있습니다.

관련 정보