У меня есть эта команда
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'
Лично мне нравится другой ответ - поместить его в сценарий, но он отвечает на фактический вопрос.