Estoy escribiendo un script (en realidad, una combinación de scripts y makefile) que instala dependencias externas: algunos apt-getcomandos, algunos gitclonando, construyendo, instalando, agregando usuarios a grupos, ...
Algunas de las operaciones en estos scripts requieren permisos de superusuario, otras no.
Hasta ahora he ejecutado todo el proceso de creación con sudo, pero tiene algunos inconvenientes:
gitrepos clones obtengorootcomo propietario, lo que significa que no puedo modificarlos después sinsudoochown- los scripts que agregan usuarios a grupos no saben qué usuario agregar ya que
whoamidevuelveroot
¿Cuál es la mejor manera de ejecutar como superusuario solo los comandos que lo requieren? Idealmente, el proceso aún requeriría que ingrese mi sudocontraseña, pero solo una vez al comienzo del proceso de instalación. Luego lo olvidaría al final, pero manténgalo todo el tiempo hasta entonces (puede tomar varias horas).
Las soluciones que he encontrado en línea incluyen:
sudo -val comienzo del guión, pero si entiendo correctamente, esto agota el tiempo de espera. Mi script podría estar ejecutándose por un par de horas- ejecutando el script con
sudo, pero los comandos que no necesitan superusuario consudo -u $(logname) <command>. Esto es lo que hago ahora, pero parece que debería ser al revés.
Idealmente, me gustaría que mi guión:
- solicitar credenciales de superusuario
- ejecutar comandos normales como el usuario conectado
- ejecutar comandos sudo con las credenciales ingresadas en el paso 1
sudo -kpara cerrar la sesión de superusuario
su $SUDO_USER -c commandlos comandos como usuario normal.
SUDO_USERvariable de entorno. Si está presente, contendrá el nombre de usuario del usuario que invoca sudo. Por lo tanto, puede (como root) chown $ SUDO_USER: $ SUDO_GID $ your_files. Del mismo modo, puede verificar estas variables para que sus comandos adduser sepan qué usuario agregar.