meta data de esta página
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previa | |||
| linux:comandos:sudo [222018/08/ 10:40] – ↷ Página movida de linux:sudo a linux:comandos:sudo lc | linux:comandos:sudo [182023/01/ 13:36] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | * http:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| + | ====== El comando sudo ====== | ||
| + | |||
| + | El comando sudo ofrece otra solución para otorgar acceso administrativo a los usuarios. Cuando un usuario de confianza antecede un comando administrativo con sudo, se le pide su propia contraseña. Luego, una vez autenticado y asumiendo que el comando es permitido, el comando administrativo es ejecutado como que si se tratase del superusuario. | ||
| + | |||
| + | El comando sudo permite un gran nivel de flexibilidad. Por ejemplo, solo los usuarios listados en el archivo de configuración / | ||
| + | |||
| + | El comando sudo también proporciona un rastro completo para auditoría. Cada autenticación exitosa es registrada al archivo / | ||
| + | |||
| + | Otra ventaja del comando sudo es que un administrador puede permitir a usuarios diferentes acceso a comandos específicos basado en sus necesidades. | ||
| + | |||
| + | Los administradores que deseen modificar el archivo de configuración de sudo, / | ||
| + | |||
| + | Para otorgarle a un usuario privilegios administrativos completos, escriba visudo y añada una línea similar a la siguiente en la sección de especificación de privilegios del usuario: | ||
| + | |||
| + | < | ||
| + | |||
| + | Este ejemplo establece que el usuario, juan, puede utilizar sudo desde cualquier máquina y ejecutar cualquier comando. | ||
| + | |||
| + | El ejemplo de abajo ilustra la posible granularidad cuando se configura sudo: | ||
| + | |||
| + | < | ||
| + | |||
| + | Este ejemplo establece que cualquier usuario puede emitir el comando / | ||
| + | ==== Comandos de ejemplo ==== | ||
| + | * Con **sudo -l** podemos saber que comando puedo ejecutar | ||
| + | * con **sudo -u otrousuario / | ||
| + | * con **sudo -e / | ||
| + | * con ** sudo -L** podemos ver las opciones que se pueden establecer | ||
| + | * con **sudo -V** listamos las opciones establecidas por defecto para todos los usuarios | ||
| + | |||
| + | ===== Estructura de / | ||
| + | |||
| + | Podemos considerar tres grandes secciones en / | ||
| + | |||
| + | * Definiciones de alias | ||
| + | * Ajuste de las opciones por defecto | ||
| + | * Reglas de acceso | ||
| + | |||
| + | Las tres secciones pueden considerarse opcionales, aunque sin la tercera ( Reglas de acceso) la existencia misma de / | ||
| + | |||
| + | A continuación vamos a ver con detalle cada una de las mencionadas tres secciones. | ||
| + | |||
| + | ==== Definiciones de Alias ==== | ||
| + | Con los alias nos referimos a cualquier tipo de elemento: | ||
| + | |||
| + | La forma general de una definición de alias es: | ||
| + | |||
| + | < | ||
| + | |||
| + | Tipo_Alias | ||
| + | |||
| + | * Cmnd_Alias: | ||
| + | * User_Alias: | ||
| + | * Runas_Alias: | ||
| + | * Host_Alias: | ||
| + | |||
| + | |||
| + | NOMBRE_ALIAS | ||
| + | |||
| + | * Debe ser una cadena compuesta exclusivamente por letras mayúsculas, | ||
| + | * La cadena debe comenzar necesariamente por una letra mayúscula. | ||
| + | * Se recomienda que en los nombres de alias se utilicen solo letras mayúsculas. En adelante, | ||
| + | |||
| + | |||
| + | elemento | ||
| + | |||
| + | * Cuando se trate de una lista, deben separarse los elementos constitutivos de la misma mediante comas (,) | ||
| + | * Un alias puede ser un elemento en otra definición de alias. | ||
| + | |||
| + | |||
| + | Es posible definir varios alias de un mismo tipo en una sola línea. Las diversas definiciones deben separarse con dos puntos | ||
| + | |||
| + | < | ||
| + | |||
| + | Esto equivaldria a : | ||
| + | < | ||
| + | Tipo_Alias | ||
| + | Tipo_Alias | ||
| + | Tipo_Alias | ||
| + | </ | ||
| + | Como se ha dicho anteriormente, | ||
| + | |||
| + | < | ||
| + | |||
| + | La única restricción es que los alias utilizados como elementos en las definiciones de otros alias ( en nuestro caso, NOMBRE_3 | ||
| + | |||
| + | Veamos ahora como construir una definición de alias para cada uno de los Tipo_Alias : | ||
| + | === Alias de Usuarios: User_List === | ||
| + | |||
| + | < | ||
| + | User_List | ||
| + | |||
| + | | ||
| + | | ||
| + | elemento : | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | </ | ||
| + | Como puede verse, la lista de usuarios puede estar formada por uno o más nombres de usuarios, nombres de grupos | ||
| + | |||
| + | Un ejemplo de ello seria la siguiente definición: | ||
| + | |||
| + | < | ||
| + | |||
| + | Con la anterior definición establecemos que el alias INVITADOS | ||
| + | |||
| + | == Alias de Usuarios Privilegiados: | ||
| + | < | ||
| + | Runas_List | ||
| + | | ||
| + | |||
| + | elemento: | ||
| + | | ||
| + | nombre_runas | ||
| + | %nombre_grupo | ||
| + | +nombre_grupo | ||
| + | #uid | ||
| + | ALIAS_RUNAS | ||
| + | |||
| + | </ | ||
| + | < | ||
| + | |||
| + | === Alias de Hosts : Host_List === | ||
| + | |||
| + | < | ||
| + | Host_List | ||
| + | |||
| + | Lista_hosts : elemento1, elemento2, ..... | ||
| + | |||
| + | elemento : | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | </ | ||
| + | El nombre_host puede incluir carácteres comodín | ||
| + | |||
| + | Si no se especifica una máscara de red con un número de red, se utilizará la máscara de la interface ethernet del host. | ||
| + | |||
| + | === Alias de Comandos : Cmnd_List === | ||
| + | |||
| + | < | ||
| + | Cmnd_List | ||
| + | |||
| + | | ||
| + | elemento : | ||
| + | nombre_comando | ||
| + | nombre_comando argumentos | ||
| + | nombre_comando wildcards | ||
| + | directorio | ||
| + | sudoedit | ||
| + | ALIAS_COMANDO | ||
| + | </ | ||
| + | |||
| + | Una Cmnd_List es una lista de uno o más nombres de comandos, directorios y/o otros alias. | ||
| + | |||
| + | Cuando se especifique un comando, siempre debe ponerse la ruta completa al ejecutable: | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | Cuando el nombre del comando se especifica con argumentos (incluyendo wildcards), el usuario sólo podra utilizar los argumentos especificados. | ||
| + | |||
| + | Si el nombre del comando se especifica con el " | ||
| + | |||
| + | Un directorio es un path, completo y válido, acabado en /. | ||
| + | |||
| + | / | ||
| + | |||
| + | Cuando en lugar de un comando se especifica un directorio, el usuario puede ejecutar cualquier binario que se encuentre en el directorio epecificado. | ||
| + | |||
| + | En el siguiente ejemplo, el usuario podria ejecutar los comandos | ||
| + | |||
| + | < | ||
| + | |||
| + | Los siguientes caracteres deben ser " | ||
| + | |||
| + | El comando especial | ||
| + | |||
| + | ===== Ajustes de Opciones (Defaults) ===== | ||
| + | |||
| + | Pueden modificarse ciertas opciones de configuración mediante una o más líneas | ||
| + | |||
| + | Podemos definir las opciones: | ||
| + | |||
| + | - globalmente | ||
| + | - por usuario | ||
| + | - por usuario privilegiado | ||
| + | - por host | ||
| + | |||
| + | Y sus respectivas sintaxis serian las siguientes: | ||
| + | |||
| + | - **Defaults** | ||
| + | - **Defaults: | ||
| + | - **Defaults> | ||
| + | - **Defaults@host** | ||
| + | |||
| + | |||
| + | Las listas de opciones estan contituidas por un conjunto de opciones separadas por comas: | ||
| + | |||
| + | < | ||
| + | |||
| + | Podemos considerar cuatro tipos de opciones: | ||
| + | |||
| + | * Booleanos : | ||
| + | * Se activan escribiendo el nombre de la opcion. | ||
| + | * Se desactivan colocando el operador | ||
| + | |||
| + | < | ||
| + | |||
| + | En el ejemplo anterior, se desacttiva la opción | ||
| + | |||
| + | < | ||
| + | |||
| + | En el ejemplo anterior, se activa la opción | ||
| + | |||
| + | * Enteros : | ||
| + | Toman la forma: | ||
| + | |||
| + | |||
| + | * Cadenas : | ||
| + | Toman la forma: | ||
| + | |||
| + | < | ||
| + | |||
| + | * Listas : | ||
| + | Toman la forma: | ||
| + | En las listas el operador | ||
| + | |||
| + | |||
| + | Los valores o cadenas, cuando contengan varias palabras, pueden encerrarse entre dobles comillas (" | ||
| + | |||
| + | Los caracteres especiales pueden " | ||
| + | |||
| + | Debemos tener presente que algunas opciones no booleanas pueden ser utilizadas en un contexto booleano, lo que permite, entre otras cosas, que puedan ser deshabilitadas con el operador | ||
| + | |||
| + | En | ||
| + | |||
| + | ===== Reglas de Acceso (User Specification) ===== | ||
| + | |||
| + | |||
| + | Mediante las Reglas de Acceso vamos a definir: | ||
| + | |||
| + | * Los usuarios a los que permitimos utilizar sudo. | ||
| + | * Los comandos que dichos usuarios podrán ejecutar. | ||
| + | * En calidad de qué usuarios privilegiados podrán ejecutarlos. | ||
| + | * En que hosts podrán hacerlo. | ||
| + | |||
| + | |||
| + | La sintaxis básica es: | ||
| + | |||
| + | < | ||
| + | |||
| + | Cada uno de los elementos anteriores puede ser un Alias o una lista de elementos. | ||
| + | |||
| + | El elemento | ||
| + | Un ejemplo de regla de acceso con root como usuario_privilegiado | ||
| + | |||
| + | < | ||
| + | |||
| + | Cuando se especifique un comando siempre debe ponerse la ruta completa al ejecutable. (Cuando ejecutemos | ||
| + | |||
| + | < | ||
| + | |||
| + | En ejemplo anterior, los usuarios de alias USUARIO, | ||
| + | |||
| + | Como se comentó anteriormente | ||
| + | |||
| + | < | ||
| + | |||
| + | En este ejemplo los usuarios de alias USUARIO, | ||
| + | |||
| + | Pueden especificarse mas de un usuario_privilegiado. | ||
| + | |||
| + | < | ||
| + | |||
| + | En la anterior regla de acceso se autoriza a los usuarios de alias USUARIO, | ||
| + | Fíjate que en este caso se obtendria el mismo resultado con la siguiente regla de acceso: | ||
| + | |||
| + | < | ||
| + | |||
| + | ==== Etiquetas de Comando ==== | ||
| + | |||
| + | |||
| + | Por si no fuera suficiente, tenemos un medio de modificar las condiciones en que el usuario puede ejecutar las disversos comandos definidos. Es mediante las llamadas | ||
| + | |||
| + | Un comando puede definirse con cero o más etiquetas asociadas a el. | ||
| + | |||
| + | En el caso de utilizar | ||
| + | |||
| + | < | ||
| + | |||
| + | Disponemos de cuatro valores posibles para ETIQUETA: | ||
| + | |||
| + | * NOPASSWD | ||
| + | * PASSWD | ||
| + | * EXEC | ||
| + | * NOEXEC | ||
| + | |||
| + | |||
| + | Una vez se ha asociado una etiqueta a un comando, los siguientes comandos de la lista de comandos heredan el valor de la etiqueta asociada, salvo que sea " | ||
| + | |||
| + | Las parejas de valores " | ||
| + | |||
| + | * NOPASSWD -- PASSWD | ||
| + | * EXEC -- NOEXEC | ||
| + | |||
| + | |||
| + | == Etiquetas NOPASSWD - PASSWD == | ||
| + | |||
| + | |||
| + | Por defecto, | ||
| + | |||
| + | Como se ha comentado anteriormente, | ||
| + | |||
| + | < | ||
| + | |||
| + | La anterior definición nos dice que el usuario | ||
| + | |||
| + | Si deseáramos que solo pudiera ejecutar | ||
| + | |||
| + | < | ||
| + | |||
| + | Si quisiéramos que / | ||
| + | |||
| + | < | ||
| + | |||
| + | == Etiquetas NOEXEC - EXEC == | ||
| + | Si sudo ha sido compilado con soporte | ||
| + | |||
| + | ====== II.Caracteres Comodín (Wildcards) ====== | ||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | Los comodines utilizados son: | ||
| + | |||
| + | * * | ||
| + | * ? | ||
| + | * [....] | ||
| + | * [!...] | ||
| + | |||
| + | Se utiliza también | ||
| + | |||
| + | El caracter | ||
| + | |||
| + | / | ||
| + | |||
| + | ====== III.Caracteres Especiales ====== | ||
| + | |||
| + | |||
| + | El signo # es utilizado para indicar comentarios. Cada linea de comentarios debe comenzar por un signo # . | ||
| + | |||
| + | El signo ! puede utilizarse como un operador lógico de negación (not), tanto en alias como en comandos. | ||
| + | |||
| + | Las lineas largas pueden continuarse en otra linea inferior, colocando | ||
| + | |||
| + | Los espacios en blanco entre elemenos de una linea ; incluyendo los caracteres sintacticos especiales tales como = , : ( ) , son opcionales. | ||
| + | |||
| + | Los siguientes caracteres especiales deben ser escapados con \ cuando se utilicen como parte de una palabra: | ||
| + | |||
| + | ====== IV.Prevención de Shell-Escapes ====== | ||
| + | |||
| + | |||
| + | Una vez sudo ejecuta un perograma, dicho programa es libre de realizar cualquier operación que le sea propia, incluida la ejecución de otro programa. Esto puede plantear una cuestión de seguridad, ya que no es infrecuente que un programa permita shell escapes, lo que posibilita al usuario " | ||
| + | |||
| + | Muchos sistemas que usan bibliotecas compartidas poseen la capacidad de anular funciones por defecto de las bibliotecas apuntando una variable de entorno ( normalmente, | ||
| + | |||
| + | Para saber si sudo soporta | ||
| + | |||
| + | < | ||
| + | |||
| + | Si la salida contiene una linea que comienza por: | ||
| + | |||
| + | File containing dummy exec functions: | ||
| + | |||
| + | quiere decir que sudo es capaz de reemplazar ls familia de funciones | ||
| + | |||
| + | Para activar | ||
| + | |||
| + | En el siguiente ejemplo habilitamos al usuario | ||
| + | |||
| + | asd53 host3 = NOEXEC : / | ||
| + | |||
| + | Esto hace que los ateriores dos comandos no puedan ser utilizados para la ejecución de otro comando. | ||
| + | |||
| + | Debemos tener en cuenta que el desactivar el shell escape no es ni mucho menos la panacea. los programas ejecutados como root son capaces de realizar otras operaciones tanto o mas peligrosas ( cambiar o sobrescribir archivos, por ejempo.....) | ||
| + | |||
| + | |||
| + | ===== Ejemplo ===== | ||
| + | < | ||
| + | # *********************** | ||
| + | # LinuxTotal.com.mx, | ||
| + | # 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 = / | ||
| + | |||
| + | # comandos de apache | ||
| + | Cmnd_Alias APACHECMDS = / | ||
| + | |||
| + | # *********************** | ||
| + | # DEFINCION DE OPCIONES | ||
| + | # *********************** | ||
| + | |||
| + | # Los usuarios administradores, | ||
| + | Defaults> | ||
| + | |||
| + | # 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: | ||
| + | |||
| + | # 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: / | ||
| + | |||
| + | # supervisores, | ||
| + | # aplicaciones y además son ejecutados bajo el usuario apps. | ||
| + | SUPPRO APLICACIONES = NOEXEC: (apps) / | ||
| + | |||
| + | # 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 = / | ||
| + | |||
| + | # david, puede apagar los equipos de aplicaciones | ||
| + | david APLICACIONES = / | ||
| + | |||
| + | # El equipo firewall de la red puede ser reiniciado (no apagado) por fernanda que es asistente de redes | ||
| + | fernanda firewall = / | ||
| + | |||
| + | </ | ||