Lo bonito de GNU/Linux es que tienes control absoluto sobre tu sistema, pero evidentemente este control no lo tienen todos los usuarios, sino solo los que tengan que tenerlo. Históricamente dicho usuario ha sido siempre root ("raíz" en inglés).
Sin embargo, tener que cerrar tu sesión y abrir una nueva para administrar el sistema es una pesadez, para lo cual existen herramientas que te permiten adquirir temporalmente sus privilegios.
Las 2 principales herramientas que conozco para esto son
su
y
sudo
, herramientas que pueden usarse conjuntamente, aunque recomiendo decidirse por una y
quitar la otra, según los gustos del administrador.
¿En qué se diferencian?
Básicamente, al usar su
, debes introducir la contraseña de
root, y dicho usuario debe estar activado, mientras que al usar
sudo
, debes introducir tu contraseña de siempre, debes estar autorizado a
usarlo en el fichero
/etc/sudoers, y no es
necesario que exista un usuario activado llamado root.
Otra diferencia importante es que su
te pide la contraseña para cada vez
que lo utilizas, mientras que sudo
no te vuelve a pedir la contraseña
hasta pasado un tiempo desde que lo usaste por primera vez.
Hay otras diferencias respecto al comportamiento estándar de cada herramienta, pero no son diferencias tan importantes. Me refiero a:
-
Cuando ejecutas
su
, pasas a usar un shell de root en el que escribes los comandos que quieres realizar, mientras quesudo
suele utilizarse como prefijo a otro comando, que es ejecutado con permisos de root. -
Al usar
sudo
, conservas las variables de entorno del usuario que lo usa, mientras quesu
adquiere las variables de root.
He dicho que no son diferencias importantes porque cada herramienta proporciona métodos para comportarse más o menos como la otra. Veámoslos.
Comportamiento estándar de su
:
yo@pc:~$ su root@pc:/home/yo# echo $HOME /root root@pc:/home/yo# exit
Vemos cómo primero nos pide la contraseña de root, y luego abre una
shell de root, y la variable $HOME
(directorio de usuario)
es la de root también. Ahora veamos el comportamiento estándar de
sudo
:
yo@pc:~$ sudo echo $HOME /home/yo
En este caso sudo
es un prefijo que ejecuta solo un comando, y preserva
las variables de entorno. Además la contraseña que nos pedirá es la nuestra. Ahora
vamos a emular el comportamiento de sudo
con su
:
yo@pc:~$ su --preserve-environment --command="echo \$HOME" /home/yo
Notaréis que en este caso hay que pasar el comando como una cadena de caracteres, por
eso he escapado el símbolo del dólar poniendo una barra invertida delante.
Ahora emularemos el comportamiento de su
con sudo
.
yo@pc:~$ sudo -i # Si quieres iniciar la shell pero preservar las variables, usa sudo -s root@pc:/home/yo# echo $HOME /root root@pc:/home/yo# exit
Como vemos son herramientas muy versátiles.
¿Por cuál debería decidirme?
Es una cuestión de gustos. Personalmente prefiero sudo
, ya que no es
necesario crear un usuario administrador y otro para uso normal, sino que es el mismo
para ambas tareas, y permite que existan varios administradores en el mismo sistema
sin necesidad de que ambos sepan la contraseña de root.
Precauciones a la hora de cambiar de su
a sudo
y
viceversa
Antes de desinstalar la herramienta que no vayas a usar, asegúrate de que la nueva
funciona a la perfección, ya que de otro modo podrías perder el acceso
root y te quedarías sin poder administrar tu sistema.
En caso de decantarte por sudo
, es interesante desactivar la cuenta de
root, ya que ya no es necesaria. Para ello:
$ sudo passwd --lock root
Para reactivarla, si te hiciera falta más adelante:
$ sudo passwd --unlock root
Si decides cambiar el método, puedes encontrar problemas
Quizá os interese saber que Ubuntu usa por defecto sudo
, mientras que
Debian usa su
, aunque ambas distribuciones permiten cambiarlo luego como
prefieras.
Siendo así, es posible que experimentes problemas de configuración si cambias de
herramienta. Por ejemplo, si usas aptitude
en modo interactivo, al usar
la opción de obtener privilegios de administrador en Debian, tratará de usar
su
aunque no esté instalado, y saltará un error. Para ello deberás
configurarlo para que utilice sudo
:
$ echo 'aptitude::Get-Root-Command "sudo:/usr/bin/sudo";' >> ~/.aptitude/config
Tambiéntendrías que configurar gksu
, la herramienta que se usa en Gnome
para otorgar los privilegios, para que use el sistema que hayas elegido. En el mismo
supuesto de antes sería:
$ gconftool-2 --type bool --set /apps/gksu/sudo-mode true