viernes, 9 de mayo de 2008

¿Cómo Convertirse en Root ?

1. Usando el comando su
Algunos comandos solo pueden ser ejecutados como el usuario root, así que para correr estos comandos necesitamos convertirnos en "root". Para hacer esto, podemos usar el comando su (Sustituir Usuario). El comando toma la forma siguiente:

su -

o

su

Comunmente usamos el comando su para convertirnos en el usurio root:

su - root

o

su root

Si ningún nombre de usuario es especificado, entonces se asume al usuario root, así que a menudo lo de arriba lo podemos abreviar de la siguiente forma:

su -

o

su

Los dos comandos de arriba tienen comportamientos diferentes. El comando su le da al usuario actual la identidad de mientras que el comando su - le da al usuario actual la identidad de junto con sus variables de entorno que serían obtenidas cuando se autentifique.

A menudo, un usuario que se convierte en root usando solamente su puede obtener el error command not found. Por ejemplo intente ejecutar el comando ifconfig de la siguiente forma:

su
Password:
ifconfig
bash: ifconfig: command not found

La razón es que los usuarios regulares del sistema y el usuario root tienen valores diferentes en la variable de entorno PATH (puedes ver el valor de la variable PATH para un usuario con el comando echo $PATH). Cuando usted escribe un comando Linux, el shell buscará los caminos que tiene decalrado el usuario en su variable PATH para ubicar el comando que intenta ejecutar. Se intenta buscar en cada directorio especificado en la variable PATH hasta que la búsqueda sea satisfactoria.

Los comandos para los usuarios regulares del sistema están ubicados, en su mayoría, en /usr/local/bin, /usr/bin, y /bin. Sin embargo, los comandos de root están ubicados, en su mayoría, en /usr/local/sbin, /usr/sbin, y /sbin. Esto está reflejado en la variable de entorno PATH del usuario root.

Cuando usted se convierte en el usuario root usando su - se adoptan los valores de la variable PATH del usuario root mientras que si utiliza su solamente permanecen solo las del usuario inicial. Por esta razón es que al convertirnos en root con el comando su e intentar ejecutar comandos ubicados en /usr/local/sbin, /usr/sbin o /sbin se muestra el error command not found. Para más detalles sobre este tema, puede consultar el manual de bash (man bash), particularmente la sección INVOCATION y login del shell.

De esta forma, si utiliza el comando su usted puede especificar el camino completo del comando a utilizar (ej. /sbin/ifconfig) o usar el comando su - para convertirse en root.

2. Usando el comando sudo

Usted no tiene que ser root cada vez que desee ejectuar algunas tareas administrativas
específicas. Gracias a sudo, usted puede ejecutar algunos o cada comando como root. Una vez que sudo es instalado (el nombre del paquete es sudo), puede configurarlo ejecutando el comando visudo como root. Básicamente, este comando ejecuta el editor especificado en la variable de entorno $EDITOR (por defecto vim) en /etc/sudoers, debido a que no es aconsejable hacerlo manualmente.

Si usted está en una estación de trabajo, posiblemente desee hacer de todo en ella. Una forma rápida de lograrlo es usando sudo y adicionar al final del fichero sudoers:

bob ALL=(ALL) ALL
donde bob es el nombre del usuario. Salve (presionando escape y luego ZZ) y todo estará listo. Autentifíquese como bob y ejecute el comando siguiente, por ejemplo:

sudo yum update

sudo le preguntará una contraseña. Esta contraseña es la contraseña del usuario bob y no la de root. Sea cuidadoso cuando le de derechos a un usuario con el comando sudo.

Pero sudo puede hacer más aún. Podemos permitirle a un usuario o a un grupo de usuarios ejecutar solo un comando o grupo de comandos. Regresemeos a nuestro fichero sudoers (que de hecho está muy bien comentado en CentOS-5). Comencemos con los usuarios bob y alice, ambos miembros del grupo con el nombre admin. Si deseamos que todos los usuarios del grupo admin tengan la posibilidad de ejecutar cada comando como root, entonces modificamos nuestro ejemplo de la siguiente forma:

%admin ALL=(ALL) ALL

bob continúa con sus derechos y ahora se le permitió a alice ejecutar sudo, con los mismos derechos, usando su contraseña de usuario. Si bob y alice no estuviesen en el mismo grupo podríamos definir un alias o sobrenombre en el fichero sudoers:

User_Alias ADMINS = alice, bob
aquí definimos un alias con el nombre ADMINS, con los miembros alice y bob.

Sin embargo, no deseamos que alice y bob ejecuten todos los comandos como root. Necesitamos que ellos ejecuten solo el comando updatedb. Vamos a definir un alias de comando:

Cmnd_Alias LOCATE = /usr/sbin/updatedb
Ahora necesitamos decirle a sudo que los usuarios definidos en ADMINS pueden ejecutar los comandos definidos en LOCATE. Para hacer esto, remplazamos la línea de %admin con la siguiente:

