Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

sábado, 14 de noviembre de 2015

Root o no root, esa es la cuestión

En muchas ocasiones se ha criticado el uso del usuario root para muchas operaciones realizadas dentro de Linux pero... ¿Es realmente tan peligroso este usuario? ¿Acaso no existen alternativas al uso de éste?

Una de las grandes virtudes que posee Linux con respecto a sus competidores es su la gestión de los permisos de los usuarios y las carpetas... Estos permisos son triviales para mantener la integridad del sistema e impiden a los usuarios normales el acceso a ciertos ficheros y la ejecución de comandos "delicados". Por ejemplo un usuario normal es capaz de leer el fichero /etc/resolv.conf, pero no de editarlo (si intenta guardar cambios en éste el sistema no se lo permitirá), mientras que el usuario root es capaz de hacer absolutamente todo... Obviamente no todo se reduce a ser root o no, pues también existen usuarios con permisos especiales llamados administradores. Estos administradores tienen la capacidad de realizar acciones con los mismos permisos que root, si bien no tienen la misma libertad con la que cuenta root; esto es debido a que los administradores cuentan con un recurso muy útil que únicamente ellos pueden usar llamado sudo.



El recurso sudo, es un recurso únicamente utilizable por los administradores que permite realizar determinadas acciones como si fuese root (sin serlo). Es decir que podría considerarse como un puente que permite lograr cosas que normalmente no seríamos capaces de hacer... Un ejemplo muy sencillo pero descriptivo, sería la consulta de la ip del equipo desde la consola. El comando para consultar las ips de las interfaces de nuestro equipo sería ifconfig, pero en caso de ser un "simple" usuario, el sistema nos diría que dicho comando no existe... Para eliminar dicha limitación, si el usuario es un administrador puede recurrir al recurso sudo tal que así:

sudo ifconfig

¿Sencillo cierto? Obviamente sudo sería necesario para cada acción que queramos realizar como administradores, con lo que habría que estar pendientes de utilizar dicho comando para cualquier tarea delicada, etc... pero indudablemente puede ayudarnos a evitar recurrir al todopoderoso root para cualquier acción "delicada".

Ahora bien, este recurso no es la panacea, hay veces en las que se debe recurrir directamente al usuario root, pues en caso contrario podemos tener problemas con algunos permisos y/o ficheros, con lo que... ¿Cuando habría que ser root?

Mientras que sudo nos permite ejecutar acciones "delicadas" en momentos determinados, root puede hacer lo que le de la gana sin restricción alguna, pudiendo crear graves daños involuntariamente... Para acciones concretas o aisladas, sudo es sin duda un recurso de gran valor... Además root es un usuario con demasiado poder como para cualquiera tenga la contraseña de éste, con lo que si queremos evitarnos dar la contraseña de este poderoso usuarios, más nos vale tener a mano unos cuantos usuarios con permisos de administrador... Aún así, es innegable que root puede ser de gran ayuda a la hora de querer gestionar/analizar con profundidad un equipo o servidor, con lo que si bien un usuario común nunca debería tener acceso a root, para los administradores del equipo es un usuario casi imprescindible...

Teniendo claro la utilidad de sudo y del usuario root, es muy recomendable aprender a sacarle partido a los administradores o sudoers, pues serán los que tendrán más privilegios que el resto y estarán justo debajo de root. Para tener nuestros administradores, lo primero de todo es cerciorarnos de que poseemos de la utilidad sudo instalada en nuestro equipo... La mayoría de los sistemas lo incluyen, pero para cerciorarnos al 100% escribiremos (como root):

apt-get install sudo

Esto no solo nos posibilitará escribir el comando sudo, sino que además creará un fichero llamado sudoers dentro de la carpeta /etc/.

Dicho fichero dictamina qué usuarios existentes estarán por encima del resto; es decir, que usuarios serán sudoers y estarán capacitados para usar el comando sudo... El fichero debe de ser editado por root y por defecto posee la siguiente estructura:

  1. Defaults        env_reset
  2. Defaults        mail_badpass
  3. Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  4. # User privilege specification
  5. root    ALL=(ALL:ALL) ALL


