Como permitir que o usuário execute um comando contendo aspas em sudoers?

4

Eu tenho este comando

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

Eu tentei escrever em / etc / sudoers

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

mas isso não funcionou. Nos logs eu vi

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

Eu também tentei escapar de citações na chamada sudo, como \' , e elas apareceram no arquivo de log com o mesmo erro.

Esse repo afeta o sistema de arquivos raiz do chroot, então não consigo chamar git pull de fora.

    
por tijagi 15.06.2013 / 06:13

2 respostas

5

A solução simples é colocar seu comando em um script e depois fornecer aos usuários acesso ao script via sudo.

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

Então

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

Garanta que seus usuários não tenham acesso de gravação ao seu autor.

    
por 15.06.2013 / 09:40
2

edit: Aviso, parece que o sudo não manipula com segurança espaços no comando, portanto, não é seguro usar o sudo dessa maneira. link

Em vez de usar aspas no arquivo sudoers, você pode escapar de espaços usando barra invertida:

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

Você ainda pode usá-lo da seguinte forma, porque o shell do usuário lida com o argumento citado de qualquer maneira:

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

Pessoalmente, eu gosto da outra resposta, para colocá-lo em um script, mas isso responde a pergunta real.

    
por 09.05.2018 / 08:49

Tags