단일 사용자를 위해 데비안 리눅스 박스에서 특정 명령을 허용해야합니다. 나는 /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 사용자가 스크립트에 쓸 수 없도록하십시오.