Как указать аргументы команды в 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
Большое спасибо.
Ответы:
Вы не использовали подстановочные знаки, но предоставили два аргумента. Поэтому
sudo
ищет команды в точности как написано (исключая path-lookup) (fromman 5 sudoers
):Попробуйте что-то вроде:
Обратите внимание, что:
Таким образом, для каждой команды требуется только один подстановочный знак.
источник
/usr/local/bin/aws s3 cp
sudoers безопаснее заменить его скриптом (доступным только для записи root).Так же, как @muru, но для тех, кто любит полный рабочий пример:
В то время как
/sbin/cmd1
,/sbin/cmd2
могут быть любые другие команды.Цель
ECHO_CMD
состоит в том, чтобы представить, чтоsudo echo X A
будет запрашивать парольную фразу, покаsudo echo A X
нет, и позволить вам обрести уверенность в таком простом эксперименте.(Предполагалось, что echo сидит
/bin/echo
, чтобы проверить, где он находится в вашей системе попробуйтеwhereis echo
)источник
/bin/echo
двоичный файл, но большинство оболочек также имеет встроенную функцию,echo
которая будет использоваться вместо этого двоичного файла, если вы не укажете полный путь.