Bienvenidos sean a este post, hoy les hablare un poco sobre uno de los comandos mas utiles dentro de todo linux, este comando es llamado sudo y es el encargado de conceder permisos administrativos al usuario estandar del equipo sin necesidad de acceder como root, los permisos pueden ser totales o especificos y tambien nos concede la posibilidad de poder bloquear el acceso a ciertos comandos o acciones para los usuarios, por ejemplo el ping, en la mayoria de los casos vi que las distribuciones traen a sudo instalado pero en el caso de Debian no y para ello vamos a ver como instalarlo. El procedimiento es similar para todos los casos pero varia el comando para descargarlo desde los repositorios de la distribucion pertinente, comencemos con los pasos necesarios para instalarlo y configurarlo.

Primero deberemos ingresar a nuestro equipo ya sea por ssh o abrir una terminal, en cualquier caso deberan ejecutar el siguiente comando:

tinchicus@dbn001vrt:~$ su -

Este comando se encargara de cambiarnos de nuestro usuario a root, nos va a solicitar la contraseña de root, ingresamos la misma y en caso de ingresarla correctamente nos quedara de la siguiente forma:

root@dbn001vrt:~#

Les recomiendo actualizar los datos del repositorio, en el caso de las distribuciones de tipo Debian se ejecuta de la siguiente forma:

root@dbn001vrt:~# apt-get update

En el caso de las basadas en Red Hat se debera ejecutar el siguiente comando:

root@dbn001vrt:~# yum update

Este comenzara a descargar los listados de los repositorios disponibles y una vez finalizado volvera al prompt de nuestra terminal, nuestro siguiente paso sera instalar el paquete para instalarlo deberemos usar el comando de instalacion:

Para el caso de Debian (.deb):
root@dbn001vrt:~# apt-get install sudo

Para el caso de Red Hat (.rpm):
root@dbn001vrt:~# yum install sudo

Una vez finalizada la instalacion podemos probarlo de la siguiente manera:

root@dbn001vrt:~# sudo -l
Matching Defaults entries for root on dbn001vrt:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User root may run the following commands on dbn001vrt:
(ALL : ALL) ALL

Con esta opcion vemos las acciones disponibles para nuestro usuario, si lo probamos con root, si lo probamos con un usuario comun obtendremos una salida como esta:

tinchicus@dbn001vrt:~$ sudo -l
[sudo] password for tinchicus:
Sorry, user tinchicus may not run sudo on dbn001vrt.
tinchicus@dbn001vrt:~$

Para permitir a nuestros usuarios acceder debemos agregarlos dentro de las reglas de SUDO, como todavia no tenemos permisos de administracion deberemos volvernos a transformar en root y ejecutaremos el siguiente comando:

root@dbn001vrt:~# visudo

Con este comando podran modificar el archivo sudoers.d el cual es el encargado de administrar todos los permisos de SUDO, un archivo de SUDO basico es de la siguiente forma:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:
# includedir /etc/sudoers.d

Parece dificil pero no es asi, las distintas secciones son para las siguientes acciones:

  • En el bloque donde estan los Defaults podemos definir algunos entornos y acciones por “defecto”, estos son los basicos pero se pueden especificar muchos mas
  • Host alias, nos permitira crear un alias para los equipos desde donde permitiremos sudo
  • User alias, al igual que el anterior nos permite crear un alias para un usuario o un grupo permitiendo declarar mejor nuestros permisos
  • Cmnd alias, permite crear un alias para asignar permisos especificos, por ejemplo un grupo de networking y le especificamos los comandos para trabajar sobre la red.

Todos estos bloques los veremos en otro post cuando hablemos de SUDO avanzado porque es lo mejor de la herramienta dado que podemos conceder o denegar acceso a herramientas a un usuario en particular o a todo un grupo, podemos segmentar nuestros permisos y decir realmente a cual tendran acceso o no, inclusive bloquear algunas artimañas para convertirse en root pero eso sera para otro post.

 Nota: para convertirnos en root con sudo se puede usar sudo su - pero siempre y cuando no este bloqueado en las reglas de SUDO. 

Ahora vayamos a la configuracion basica, para conceder permisos de root a un usuario deberemos agregarlo dentro del sector donde permitimos los accesos:

# User privilege specification
root ALL=(ALL:ALL) ALL
tinchicus ALL=(ALL:ALL) ALL

Aca pueden ver como agregue mi usuario, tinchicus, ahi deberia ir el que esten usando o al que quieran concederle acceso de root, el primer elemento va a ser el host desde donde podra correr los comandos, en este ALL significa todos los equipos, luego los dos siguientes elementos son como le permitiremos identificarse, en que usuario transformarse (primer campo) y en que grupo tambien (segundo campo), como usamos ALL le permitiremos cualquier usuario y grupo, para especificar un usuario determinado o un grupo determinado deberiamos utilizar algun alias de usuario o host creado en los bloques explicados anteriormente pero vuelvo a repetir en el dia de hoy no lo veremos y el ultimo ALL nos da acceso a todos los comandos disponibles, si necesitaramos alguno en especial deberiamos informar algun alias de Cmnd, con esto le permitimos a tinchicus tener los mismos permisos que root, es decir puede ejecutar cualquier tarea administrativa sin necesidad de cambiar a root, ahora vamos a hacerle esta modificacion:

User privilege specification
root ALL=(ALL:ALL) ALL
tinchicus ALL=(ALL:ALL) NOPASSWD: ALL

La modificacion realizada es practica para cuando trabajamos con nuestros equipos de prueba pero no de produccion porque este comando, NOPASSWD, nos permitira ejecutar los comandos sin solicitarnos contraseña y como dije antes es practico solo para equipos de prueba porque puede generar una brecha de inseguridad importante pero admito que para algunos scripts es re-contra util, en mis equipos de desarrollo o prueba lo tengo de esta forma. Veamos la ultima seccion:

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

Al igual que el anterior pero podemos especificar los alias de usuario para permitirles ejecutar comandos o no, es exactamente igual solamente que en este caso podemos especificar grupos de linux o alias creados previamente apuntando a estos grupos, esta opcion fue la que siempre me funciono, pero esto lo veremos en otra oportunidad y con todo esto concluido tendremos un archivo de sudo de la siguiente forma:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
directly modifying this file.
#
#See the man page for details on how to write a sudoers file.
#

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL:ALL) ALL
tinchicus ALL=(ALL:ALL) NOPASSWD: ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:
# includedir /etc/sudoers.d

Si les sucede como a mi y el editor es nano, deberan apretar primero Ctrl+O para salvarlo y luego Ctrl+X para salir una vez devuelta en el terminal podemos probarlo de la siguiente forma pero antes de chequearlo les comentare la sintaxis basica:

tinchicus@dbn001vrt:~$ sudo < el comando a ejecutar >

Como pueden ver primero va la palabra sudo despues un espacio y luego el comando a ejecutar, esto es la forma mas basica de ejecutarlo pero se pueden especificar otros modificadores para darle otro tipo de accesos y usuarios a la hora de la ejecucion pero ahora pasemos a ver como ejecutarlo, primero si estamos como root presionemos Ctrl+D o escriban logout para volver al usuario comun, en el terminal probemos de ejecutar el comando visudo y les deberia devolver el siguiente mensaje:

tinchicus@dbn001vrt:~$ visudo
-bash: visudo: no se encontró la orden
tinchicus@dbn001vrt:~$

Como pueden ver al no tener los privilegios necesarios nos informara que el comando no existe pero si nosotros lo ejecutamos con sudo:

tinchicus@dbn001vrt:~$ sudo visudo

Debera abrir nuestro editor de SUDO, si lo hizo felicitaciones!!! porque con ello logramos tener el poder de root, y si ahora volvemos a ejecutar el comando sudo -l obtendremos el siguiente resultado:

tinchicus@dbn001vrt:~$ sudo -l
Matching Defaults entries for tinchicus on dbn001vrt:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User tinchicus may run the following commands on dbn001vrt:
(ALL : ALL) NOPASSWD: ALL

Como ahora pertenecemos a sudo si nos devuelve los permisos asignados a nuestro usuario a diferencia de como nos sucedio en un principio.
En resumen, hoy hemos visto como se instala SUDO en distintas distribuciones de Linux, como es el archivo SUDO basico y como podemos modificarlo para poder tener acceso a permisos administrativos a la misma altura de root, y por ultimo de forma muy basica como son y para que se usan algunas bloques de sudoers.d espero les haya sido util sigueme en Twitter, Facebook o Google+ para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios