Назад | Перейти на главную страницу

Как разрешить пользователю выполнять команду, содержащую кавычки в sudoers?

У меня есть эта команда

chroot /chroots/box /bin/bash -c 'cd /repos/system && git pull'

Пытался написать в / etc / sudoers

user ALL = (root) NOPASSWD: chroot /chroots/box /bin/bash -c 'cd /repos/system && git pull'

но это не сработало. В журналах я видел

sudo:      user : command not allowed ; TTY=pts/7 ; PWD=/home/user ; USER=root ; COMMAND=chroot /chroots/box /bin/bash -c cd /repos/system && git pull

Я также пытался избежать кавычек в вызове sudo, например \', и они появились в файле журнала с той же ошибкой.

Это репо влияет на корневую файловую систему chroot, поэтому я не могу вызвать git pull извне.

Простое решение - поместить вашу команду в сценарий, а затем предоставить пользователям доступ к сценарию через sudo.

user ALL = (root) NOPASSWD: /path/to/yourscript

затем

#/bin/bash
chroot /chroots/box /bin/bash -c 'cd /repos/system && git pull'

Убедитесь, что у ваших пользователей нет доступа на запись к вашему скрипту.

edit: Предупреждение, похоже, что sudo небезопасно обрабатывает пробелы в команде, поэтому использовать sudo таким образом небезопасно. https://unix.stackexchange.com/a/279142/39281

Вместо использования кавычек в файле sudoers вы можете экранировать пробелы с помощью обратной косой черты:

user ALL = (root) NOPASSWD: chroot /chroots/box /bin/bash -c cd\ /repos/system\ &&\ git\ pull

Вы все равно можете использовать его следующим образом, потому что оболочка пользователя все равно обрабатывает цитируемый аргумент:

chroot /chroots/box /bin/bash -c 'cd /repos/system && git pull'

Лично мне нравится другой ответ - поместить его в сценарий, но он отвечает на фактический вопрос.