Cualquier usuario que queramos que se encuentre por encima del resto, tendrá de añadirse al archivo tal y como se ha hecho con root... Si por ejemplo deseásemos añadir al usuario ivan, deberíamos añadir la línea:

ivan    ALL=(ALL:ALL) ALL

La estructura que tienen cada una de estas líneas es:

usuario/Useralias  host_Alias=(runAsListaUsuarios:runAsListaGrupos) cmnd_Alias

Cada uno de estos "alias" tienen un significado y función especial, que permite realizar multitud de cosas... Si bien es cierto que lo más común es poner la línea que acabo de añadir, podemos sacarle mucho más partido a este fichero mediante los aliases para establecer unos sudoers mucho más personalizados y con permisos mucho más concretos que los que acabamos de poner para el usuario ivan, pues éste ahora mismo tiene acceso a prácticamente todo y a veces deseamos que el usuario esté un poco más limitado. Estos alias son

  • UserAlias: La primera sección de la línea puede referirse a un usuario en concreto o a un alias de usuario... Un alias de usuario no es nada más que un conjunto de usuarios a los que uno se puede referir mediante un nombre en concreto. Dicho alias tendría la estructura: User_Alias ALIAS = user1,user2. Es muy útil para establecer un comportamiento determinado a un grupo de ususarios.
  • Host_Alias: Se puede definir el host o el rango de ip desde los cuales se puede hacer el comando sudo... Este valor puede establecerse en una línea aparte como Host_Alias NOMBRE=ip1,rango_ip; no es una opción muy común, pero para casos muy concretos puede ser útil. Generalmente se le pone el valor ALL, pues significa que se puede ejecutar desde cualquier parte.
  • RunAs_Alias: Esta sección va entre parentesis y puede hacer referencia únicamente al runAsUserListAlias o por lo contrario a runAsUserListAlias:runAsGroupListAlias. Aquí podemos hacer referencia al groupid o al userid... Generalmente este valor es establecido a ALL, que significa que no hay restricciones de runAs.
  • cmnd_Alias: Claramente mi favorito. Este alias define uno o más comandos bajo un mismo nombre... estos comandos se pueden poner sueltos al final de la línea del usuario o alias que se esté tratando o, para mayor comodidad, se escribe el alias que agrupa a estos comandos... Para establecer dicho alias podemos poner en una línea aparte: cmnd_ALias ALIASCMD= /bin/bash, /bin/passwd. En caso de querer que pueda ejecutar todos los comandos, llamaremos al alias ALL. Estos serían los comandos "extra" que podría ejecutar el alias de usuario en cuestión tras escribir sudo.
Para ponernos en situación, he creado un pequeño fichero que representa estos conceptos:


  1. Defaults        env_reset
  2. Defaults        mail_badpass
  3. Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  4. # User privilege specification
  5. root    ALL=(ALL:ALL) ALL
  6. User_Alias LIMITADOS = invitado1,invitado2
  7. User_Alias ADMIN=jose, gorka
  8. cmnd_Alias LIMITADO/bin/bash/bin/passwd/sbin/ifconfig
  9. cmnd_Alias ESPECIAL/sbin/ifconfig/sbin/iptables, /sbin/fsck
  10. host_Alias LOCAL=192.168.1.0/24
  11. LIMITADOS LOCAL=(ALL) LIMITADO
  12. ADMIN   ALL=(ALL) ESPECIAL


Gracias a esto podemos usar usuarios con privilegios superiores al resto sin tener que darles acceso total y manteniendo la filosofía de sudo al mismo tiempo.  Teniendo esto presente, si bien es cierto que root sigue siendo un gran aliado, está claro que sudo puede brindarnos una estructura de permisos muy útil, sólida y estructurada...

Y vosotros ¿Sois más partidarios de usar sudo o de realizar las acciones como root? 

Saludos.

No hay comentarios :

Publicar un comentario