
Eu tenho um programa Java que uso para automatizar o processo de criação de configurações de VPN para clientes. O programa chama alguns scripts bash, cria e copia arquivos. Eu tenho que executá-lo como usuário root porque toda a configuração da VPN está em/etc/openvpn. Para este diretório, preciso de privilégios de root. Na mesma máquina tenho o servidor de aplicação Glassfish e ele chamará o programa Java mencionado. Glassfish é executado sob usuário não root.
Qual é a melhor e mais segura maneira de executar um programa como usuário root, é claro, sem inserir uma senha, se eu executá-lo via sudo?
Responder1
a opção mais segura seria descobrir a qual grupo o openvpn pertence e adicionar um usuário não privilegiado com acesso a ele -a maneira recomendada é criar um usuário openvpne conceda privilégios para usar openvpn usando sudo.
Adicionar o usuário sob o qual você executa este programa ao grupo (provavelmente com apenas acesso de leitura) para dar-lhe acesso ao openvpn e dar-lhe os privilégios sudo necessários (para executar o openvpn - configurações idênticas às que o usuário do openvpn usa) deve resolver o problema com segurança.
Usar root é uma maneira preguiçosa;)
Responder2
O que descobri é que, além de executar um comando como sudo sem digitar a senha, existem duas opções:
- eco SENHA | sudo -S COMANDO
adicionando a seguinte linha ao /etc/sudoers
nome de usuário ALL=(ALL) NOPASSWD: COMMAND
Observe que esta linha deve estar depois de todas as definições de grupo. Você pode verificar quais privilégios sudo você possui usando sudo -l
. Para este caso, isso produz:
(ALL) ALL
(ALL) NOPASSWD: COMMAND
Isso significa que para todos os comandos será necessária senha, exceto para o COMMAND. Se colocássemos username ALL=(ALL) NOPASSWD: COMMAND
antes das definições de grupo, sudo -l
produziríamos:
(ALL) NOPASSWD: COMMAND
(ALL) ALL
Isso ainda exigiria uma senha para o COMMAND, já que (ALL) ALL
é especificada após a linha NOPASSWD.