Estou escrevendo um script (na verdade uma combinação de scripts e makefile) que instala dependências externas: alguns apt-get
comandos, alguns git
clonando, 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:
git
repos clono getroot
como proprietário, o que significa que não posso modificá-los posteriormente semsudo
ouchown
- os scripts que adicionam usuários a grupos não sabem qual usuário adicionar desde que
whoami
retornaroot
Qual é a melhor maneira de executar como superusuário apenas os comandos que exigem isso? Idealmente, o processo ainda exigiria que eu digite minha sudo
senha, 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 -v
no 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 -k
fechar a sessão de superusuário
su $SUDO_USER -c command
os comandos para executar como usuário normal.
SUDO_USER
variá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.