![sudoers에서 Cmnd_Alias와 함께 명령 인수를 어떻게 사용합니까?](https://rvso.com/image/36001/sudoers%EC%97%90%EC%84%9C%20Cmnd_Alias%EC%99%80%20%ED%95%A8%EA%BB%98%20%EB%AA%85%EB%A0%B9%20%EC%9D%B8%EC%88%98%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%82%AC%EC%9A%A9%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
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에서 args 명령을 제거하면 원하는 대로 진행되지만(암호 프롬프트 없이) 인증이 너무 광범위합니다.그렇다면 특정 유형의 명령 호출로만 제한하는 올바른 방법은 무엇입니까?.
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 A
sudo echo A X
(echo가 에 있다고 가정했습니다 /bin/echo
. 시스템에서 에코가 어디에 있는지 확인하려면 시도해 보세요 whereis echo
.)
답변3
sudoers에서도 정규 표현식을 사용할 수 있습니다.
/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 명령에서 와일드카드를 사용할 때 보안이 좋지 않다는 좋은 예라고 생각합니다. 나는 이 사용법에 매우 주의를 기울이고 와일드카드가 생성할 수 있는 변형을 고려하겠습니다!