Sto scrivendo uno script (in realtà una combinazione di script e makefile) che installa dipendenze esterne: alcuni apt-get
comandi, alcuni git
clonazione, 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:
git
repository Clone getroot
come proprietario, il che significa che non posso modificarli in seguito senzasudo
ochown
- gli script che aggiungono utenti ai gruppi non sanno quale utente aggiungere poiché
whoami
restituisceroot
Qual è il modo migliore di eseguire come superutente solo i comandi che lo richiedono? Idealmente, il processo richiederebbe comunque di inserire la mia sudo
password, 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 -v
all'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 -k
per chiudere la sessione del superutente
su $SUDO_USER -c command
i comandi come normali utenti.
SUDO_USER
variabile 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.