Como adicionar programaticamente secure_path no arquivo sudoers

11

Estou tentando criar um script de dados do usuário para uma instância do EC2 que cria nó e npm no github e inicia um serviço. Para lubrificar essas rodas, preciso adicionar:

:/usr/local/bin

até o final da linha em / etc / sudoers, que começa:

Defaults        secure_path="

/superuser/927512/how-to-set-path-for-sudo-commands fala sobre o uso do visudo para conseguir isso, mas quero fazê-lo programaticamente nos dados do usuário do EC2.

/programming/16282789/adding-sudo-permissions-to-sudoers-for-user-via-shell-script fala sobre editar o arquivo sudoers, mas parece muito exagerado para o que estou tentando alcançar.

Eu pensei que seria fácil cumprimentar a linha e substituí-la, mas estou perplexo. Não só por causa daquela vírgula invertida de fechamento irritante!

Belial
fonte

Respostas:

6

Se você pode substituir o secure_pathvalor em vez de anexá-lo, pode usar uma solução muito mais fácil. Normalmente, o sudo tem um diretório de configuração como /etc/sudoers.donde você pode soltar arquivos de configuração adicionais.

Basta criar um arquivo com o seu secure_pathvalor completo :

Defaults secure_path="<default value>:/usr/local/bin"

Isso substitui o valor da configuração principal. Se o valor do caminho for o mesmo para todas as suas máquinas, isso poderá ser facilmente implementado com scripts ou um pacote.

Isso tem a vantagem adicional de que você não precisa verificar e mesclar arquivos de configuração quando o pacote sudo for atualizado no futuro.

Gerald Schneider
fonte
2

supondo que você saiba que a linha com secure_path existe, um comando sed simples para fazer isso

sed -i -e '/secure_path/ s[=.*[&:/usr/local/bin[' /etc/sudoers

ou um pouco mais sofisticado (mais verificação de sintaxe na entrada):

sed -i -r -e '/^\s*Defaults\s+secure_path/ s[=(.*)[=\1:/usr/local/bin[' /etc/sudoers
tonioc
fonte