Linux – sudo

por | 10 junio, 2015

sudo se utiliza para ejecutar comandos como root desde una shell de usuario no root. sudo se instala por defecto en /usr/bin. sudo pedirá la contraseña del usuario que ejecuta el comando, no la de root, por lo que antes el root debe haber autorizado a dicho usuario la ejecución de dicho comando.

El archivo de configuración /etc/sudores es donde se especifíca qué usuarios pueden hacer sudo y qué archivos pueden ejecutar. Este archivo es muy estricto en su formato y por ello, además de editarlo manualmente, existe una utilidad llamada visudo la cual permite al root editar el archivo y verificar su formato. También existen interfaces gráficas como kdesudo o gksudo.

Es más fácil entender sudo si dividimos en tres partes su posible configuración, estás son:

 Alias
Opciones (Defaults)
Reglas de acceso

Ninguna de las secciones es obligatoria ni tienen que estar en algún orden específico, pero debemos al menos introducir una regla para indicar al menos un privilegio nuevo que queramos introducir.

Alias

Un alias se refiere a un usuario, un comando o a un equipo. El alias engloba bajo un solo nombre (nombre del alias) una serie de elementos que después en la parte de definición de reglas serán referidos aplicados bajos cierto criterio.

La forma para crear un alias es la siguiente:

tipo_alias NOMBRE_DEL_ALIAS = elemento1, elemento2, elemento3, … elementoN
tipo_alias NOMBRE1 = elemento1, elemento2 : NOMBRE2 = elemento1, elemento2

En el segundo caso, separado por «:» es posible indicar más de un alias en una misma definición.

El tipo_alias define los elementos, es decir, dependiendo del tipo de alias serán sus elementos. Los tipos de alias son cuatro y son los siguientes:

Cmnd_Alias – define alias de comandos.
User_Alias – define alias de usuarios normales.
Runas_Alias – define alias de usuarios administradores o con privilegios.
Host_Alias – define alias de hosts o equipos.

El NOMBRE_DEL_ALIAS puede llevar letras, números o guión bajo ( _ ) y DEBE de comenzar con una letra mayúscula, se acostumbra a usarlos siempre en mayúsculas.

 Ejemplos:

Cmnd_Alias WEB = /usr/sbin/apachectl, /usr/sbin/httpd, sudoedit /etc/httpd/
Cmnd_Alias APAGAR = /usr/bin/shutdown -h 23:00
Cmnd_Alias NET_ADMIN = /sbin/ifconfig, /sbin/iptables, WEB
Cmnd_Alias TODO_BIN = /usr/bin/, !/usr/bin/rpm

User_Alias MYSQL_USERS = andy, marce, juan, %mysql
User_Alias ADMIN = sergio, ana
User_Alias TODOS = ALL, !samuel, !david
User_Alias OPERADORES = ADMIN, alejandra

Runas_Alias OPERADORES = #501, fabian
Host_Alias LANS = 192.168.0.0/24, 192.168.0.1/255.255.255.0
Host_Alias WEBSERVERS = 172.16.0.21, web1 : DBSERVERS = 192.168.100.10, dataserver

Opciones (defaults)

Las opciones o defaults permiten definir ciertas características de comportamiento para los alias previamente creados, para usuarios, usuarios privilegiados, para equipos o de manera global para todos.

Las opciones o defaults es posible establecerlos en cuatro niveles de uso:

De manera global, afecta a todos
Por usuario
Por usuario privilegiado
Por equipo (host)

Se usa la palabra reservada ‘Defaults’ para establecer las opciones y dependiendo del nivel que deseamos afectar su sintaxis es la siguiente:

Global: Defaults opcion1, opcion2 …
Usuario: Defaults:usuario opcion1, opcion2 …
Usuario Privilegiado: Defaults>usuario opcion1, opcion2 …
Equipo: Defaults@equipo opcion1, opcion2 …

Sólo incluimos algunos ejemplos:

Defaults:ana !authenticate
(el usuario ‘ana’ no requerira auténticarse. Pero todos los demás si.)

Defaults>ADMIN rootpw
(los usuarios en el alias ‘ADMIN’ deberán usar la contraseña de ‘root’ en vez de la propia.)

Defaults:fernanda, regina passwd_tries = 1, passwd_timeout = 1
(oportunidad de ingresar la contraseña correcta ‘passwd_tries’ el valor por defecto es de 3 y tendrán un minuto para ingresarla ‘passwd_timeout’ el valor por defecto son 5 minutos.)

Defaults@webserver umask = 011
(si mediante la ejecución del comando que se invoque por sudo es necesario crear archivos o diectorios, a estos se les aplicará la máscara de permisos indicada en el valor de la opción.)

Defaults badpass_message = «Intenta de nuevo: »
(cuando se equivoquen al ingresar la contraseña, es el mensaje que saldría.)

Defaults env_delete -= HOSTNAME
(Elimina la variable de entorno ‘HOSTNAME’)

