Sto scrivendo uno script (in realtà una combinazione di script e makefile) che installa dipendenze esterne: alcuni apt-getcomandi, alcuni gitclonazione, costruzione, installazione, aggiunta di utenti a gruppi, ...
Alcune delle operazioni in questi script richiedono autorizzazioni di superutente, altre no.
Fino ad ora ho eseguito l'intero processo di creazione con sudo, ma presenta alcuni svantaggi:
gitrepository Clone getrootcome proprietario, il che significa che non posso modificarli in seguito senzasudoochown- gli script che aggiungono utenti ai gruppi non sanno quale utente aggiungere poiché
whoamirestituisceroot
Qual è il modo migliore di eseguire come superutente solo i comandi che lo richiedono? Idealmente, il processo richiederebbe comunque di inserire la mia sudopassword, ma solo una volta all'inizio del processo di installazione. Lo dimenticherebbe alla fine, ma lo manterrà per tutto il tempo fino a quel momento (può richiedere diverse ore).
Le soluzioni che ho trovato online includono:
sudo -vall'inizio del copione, ma se capisco correttamente questo timeout. La mia sceneggiatura potrebbe durare un paio d'ore- eseguendo lo script con
sudo, ma i comandi che non richiedono superutente consudo -u $(logname) <command>. Questo è quello che faccio ora, ma sembra che dovrebbe essere il contrario.
Idealmente, vorrei che la mia sceneggiatura:
- richiedere le credenziali del superutente
- eseguire i normali comandi come l'utente che ha effettuato l'accesso
- eseguire i comandi sudo con le credenziali immesse al passaggio 1
sudo -kper chiudere la sessione del superutente
su $SUDO_USER -c commandi comandi come normali utenti.
SUDO_USERvariabile di ambiente. Se presente, conterrà il nome utente dell'utente che invoca sudo. Quindi puoi (come root) chown $ SUDO_USER: $ SUDO_GID $ your_files. Allo stesso modo, puoi controllare queste variabili in modo che i tuoi comandi adduser sappiano quale utente aggiungere.