En este artículo voy a explicar cómo cambiar de usuario en los sistemas operativos Linux y *BSD desde línea de comandos, proveyendo un entorno para la nueva sesión (variables, aliases, etc.)

A veces es necesario realizar tareas desde línea de comandos como si fuésemos otro usuario. Por ejemplo necesitamos correr algún comando a nombre del servidor Web Apache. Para ello es necesario pasar al usuario "www-data" en Debian y derivados.

En los sistemas operativos de la familia Unix, el comando su permite cambiar de usuario, o volverse superusuario (root). Veamos un ejemplo.

Actualmente me encuentro "logueado" como el usuario root (superusuario, un equivalente a "Administrator" en los sistemas operativos Windows):

root@debian:~# whoami
root
root@debian:~# groups
root
root@debian:~# id
uid=0(root) gid=0(root) groups=0(root)

Se observa además que root pertenece al grupo homónimo.

La sintaxis básica del comando su es la siguiente:

su USUARIO

Si no se especifica un nombre de usuario, su pasa a superusuario. Lógicamente no cualquiera puede pasar a superusuario, sino que es necesario conocer la contraseña de root.

root puede pasar a cualquier usuario sin necesidad de conocer la contraseña. De eso se trata ser superusuario, tener control total sobre el sistema. El resto de los usuarios necesitan conocer la contraseña del usuario al que desean cambiar. Si deseo cambiar del usuario "www-data" a "postgres", necesitaré indicar la contraseña de "postgres" de forma interactiva.

Para pasar al usuario "www-data", simplemente ejecutar su www-data:

root@debian:~# su www-data
$ whoami
www-data
$ groups
www-data
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Esto abre una nueva sesión (en una subshell) a nombre del usuario "www-data", y la sesión original como root queda en segundo plano.

Para finalizar la sesión como "www-data" y volver a la sesión original, simplemente ejecutar exit:

$ exit
root@debian:~#

Cambiar de usuario cargando el perfil

En general es deseable contar con el entorno (variables, aliases, etc.) al cambiar de usuario. Esto es simular un login completo. Utilicemos la variable de entorno PATH como ejemplo para entender qué sucede si no cargamos el entorno:

root@debian:~# su www-data
$ env | grep ^PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Se observa que la variable PATH posee el valor por defecto de la distribución (Debian).

En su forma genérica, su abre una subshell sin cargar el entorno del perfil. Para cargar el perfil (entorno) es necesario agregar la opción - (o -l):

root@debian:~# su - www-data
$ env | grep ^PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/go/bin:/var/www/gopath:/var/www/gopath/bin

Se observa que ahora la variable PATH tiene el contenido definido en el perfil de bash, llamado startup file (/etc/profile).

Además es posible preservar el entorno de la sesión actual (root) en la nueva sesión (www-data) utilizando la opción -m (tanto en GNU/Linux como en *BSD).

Referencias

man su
man env
man bash
man sh
man whoami
man groups
man id

 

Fuente: linuxito

¿Quién está en línea?

Hay 14196 invitados y ningún miembro en línea