Nombre de usuario antes de sudo


8

Obtuve un script que requiere sudo, pero el script debe establecer parámetros de acuerdo con el usuario original, como:

chown "${USER}:${USER}" dir

Si lo configuro en sudo, solo termino con chmod root:root, lo que no ayuda.

Entonces, ¿cómo puedo obtener el nombre de usuario antes de sudo?

Respuestas:


11

La variable de entorno SUDO_USER debería funcionar como un reemplazo para USER.

Dado que está configurando la propiedad como USUARIO: USUARIO ¿Asumo que siempre hay un grupo con el mismo nombre que el usuario? Una solución más estricta podría ser utilizar SUDO_UID y SUDO_GID.

Dos posibles soluciones serían:

chown "${SUDO_USER}:${SUDO_USER}" dir

o

chown "${SUDO_UID}:${SUDO_GID}" dir

Respuesta agradable, con la solución Y algunas informaciones adicionales.
e-satis

Usar el UID / GID es la mejor solución, ya que es posible tener múltiples UID con el mismo nombre de usuario.
duffbeer703

4

Puedes usar la SUDO_USERvariable:

sudo bash -c 'echo $SUDO_USER'

Desde la página de manual de sudo :

sudo utiliza las siguientes variables de entorno. La política de seguridad tiene control sobre el contenido real del entorno del comando. [...]

SUDO_UID Establezca el ID de usuario del usuario que invocó sudo.

SUDO_USER Establezca el nombre de usuario del usuario que invocó sudo.


Pero, ¿por qué sudo echo $SUDO_USERno produce nada?
Robert

1

SUDO_USER puede ser sobrescrito por el usuario.

 $ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
 USER=root
 SUDO_USER=test
 USERNAME=root

Debería usar 'who am i' o 'logname' para obtener el nombre de usuario original

toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname             
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto   pts/4        Jan 23 15:13 (:0.0)

Viniendo de /programming/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-commands


Después de ejecutar 'sudo su -' las variables de entorno no están disponibles, pero lognamey who am iel trabajo.
RickMeasham

Tienes razón, no es posible confiar en la variable de entorno.
cladmi

Se encontró en algún host que SUDO_USER no se puede sobrescribir: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER por lo tanto, aún puede ser seguro, aún así debe verificar esto.
cladmi

Es porque mi comando está configurado como "NOPASSWD", por lo que depende de la configuración de su sudoers a través de "NOSETENV".
cladmi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.