Resumen ejecutivo: "root" es el nombre real de la cuenta de administrador. "sudo" es un comando que permite a los usuarios comunes realizar tareas administrativas. "Sudo" no es un usuario.
Respuesta larga:
"root" (también conocido como "superusuario") es el nombre de la cuenta de administrador del sistema. Los orígenes del nombre son un poco arcaicos, pero eso no importa.
El usuario raíz tiene una identificación de usuario 0 y nominalmente tiene privilegios ilimitados. Root puede acceder a cualquier archivo, ejecutar cualquier programa, ejecutar cualquier llamada al sistema y modificar cualquier configuración. (Pero ver más abajo¹).
Antes de la invención del comando "sudo", si deseaba realizar tareas administrativas, tenía que iniciar sesión como root, ya sea obteniendo una solicitud de inicio de sesión² de alguna manera, o con el su
comando ("su" es la abreviatura de usuario sustituto) ³
Eso es un poco complicado, y tampoco le permite otorgar a los usuarios poderes administrativos parciales. Entonces se inventó el comando "sudo" (abreviatura de "usuario sustituto do").
El comando "sudo" le permite ejecutar comandos con privilegios de superusuario siempre y cuando su identificación de usuario esté en el archivo sudoers, otorgándole la autorización necesaria.
Entonces, por ejemplo, sudo vi /etc/hosts
le permitiría editar el archivo de hosts como si estuviera ejecutando como root. Ni siquiera necesita la contraseña de root, solo su propia contraseña de inicio de sesión.
Y, por supuesto, sudo su
te permitiría simplemente convertirte en root. El resultado es el mismo que si hubiera iniciado sesión como root o haya ejecutado el su
comando, excepto que no necesita conocer la contraseña de root, pero sí debe estar en el archivo sudoers.
El archivo sudoers determina quién puede usar el comando sudo y qué pueden hacer con él.
El archivo sudoers es lo que le brinda múltiples administradores⁴. Efectivamente, sus administradores son root, además de todos los que figuran en el archivo sudoers. Sin el archivo sudoers, el único administrador es root.
De hecho, en las organizaciones en las que alguien más administra su computadora por usted, es bastante común que no conozca la contraseña raíz de su propia computadora, siempre que esté en el archivo sudoers, no importa.
En una empresa para la que trabajé, con una enorme granja de servidores, solo un número muy pequeño de personas conocía las contraseñas raíz. En cambio, había una base de datos de quién podía trabajar en qué servidores. Un proceso automatizado lo agregaría a los archivos sudoers de aquellos servidores a los que estaba autorizado a acceder y lo eliminaría cuando expirara su autorización.
¹ Una cosa más: las versiones modernas de Unix ahora pueden restringir incluso lo que el usuario root puede hacer.
Bajo SELinux (Security Enhanced Linux), existe efectivamente una lista de control de acceso que determina qué programa puede hacer qué, e incluso el root no puede superar esas restricciones.
Bajo el Sistema de Protección de la Integridad del Sistema (SIP) de Apple (también conocido como "sin raíz"), ciertos archivos y directorios están bloqueados para que solo las aplicaciones en la lista blanca apropiada puedan acceder a ellos.
Estos sistemas existen para proteger un sistema del caso en que un usuario malintencionado logra obtener acceso de root. (O, en algunos casos, para evitar que los usuarios rompan sus dispositivos incrustados). Por razones obvias, es extremadamente difícil eludir estas restricciones, incluso con acceso de root.
² El mensaje "login:" es otra pieza arcaica de la historia de Unix, que se remonta a cuando todos usábamos terminales ascii en líneas seriales, en lugar de sistemas de ventanas. Todavía puede obtener un mensaje de "inicio de sesión:" simplemente escribiendo login
en cualquier ventana de terminal o abriendo una conexión ssh (o telnet o rsh) a su computadora desde otro lugar. Puede iniciar sesión como otro usuario desde allí si lo desea. (Y si su computadora tiene puertos seriales, aún puede configurarla para permitir inicios de sesión en ellos).
³ También es posible que los programas individuales tengan acceso a la raíz. Estos programas pueden hacer cualquier cosa que pueda hacer un usuario con acceso de root, incluso cuando lo ejecuta un usuario común. Estos suelen estar limitados a tareas específicas. Por ejemplo, el programa crontab tiene privilegios de root para que pueda editar las tablas cron. Obviamente, "sudo" tiene privilegios de root para que pueda hacer lo que hace.
⁴ Voy a cubrir un punto más que pasé por alto anteriormente. He estado usando "administrador" y "root" indistintamente, pero hay otros tipos de administradores. A menudo se denominan "cuentas de roles", lo que quiere decir que estas cuentas no pertenecen a humanos reales, sino que existen para desempeñar algún rol específico en el sistema. Si observa el /etc/passwd
archivo en su sistema, encontrará docenas y docenas de esas cuentas.
Por ejemplo, si mysql estaba instalado en su sistema, habría un usuario "mysql", y todos los archivos de la base de datos, los archivos de configuración, etc. serían propiedad de ese usuario. Solo ese usuario tendría los permisos necesarios para acceder a los archivos y ejecutar el servidor mysql. En cierto sentido, ese usuario sería una cuenta de administrador, pero solo para mysql.
Si necesita realizar tareas administrativas de la base de datos, puede convertirse en "mysql" con el su mysql
comando, o usar sudo
donde el archivo sudoers le otorgará privilegios mysql para esos comandos específicos.