Acerca de sudo

+1
+1
-1

Algunas de las preguntas que más se repiten cuando alguien que no conoce Ubuntu lo instala por primera vez tienen relación con sudo:

  • ¿Donde está la cuenta de root?
  • Necesito ejecutar dsafkljsd como root y no me funciona su (o gksu)

En esta anotación no voy a justificar la decisión de Ubuntu de gestionar la administración del sistema con sudo, simplemente voy a tratar de explicar a grandes rasgos como se puede trabajar con sudo.

Lo primero, ¿qué es sudo?:
Se podría decir que sudo es un sistema de autorización. Es decir, en cualquier máquina con GNU/Linux existe un usuario que es el todopoderoso (root), que es el que puede administrar la máquina a su antojo. Pues bien, en el caso de Ubuntu, ese todopoderoso se ha ido de vacaciones y nos ha dejado un sustituto (que es el usuario que se crea en el proceso de instalación) con la autorización para hacer todo lo que suele hacer root.
Entonces, ¿ese usuario es root?
No, ni mucho menos, ese usuario puede hacer todas las labores que hace root pero siempre que muestre la autorización, si no va con la autorización colgada del pecho no podrá abrir muchas puertas.

Pues eso es sudo, ni más ni menos, la autorización que se le da a un usuario, y que éste debe enseñar, para que pueda tener acceso a determinados lugares.

Por eso cuando se necesita ejecutar algo que sólo puede hacer root, y no podemos o queremos despertar a root, se debe hacer a través de sudo (o gksudo), es decir el usuario le dice el sistema eh, que estoy autorizado y el sistema le pide la documentación para ver que realmente se trata del autorizado (vuelve a pedir la password del usuario).

Evidentemente esto no lo puede hacer cualquier usuario, únicamente podrán aquellos que cuenten con la autorización oportuna (que se guarda en el fichero /etc/sudoers).

Además las autorizaciones pueden ser parciales o totales. En el caso de Ubuntu y ese primer usuario que se crea durante la instalación, la autorización que se le concede es total, es decir afecta a cualquier comando del sistema (incluso a los futuros que se puedan instalar).

Sin embargo se pueden dar autorizaciones parciales (configurando adecuadamente /etc/sudoers pero eso no lo voy a hacer aquí porque no es el objeto de esta anotación), consiguiendo que un usuario pueda tener autorización para ejecutar, como root, un reducido número de comandos.

Por ejemplo, supongamos que queremos que nuestro hijo mayor (o nuestro padre, o hermano, o pareja, ...) pueda instalar nuevos programas a través del Gestor de paquetes Synaptic, podemos hacer dos cosas, o bien le damos a su usuario el rol de administrador (es decir le autorizamos a que pueda hacer cualquier cosa como si fuera root) o restringimos esa autorización únicamente al programa synaptic (mediante la configuración en /etc/sudoers). En el segundo caso, podrá instalar programas a través de synaptic pero no podrá cambiar la configuración del arranque de la máquina (por ejemplo).

Entonces, ¿qué hago cuando tengo que instalar los drivers de JHGF y las instrucciones me dicen que lo haga como root?
Ejecutarlo con sudo.

Supongamos que nos hemos descargado los drivers de JHGF (fichero drivers-jhgf-1.0.2.tar.gz).
Lo descomprimimos y nos crea el directorio drivers-jhgf-1.0.2 con el siguiente contenido:

  • README.txt
  • download-deps.sh
  • install-jhgf.sh

Nos leemos README.txt y nos encontramos con las siguientes instrucciones:

# Accede como root
su
# Comprueba, descarga e instala dependencias
./download-deps.sh
# Ejecuta la instalación
./install-jhgf.sh
exit

Está claro que si intentamos seguir estas instrucciones nos quedamos atrancados en el primer paso, así tenemos que hacer una pequeña traducción a Ubuntu:

# Comprueba, descarga e instala dependencias
sudo ./download-deps.sh
# Ejecuta la instalación
sudo ./install-jhgf.sh

Pero, ¿qué ocurre si en lugar de tener que ejecutar un par de comandos como root tenemos que hacer un montón de cosas más como si fueramos root (por ejemplo editar varios ficheros de configuración)?. ¿Tenemos que estar escribiendo sudo delante de cada acción que queramos hacer?

Esa es una posibilidad, pero no la única, en el ejemplo anterior podriamos haber hecho otra cosa, algo distinta:

# Accede como root
sudo -s
# Comprueba, descarga e instala dependencias
./download-deps.sh
# Ejecuta la instalación
./install-jhgf.sh
exit

Por tanto si tenemos que lanzar varios comandos como root una buena posibilidad es utilizar sudo -s para acceder como root y a partir de ahí ejecutar lo que se necesite sin escribir sudo.

Además en este segundo caso se puede ver que la traducción de las instrucciones ha consistido, simplemente, en sustituir su por sudo -s quedando el resto igual.

¿Y qué pasa si tengo que abrir Nautilus (u otra aplicación gráfica) como root?
Pues utilizamos gksudo. Por ejemplo gksudo -u root nautilus --no-desktop abre Nautilus como root después de preguntarnos en una ventanita por nuestra contraseña. Tan solo tenemos que crearnos un lanzador que ejecute lo anterior y pulsarlo cuando queramos tener esa funcionalidad. Aquí se puede encontrar un script para Nautilus que hace precisamente eso a golpe de ratón (una vez instalado simplemente hay que seleccionar en el menú que aparece con el botón auxiliar, derecho para diestros, Script->Nautilus Root o como lo hayamos llamado).
Ahora bien, ¿me merece la pena activar la cuenta de root y eliminar sudo?
Me temo que la respuesta será diferente según quién se la plantee. Tan solo hay que recordar que Ubuntu viene preparado para sudo y que todas las opciones de menú que son tareas administrativas, y hay unas cuantas, están configuradas con gksudo, por tanto si vamos a activar la cuenta de root y desinstalar o desactivar sudo tendremos que modificar todas esas opciones del menú para sustituir gksudo por gksu, al menos si queremos que funcionen

----

Extraido de aquí.