Sudoers: 특정 매개변수를 모든 하위 명령과 함께 사용할 수 있도록 허용

Sudoers: 특정 매개변수를 모든 하위 명령과 함께 사용할 수 있도록 허용

나는 사용자 그룹이 dhcpcd 서비스 인스턴스에 대한 일부 제어권을 갖도록 허용하려고 합니다. 즉, 나는 그들이 다음을 실행하길 원합니다:

systemctl (start,stop,...) [email protected]

비밀번호를 묻는 메시지를 표시하지 않지만 다음과 같은 경우에만[이메일 보호됨]. 이를 수행하는 방법을 찾았지만 각 하위 명령을 해당 줄에 나열해야 합니다.

%mygroup ALL=NOPASSWD: /usr/bin/systemctl start [email protected], /usr/bin/systemctl stop [email protected], ...

더 우아한 방법이 있나요?

답변1

Sudoers 와일드카드는 와일드카드 문자( man glob, man fnmatch)만 지원합니다. 단, start, stop, restart등의 명령은 systemctl파일이 아니므로 와일드카드를 사용할 수 없습니다.

보안 관점에서 모든 명령을 열거해야 하는 것은 좋은 일입니다. 시스템 업데이트 [email protected]등의 명령을 사용하여 업데이트하는 경우 shutdown-machinesudo 사용자는 이를 사용할 수 없습니다(다행히도).

sudoers 매뉴얼에는 이에 대한 메모가 있습니다.

 Wildcards in command line arguments should be used with care.
 Command line arguments are matched as a single, concatenated string.  This mean a wildcard character such as ‘?’ or
 ‘*’ will match across word boundaries, which may be unexpected.  For example, while a sudoers entry like:

     %operator ALL = /bin/cat /var/log/messages*

 will allow command like:

     $ sudo cat /var/log/messages.1

 It will also allow:

     $ sudo cat /var/log/messages /etc/shadow

 which is probably not what was intended.  In most cases it is better to do command line processing outside of the
 sudoers file in a scripting language.

반면에 입력 시간을 절약하려면 설명서에서 권장하는 대로 정확하게 수행할 수 있습니다. 바로 스크립트 언어를 사용하는 것입니다. 예를 들어 다음과 같이 작성할 수 있습니다 /usr/local/sbin/sudoers-dhcpd.sh.

#!/bin/sh

case "$1" in
  start)
    systemctl start [email protected]
    ;;
  stop)
    systemctl stop [email protected]
    ;;
  restart)
    systemctl restart [email protected]
    ;;
  *)
    echo You are not allowed to do that!
    ;;
esac

다음과 같이 sudoers 줄을 추가합니다.

%mygroup ALL=NOPASSWD: /usr/local/sbin/sudoers-dhcpd.sh

관련 정보