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?

e-satis
fuente

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
andol
fuente
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.

Kyle Brandt
fuente
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

cladmi
fuente
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