ADMINS ALL = LOCATE
Esto significa que los miembros del alias ADMINS pueden ejecutar todos (ALL) los comandos en el alias LOCATE.

En estos momentos, /etc/sudoers se ve cómo a continuación:

User_Alias ADMINS = alice, bob
Cmnd_Alias LOCATE = /usr/bin/updatedb
ADMINS ALL = LOCATE
alice y bob serán capaces de ejecutar sudo updatedb sin entrar una contraseña.

Es posible adicionar más comandos en el alias de comando y más aliases en la regla. Por ejemplo, podríamos crear un alias con el nombre NETWORKING que contenga algunos comandos de red como ifconfig, route o iwconfig:

Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
/usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
Vamos a adicionarlo a nuestros fichero /etc/sudoers (con el comando visudo!) y vamos a darle acceso a nuestro grupo de usuarios ADMINS. Ahora el fichero /etc/sudoers se muestra de la siguiente forma:

User_Alias ADMINS = alice, bob
Cmnd_Alias LOCATE = /usr/bin/updatedb
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,
/usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
ADMINS ALL = LOCATE, NETWORKING
Una pequeña prueba: autentifíquese como alice (o bob) y escriba:

$ping -c 10 -i 0 localhost
la respuesta debe aparecer rápidamente:

PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
ping: cannot flood; minimal interval, allowed for user, is 200ms
Ahora, vamos a probarlo usando sudo:

$sudo ping -c 10 -i 0 localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=3 ttl=64 time=0.021 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=4 ttl=64 time=0.030 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=5 ttl=64 time=0.017 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=6 ttl=64 time=0.016 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=7 ttl=64 time=0.016 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=8 ttl=64 time=0.016 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=9 ttl=64 time=0.016 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=10 ttl=64 time=0.016 ms
--- localhost.localdomain ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 1ms
rtt min/avg/max/mdev = 0.016/0.023/0.049/0.010 ms, ipg/ewma 0.187/0.028 ms
sudo a menudo es usado para darle acceso parcial a determinados usuarios sobre comandos privilegiados de forma tal que ellos puedan realizar tareas administrativas de forma limitada. Una característica interesante de sudo es que todos los comandos ejecutados con sudo son registrados en /var/log/secure. Por ejemplo, el comando del ejemplo anterior escribe una línea como la siguiente:

Apr 18 11:23:17 localhost sudo:
bob : TTY=pts/0 ;
PWD=/home/bob ; USER=root ;
COMMAND=/bin/ping -c 10 -i 0
localhost
Ahora, siempre que use sudo, recuerde: ... con grandes poderes vienen grandes responsabilidades ... .

3. Ayuda en el gráfico

3.1. GNOME

Por hacer ...

3.2. KDE

La opción Ejecutar Comando... en el menú de KDE tiene la facilidad (bajo Opciones) de ejecutar un comando o una aplicación como un usuario diferente al suministrar las credenciales de dicho usuario. Los usuarios que se sientan menos confiados en la línea de comando y que necesitan realizar tareas que requieren privilegios de root, pueden considerar los métodos basados en la interfaz gráfica de usuario (GUI) como una alternativa.

4. consolhelper

consolhelper es una envoltura para ejecutar aplicaciones GUI. Cuando se inicia, verifica la configuración de los Módulos de Autenticación Conectables (en inglés Pluggable Authentication Modules [ PAM ]) para la aplicación en cuestión. Esto significa que podemos autenticar usuarios con todos los módulos PAM instalados.

El método básico es preguntar una contraseña, pero si tenemos el hardware adecuado, podemos además autenticar smartcards, tokens, fingerprints, etc. La configuración de PAM está más allá del objetivo de este documento (vea la Guía del Administrador PAM). De esta forma solo mostraremos cómo configurarlo cuando necesitemos que consolhelper ejecute una aplicación como root y pregunte una contraseña.

A modo de ejemplo, vamos a configurar /usr/bin/xterm para que se invoque como root.

Primero, y debido a que queremos conservar la posibilidad de ejecutar xterm como un usuario normal, creamos un enlace simbólico con el nombre /usr/bin/xterm-root a /usr/sbin/consolhelper:

ln -s /usr/sbin/consolehelper /usr/bin/xterm-root
Ahora para configurar PAM. Creemos el fichero /etc/pam.d/xterm-root

#%PAM-1.0
auth
include config-util
account
include config-util
session
include config-util
Finalmente, configuramos consolhelper para ejecutar /usr/bin/xterm como el usuario root cuando se inicie como xterm-root. Seguidamente, cree el fichero /etc/security/console.apps/xterm-root:

USER=root
PROGRAM=/usr/bin/xterm
Ahora, ejecute xterm-root (desde la línea de comando o desde un fichero .desktop), introduzca la contraseña de root y disfrútelo. En caso que obtenga un error Xlib: connection to ":0.0" refused by server, ejecute primero xhost local:root.
Idiomas: English

No hay comentarios: