Qual é a maneira mais segura de usar permissões sudo em um script?

4

Eu tenho um script bash que precisa executar algumas ações usando sudo , ambas com permissões de usuário root e permissões para outros usuários, como o usuário principal em um banco de dados postgres. Essas ações precisam ser executadas sem usar uma senha, as principais ações são copiar alguns arquivos, especificados por um arquivo de lista, que só podem ser acessados pelo root, para consultar se existe um banco de dados postgres com um determinado nome e para obter um dump o banco de dados.

O usuário que executa os scripts é responsável por executar alguns scripts diferentes. Entendo que posso editar o arquivo /etc/sudoers com visudo com uma linha como:

user ALL=(pg_dump_user) NOPASSWD:/usr/bin/pg_dump

ou

user ALL=(pg_dump_user) NOPASSWD:/usr/bin/psql -lqt

Eu sei que posso tornar os comandos no arquivo sudoers um pouco mais específicos, adicionando opções de comando, etc.

Seria mais seguro chamar um script, que é apenas editável por root e usando esse script nas entradas dos sudoers. Obviamente, com essa abordagem, preciso garantir que as permissões de diretório para o local do script estejam corretas ou que possam ser substituídas por algo mal-intencionado. Há outras ações que eu possa tomar para tornar isso mais seguro?

    
por Arronical 05.10.2016 / 12:45

1 resposta

0

A solução mais fácil é apenas habilitar seu script em sudoers. Isso não deve introduzir problemas como a substituição do script ... desde que nenhum dos diretórios pai seja gravável para usuários não-root. No entanto, quaisquer erros de segurança em seu script seriam executados como o usuário de destino, o que poderia introduzir algo desagradável.

A solução mais segura é escalar apenas quando necessário usando o sudo dentro do seu script ou então escrever seu script com muito cuidado e obter seu código auditado por alguém familiarizado com suas preocupações de segurança.

Em @o segundo comentário de muru à questão , supôs-se que quanto mais simples fosse a linguagem de script (e o código), menos propenso a ter uma falha de segurança. Eu concordo com isso. Limitá-lo a traço (supondo que você tem traço como / bin / sh ) realmente ajudará nisso. O uso de uma linguagem mais abrangente, como o python, aumenta as possibilidades do que você quer e do que pode dar errado, por isso só sugiro que você se sinta mais à vontade com ele do que com um simples shell script POSIX.

Em última análise, isso depende do que seu código faz. Descobrir seus riscos e quanto esforço seria necessário para controlá-los e, em seguida, pesar uns contra os outros. Quem poderia abusar disso? O Sudo deixa uma trilha de auditoria, então a ameaça de ser demitido ou expulso é suficiente para manter os possíveis agressores na linha?

    
por Adam Katz 03.07.2017 / 22:23