Defaults env_reset
(reinicializa las variables de entorno que sudo utilizará o tendrá disponibles, y solo quedan disponibles LOGNAME, SHELL, USER y USERNAME)

Defaults env_check += DISPLAY, PS1
(indica que agregue (+=) a lo anterior, también la variable de entorno DISPLAY a su valor establecido antes del reset)

Reglas de acceso

Las reglas de acceso definen que usuarios ejecutan que comandos bajo que usuario y en que equipos. La sintaxis básica es:

usuario host = comando1, comando2, … comandoNp?

Ejemplos:

daniela ALL = /sbin/iptables

%gerentes dbserver = (director) /usr/facturacion, (root) /var/log/*

(Los usuarios que pertenezcan al grupo del sistema llamado ‘gerentes’ pueden en el equipo llamado ‘dbserver’ ejecutar como si fueran el usuario ‘director’ la aplicación llamada ‘facturacion’, además como usuarios ‘root’ pueden ver el contendido de los archivos que contenga el directorio /var/log.)

sergio ALL = (ALL) ALL

SUPERVISORES PRODUCCION = OPERACIÓN

(Regla formada sólo por alias)

checo ALL = /usr/bin/passwd *, !/usr/bin/passwd root
mariajose ALL = «/sbin/lsmod»
gerardo webserver = NOPASSWD: /bin/kill, /usr/bin/lprm, /etc/httpd/conf/@
gerardo webserver = NOPASSWD: /bin/kill, /usr/bin/lprm, PASSWD: /etc/httpd/conf/
gerardo webserver = /etc/httpd/conf/, NOPASSWD: /bin/kill, /usr/bin/lprm,

Ejemplo de un archivo /etc/sudoers

# ***********************
# LinuxTotal.com.mx, ejemplo de un archivo sudoers
# sergio.gonzalez.duran@gmail.com
# ***********************

# ***********************
# DEFINCION DE ALIAS
# ***********************

# administradores con todos los privilegios
User_Alias ADMINS = sergio, ana

# administradores de red – network operators
User_Alias NETOPS = marcela, andrea

# webmasters
User_Alias WEBMAS = cristina, juan

# supervisores de producción (todos los del grupo de sistema supervisores)
User_Alias SUPPRO = samuel, %supervisores

# usuarios que pueden conectarse desde Internet
User_Alias INETUS = NETOPS, ADMINS, samuel

# servidores web
Host_Alias WEBSERVERS = 10.0.1.100, 10.0.1.101

# servidores de aplicaciones
Host_Alias APLICACIONES = WEBSERVERS, 10.0.1.102, 10.0.1.103, mailserver

# comandos de red permitidos
Cmnd_Alias REDCMDS = /sbin/ifconfig, /sbin/iptables

# comandos de apache
Cmnd_Alias APACHECMDS = /usr/sbin/apachectl, /sbin/service httpd *

# ***********************
# DEFINCION DE OPCIONES
# ***********************

# Los usuarios administradores, requieren autentificarse con la contraseña de ‘root’
Defaults>ADMINS rootpw

# Para todos los usuarios, tienen hasta dos intentos para ingresar su contraseña y 3 minuto para que esta expire

Defaults passwd_tries = 4, passwd_timeout = 1

# Los usuarios que se conectan desde Internet, solo tienen una oportunidad y cero timeout lo que implica
# que cada comando que usen a través de sudo requerira siempre de autentificación.

Defaults:INETUS passwd_tries = 1, passwd_timeout = 0

# Máscara de directorios y archivos por default, para los que ejecuten sudo en los servidores web

Defaults@WEBSERVERS umask = 022

# ***********************
# DEFINCION DE REGLAS
# ***********************

# administradores todo se les permite en cualquier equipo (¡¡¡¡¡cuidado con esto en la vida real!!!!!

ADMINS ALL = (ALL) ALL

# administradores de red, en todos los equipos, los comandos de red

NETOPS ALL = REDCMDS

# webmasters, en los servidores web con los comandos indicados en apachecmds y además sin necesidad
# de contraseña acceder a las bítacoras de apache y reiniciar los servidores.
WEBMAS WEBSERVERS = APACHECMDS, NOPASSWD: /var/log/apache/, /sbin/reboot

# supervisores, pueden ejecutar los comandos indicados en los equipos indicados en el alias

# aplicaciones y además son ejecutados bajo el usuario apps.
SUPPRO APLICACIONES = NOEXEC: (apps) /usr/local/facturacion.exe, /usr/local/ventas.exe, /usr/local/nomina.exe

# no definidos por alias previos, sino directamente

# regina es de recursos humanos y puede cambiar contraseñas de cualquier usuario menos de root

regina ALL = /usr/bin/passwd *, !/usr/bin/passwd root

# david, puede apagar los equipos de aplicaciones
david APLICACIONES = /sbin/shutdown, /sbin/halt

# El equipo firewall de la red puede ser reiniciado (no apagado) por fernanda que es asistente de redes

fernanda firewall = /sbin/shutdown -r now

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *