Як я можу використовувати аргументи команд із Cmnd_Alias ​​в судорах?


36

Як вказати аргументи команд у судерах? Як фон, 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

Дуже дякую.


Чому у вас / usr / local / bin / aws, / usr / local / aws / bin / aws? Я маю на увазі, що ти повторив команду два рази в одному рядку?
Мохаммед Нурелдін

Відповіді:


47

Ви не використовували жодні символи, але ви навели два аргументи. Тому 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. 

Отже, потрібна лише одна підстановка на одну команду.


1
+1 за коротке пояснення та обмін знаннями, дякую.
Дінеш

1
Зауважте, що sudo не належним чином поважає розділення аргументів, які можуть бути використані для використання в деяких випадках, див. Unix.stackexchange.com/a/279142/43920 . Тож замість того, щоб вказувати /usr/local/bin/aws s3 cpв sudoers, безпечніше замінити його на скрипт (доступний лише для кореня).
pcworld

6

Те саме, що і @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ні, і дозволити вам набути впевненості завдяки такому простому експерименту.

(Передбачалося, що ехо сидить /bin/echo, щоб перевірити, де воно знаходиться у вашій системі, спробуйте whereis echo)


Так, є /bin/echoдвійкові, але більшість оболонок також мають вбудовану функцію, echoяка буде використовуватися замість цього бінарного файлу, якщо ви не надаєте повний шлях.
Marki555
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.