[server] 데비안 리눅스에서 복잡한 sudo 명령 허용

단일 사용자를 위해 데비안 리눅스 박스에서 특정 명령을 허용해야합니다. 나는 /etc/sudoers파일 에서 이것을 시도했다 :

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

예상대로 작동하지 않습니다. sudo를 사용하여 사용자 zabbix로 명령을 실행하면 암호를 묻습니다 ( NOPASSWD옵션 을 지정했지만 ).

그러나 이것은 작동합니다.

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

그러나 모든 하위 명령이 허용되는 단점이 apt-get있습니다. 특정 명령 만 허용하도록이 문제를 해결하는 방법이 있습니까?



답변

나는 음란에 동의하지 않습니다. 작동하지만 awk루트로 실행할 필요는 없습니다 . 나는 당신이 awk어떤 식 으로든 공격 할 수 있기 때문에 이것에 익숙하지 않을 것입니다. 결국 완전한 프로그래밍 언어 통역사입니다.

하나가 실행되면 sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'실제로 실행 sudo /usr/bin/apt-get --print-uris -qq -y upgrade되고 호출 사용자로 파이핑 / 리디렉션됩니다.

이 시도: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

그건 그렇고, 이것을 lain처럼 스크립트에 넣는 데 아무런 문제가 없으며 여전히 그렇게 할 수 있습니다. 가능한 경우 awk를 루트로 실행하지 마십시오.


답변

리다이렉션이 sudo와 상호 작용하는 방식에 어긋나는 것 같습니다. 리디렉션은 권한있는 사용자가 아닌 호출하는 사용자에서 수행됩니다. 스크립트에서 명령을 래핑하고 zabbix 사용자가 해당 스크립트를 실행할 수 있도록하는 것이 더 쉬울 것입니다.

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

설정된 sudoers

zabbix  ALL=NOPASSWD: /path/to/script

이제 전체 스크립트가 특정 apt-get 명령뿐만 아니라 권한있는 사용자로 실행됩니다. 그러나 zabbix 사용자가 스크립트에 쓸 수 없도록하십시오.


답변