Estoy escribiendo un script (en realidad, una combinación de scripts y makefile) que instala dependencias externas: algunos apt-get
comandos, algunos git
clonando, 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:
git
repos clones obtengoroot
como propietario, lo que significa que no puedo modificarlos después sinsudo
ochown
- los scripts que agregan usuarios a grupos no saben qué usuario agregar ya que
whoami
devuelveroot
¿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 sudo
contraseñ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 -v
al 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 -k
para cerrar la sesión de superusuario
su $SUDO_USER -c command
los comandos como usuario normal.
SUDO_USER
variable 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.