sudoers에서 Cmnd_Alias와 함께 명령 매개변수를 사용하는 방법은 무엇입니까?

sudoers에서 Cmnd_Alias와 함께 명령 매개변수를 사용하는 방법은 무엇입니까?

sudoers에서 명령 매개변수를 지정하는 방법은 무엇입니까? 배경으로 aws이 명령은 실제로 전체 하위 시스템에 대한 게이트웨이이므로 사용자가 실행만 하도록 제한하고 싶습니다.aws s3 cp ...any other args...

다음을 시도하면/etc/sudoers

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp, /usr/local/aws/bin/aws s3 cp
gbt1 ALL=(gbt-ops) NOPASSWD: AWSS3_CMD

불행하게도 쉘은 비밀번호를 묻는 메시지를 표시합니다

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:

Cmnd_Alias에서 명령 매개변수를 제거하면 원하는 대로 진행되지만(암호 프롬프트 없음) 인증이 너무 광범위합니다.그렇다면 특정 유형의 명령 호출만 제한하는 올바른 방법은 무엇입니까?.

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws

그 다음에

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy

감사합니다.

답변1

와일드카드를 사용하지 않았지만 두 개의 매개변수를 제공했습니다. 따라서 sudo쓰기와 정확히 동일한 명령을 찾습니다(경로 조회 제외)(에서man 5 sudoers):

 If a Cmnd has associated command line arguments, then the arguments in
 the Cmnd must match exactly those given by the user on the command line
 (or match the wildcards if there are any).

다음과 같이 시도해 보세요:

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp *, /usr/local/aws/bin/aws s3 cp *

알아채다:

 Wildcards in command line arguments should be used with care.  Because
 command line arguments are matched as a single, concatenated string, a
 wildcard such as ‘?’ or ‘*’ can match multiple words. 

따라서 명령당 하나의 와일드카드만 필요합니다.

답변2

@muru와 동일하지만 완전한 작업 예제를 원하는 사람들을 위해:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=/bin/echo A *,/bin/echo B *

# Make USER run specific commands on given HOSTNAME
# USER_NAME 

#userx
userx ALL=(root) NOPASSWD: /sbin/cmd1,/sbin/cmd2,ECHO_CMD

대신 다른 명령이 될 수 있습니다 /sbin/cmd1./sbin/cmd2

목적은 필요한 암호문이 아닌 암호문을 요구한다는 것을 ECHO_CMD보여주고 이러한 간단한 실험으로 자신감을 얻을 수 있도록 하는 것입니다.sudo echo X Asudo echo A X

(에코가 있다고 가정하고 /bin/echo시스템의 위치를 ​​확인하려면 시도하십시오 whereis echo)

답변3

sudoer에 정규식을 사용할 수도 있습니다.

이렇게 하면 비밀번호 없이 실행할 수 있지만 /usr/bin/apt update upgrade and auto-remove.deb 이름을 지정하면 apt install비밀번호를 묻는 메시지가 계속 표시됩니다.

Cmnd_Alias UPDATES = /usr/bin/apt (update|upgrade|auto-remove)
%sudo ALL=(ALL:ALL) NOPASSWD: UPDATES
%sudo ALL=(ALL:ALL) ALL

답변4

cat나는 이것이 오래되었다는 것을 알고 있지만 이것이 대체되었고 사용자가 액세스할 수 없는 파일이 echo있다고 가정해 보겠습니다 . C사용자를 sudoers에 추가하면 다음이 가능합니다.

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=cat A *,cat B *

그런 다음 다음을 실행하여 파일 C에 액세스할 수 있습니다.

sudo echo A C

C는 와일드카드 구문을 올바르게 따르기 때문입니다. 나는 이것이 sudo 명령에서 와일드카드를 사용할 때 보안이 취약하다는 좋은 예라고 생각합니다. 나는 이 사용법에 매우 주의를 기울이고 와일드카드가 가질 수 있는 가능한 모든 변형을 고려할 것입니다!

관련 정보