Estou escrevendo um script (na verdade uma combinação de scripts e makefile) que instala dependências externas: alguns apt-getcomandos, alguns gitclonando, construindo, instalando, adicionando usuários a grupos, ...
Algumas das operações nesses scripts requerem permissões de superusuário, outras não.
Até agora, eu executei todo o processo de criação com o sudo, mas ele tem algumas desvantagens:
gitrepos clono getrootcomo proprietário, o que significa que não posso modificá-los posteriormente semsudoouchown- os scripts que adicionam usuários a grupos não sabem qual usuário adicionar desde que
whoamiretornaroot
Qual é a melhor maneira de executar como superusuário apenas os comandos que exigem isso? Idealmente, o processo ainda exigiria que eu digite minha sudosenha, mas apenas uma vez no início do processo de instalação. Esquecê-lo-ia no final, mas mantenha-o o tempo todo até lá (pode levar várias horas).
As soluções que encontrei online incluem:
sudo -vno início do script, mas se eu entendi corretamente, isso expira. Meu script pode estar em execução por algumas horas- executando o script com
sudo, mas os comandos que não precisam de superusuáriosudo -u $(logname) <command>. É isso que faço agora, mas parece que deveria ser o contrário.
Idealmente, eu gostaria que meu script:
- solicitar credenciais de superusuário
- executar comandos normais como o usuário conectado
- execute comandos sudo com as credenciais inseridas na etapa 1
sudo -kfechar a sessão de superusuário
su $SUDO_USER -c commandos comandos para executar como usuário normal.
SUDO_USERvariável de ambiente. Se presente, ele conterá o nome de usuário do usuário que está chamando o sudo. Então você pode (como root) mostrar $ SUDO_USER: $ SUDO_GID $ your_files. Da mesma forma, você pode verificar essas variáveis para que seus comandos adduser saibam qual usuário adicionar.