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 que sudo 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 que su 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