이전 버전의 visudo sudoers를 안전하게 사용하는 올바른 방법은 무엇입니까?

이전 버전의 visudo sudoers를 안전하게 사용하는 올바른 방법은 무엇입니까?

다음과 같이 로그인하지 않은 다른 사용자로 스크립트를 실행하고 싶습니다.

/srv/system/check_alerts.sh <NAME>

대문자만 포함된 매개변수가 1개 있으며가변 길이. Visudo는 오래되었고 extglob을 허용하지 않기 때문에 가변 길이 매개변수를 허용할 수 없습니다.

나는 이것을 sudoers에 추가하려고 시도했습니다.

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z][a-z]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [a-z][a-z]

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper][upper]
alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [upper][upper]

그런 다음 테스트를 실행합니다.

sudo -u alerter bash

그리고:

bash-4.2$ sudo -u gmail /srv/system/check_alerts.sh TEST

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for alerter:

여전히 귀찮게 비밀번호를 묻는 메시지가 표시됩니다. 왜?

임의의 매개변수에 공통 "*" 와일드카드를 사용하고 싶지 않습니다. "&"와 같은 것을 사용하는 하위 쉘을 허용하므로 이는 옵션이 아닙니다.

그렇다면 가변 길이 인수를 허용하고 안전하지 않은 "*"를 방지하려면 어떻게 해야 할까요? 최소한 비밀번호 프롬프트에 방해받지 않고 작업할 수 있는 방법이 있나요?

편집: 지금은 이것을 추가했습니다.

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh *

visudo를 위해 여전히 비밀번호를 요구하고 NOPASSWD 옵션을 존중하지 않습니다.

디버깅: 다음을 실행합니다: visudo -f /etc/sudoers.d/alerter

그리고 다음 줄을 추가했습니다.

alerter ALL=(gmail) NOPASSWD: ALL

그런 다음 "alerter" bash 쉘에서 다음을 실행합니다.

bash-4.2$ sudo -u gmail /srv/system/check_alerts.sh TEST
gmail is not in the sudoers file.  This incident will be reported.

"sudo -l"의 출력:

User alerter may run the following commands on test-host:
(ALL) NOPASSWD: /usr/bin/mailq
(gmail) NOPASSWD: ALL

고쳐 쓰다:

이것이 중요한지는 확실하지 않지만 사용자 "alerter"와 "gmail"은 모두 "mycompany" 그룹에 속합니다.

업데이트 2:

제안된 대로 "check_alerts.sh" 스크립트에서 "sudo"를 제거했습니다. 다음과 같은 경우 명령이 제대로 작동합니다.

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh *

- 비밀번호 프롬프트 없이 작동합니다.

이제 /etc/sudoers.d/alerter에 구성되었습니다.

alerter ALL=(gmail) NOPASSWD: /srv/system/check_alerts.sh [[\:upper\:]][[\:upper\:]][[\:upper\:]][[\:upper\:]][[\:upper\:]]

이것은 훌륭하게 작동합니다. 설문조사에 참여해주신 모든 분들께 감사드립니다!

관련 정보