특정 사용자에게 sudo만 사용하도록 허용하고 싶습니다 /sbin/iptables
.
iptables를 구성하는 bash 스크립트가 있습니다. 문제는 이를 /sbin/iptables
sudo 가능으로 구성하는 것만으로는 충분하지 않다는 것입니다. 스크립트 자체도 sudo 가능해야 합니다.
문제는 이 파일을 사용자가 편집할 수 있어(구성을 변경할 수 있음) 루트로 모든 명령을 실행할 수 있다는 것입니다.
이 문제를 해결하는 올바른 방법은 무엇입니까?
답변1
두 가지 접근 방식을 볼 수 있습니다.
사용자에게 무제한
/sbin/iptables
사용을 허용하고sudo
(이것은 위험합니다. 이는 사용자를 어떻게든 신뢰한다는 의미입니다) 사용자의 권한으로 스크립트를 실행합니다. 이 스크립트는 필요할 때sudo
마다 호출됩니다./sbin/iptables
이는 결국 정기적으로 일부 비밀번호를 입력해야 하므로 스크립트가 빠르게 실행된다고 가정합니다.- 장점: 스크립트에 대한 신뢰가 필요하지 않습니다.
- 단점: 이미 언급했듯이
/sbin/iptables
사용자에게 무제한 액세스를 제공하는 데에는 위험이 있습니다.
스크립트를 호출해야만 사용자를 허용합니다
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 목록에 안전하게 추가할 수 있습니다.