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


13

단일 사용자를 위해 데비안 리눅스 박스에서 특정 명령을 허용해야합니다. 나는 /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있습니다. 특정 명령 만 허용하도록이 문제를 해결하는 방법이 있습니까?

답변:


10

나는 음란에 동의하지 않습니다. 작동하지만 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를 루트로 실행하지 마십시오.


1
당신은 정확하지만 스크립트가 안전하지 않은 경우 스크립트의 내용이 중요하지 않으며 덮어 쓸 수 있으며 세계는 굴입니다. 스크립트가 안전하다면 그 안에있는 것도 안전합니다.
user9517

25

리다이렉션이 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 사용자가 스크립트에 쓸 수 없도록하십시오.


1
sudo가 이미 처리 한 경우 누군가 나를 해결할 수 있습니다 (env 변수가 전달되지 않는 문제가 있음을 기억하는 것 같습니다).하지만 awk 및 wc가 스크립트의 일반적인 모범 사례로 전체 경로를 지정하여 사용자가 할 수 있도록 제안합니다 PATH = ~ user / bin : $ PATH를 내 보내지 말고 ~ user / bin의 awk (또는 wc)라는 스크립트에서 원하는 명령을 수행하십시오.
Foon

@Foon : sudo와 cron을 혼동하는 것 같습니다.
user9517

1
혼동 하지 않지만 superuser.com/questions/232231/… 은 sudo가 PATH 조작을 방지하지 못함을 나타냅니다 (및 기본적으로 LD_LIBARRAY_PATH)
Foon

나는 비슷한 스크립트를 사용하여 돋보이는 스크립트를 suid하고 루트에서만 쓸 수 있도록 만들었습니다. 권한이 711 인 사용자에 대해 작동하는지 테스트 한 후 시도하고 우회하기 위해 수행중인 작업을 볼 수도 없습니다.
Chris K
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.