seguridad:sudo
Differences
This shows you the differences between two versions of the page.
Previous revision | |||
— | seguridad:sudo [2022/12/02 22:02] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== SUDO ====== | ||
+ | |||
+ | Sudo es, como su propia palabra indica ((para los que conocen inglés y unix, está claro)), " | ||
+ | |||
+ | Lo que inicialmente comenzó como una aplicación que permitía actuar como superusuario --es decir, como root--, para algunas tareas, se ha convertido en una aplicación que permite suplantar al usuario e incluso mantener la cuenta de superusuario desactivada en un sistema, dejando a los usuarios normales que realicen las tareas de superusuario, | ||
+ | |||
+ | ===== Creando un sistema de alta seguridad con sudo ===== | ||
+ | |||
+ | A mi juicio el problema de la seguridad radica en que los expertos pasan demasiado tiempo " | ||
+ | |||
+ | ==== Nuestro objetivo ==== | ||
+ | |||
+ | Vamos a configurar un sistema en el que un grupo de usuarios --el que nosotros digamos-- actuará como superusuario de una manera totalmente transparente. Al mismo tiempo, indicaremos cómo desactivar la cuenta de superusuario, | ||
+ | |||
+ | Todos los pasos y configuraciones los he realizado en un SuSE 10.1. Es posible que algunos de los cambios que propongo --como establecer el PATH por defecto y cosas similares-- se hagan de un modo diferente en otras distribuciones; | ||
+ | |||
+ | ==== Configuración de SUDO ==== | ||
+ | |||
+ | En líneas generales, sudo nos permitirá determinar quién ejecuta qué comandos --incluso con qué parámetros-- en nuestra máquina ((También puede ser configurado para muchas máquinas, pero no entraremos en eso aquí)). | ||
+ | |||
+ | La configuración se guarda en el fichero / | ||
+ | |||
+ | Toda la configuración se puede resumir en una sóla línea de configuración: | ||
+ | |||
+ | < | ||
+ | a_quien_permito | ||
+ | </ | ||
+ | |||
+ | Es decir, en esta línea indicamos que el usuario " | ||
+ | |||
+ | **Y llegaron los alias** | ||
+ | |||
+ | Especificar, | ||
+ | |||
+ | < | ||
+ | User_Alias | ||
+ | </ | ||
+ | |||
+ | Con lo que nuestra regla anterior se modificaría así: | ||
+ | |||
+ | < | ||
+ | POWER_USERS | ||
+ | </ | ||
+ | |||
+ | El siguiente paso consiste en crear alias para los comandos: | ||
+ | |||
+ | < | ||
+ | Cmnd_Alias | ||
+ | Cmnd_Alias | ||
+ | </ | ||
+ | |||
+ | No vamos a permitir ejecutar el comando passwd como root ya que eso nos permitiría cambiar su contraseña. En la definición del alias podemos incluir aquellos comandos que NO QUERAMOS que se ejecuten con sudo, como puede ser visudo, por ejemplo. Para pensarlo. | ||
+ | |||
+ | Finalmente indicar que existe un alias especial, ALL, que significa "todos los usuarios" | ||
+ | |||
+ | < | ||
+ | ALL ALL = (ALL) ALL | ||
+ | </ | ||
+ | |||
+ | Bueno, vamos a lo que nos ocupa. Nuestra regla inicial: | ||
+ | |||
+ | < | ||
+ | a_quien_permito | ||
+ | </ | ||
+ | |||
+ | Se queda así: | ||
+ | |||
+ | < | ||
+ | POWER_USERS | ||
+ | </ | ||
+ | |||
+ | |||
+ | Y nuestro fichero / | ||
+ | |||
+ | < | ||
+ | # sudoers file. | ||
+ | # | ||
+ | # This file MUST be edited with the ' | ||
+ | # | ||
+ | # See the sudoers man page for the details on how to write a sudoers file. | ||
+ | # | ||
+ | |||
+ | # Host alias specification | ||
+ | |||
+ | # User alias specification | ||
+ | User_Alias | ||
+ | |||
+ | # Cmnd alias specification | ||
+ | Cmnd_Alias | ||
+ | Cmnd_Alias | ||
+ | |||
+ | # Defaults specification | ||
+ | |||
+ | # prevent environment variables from influencing programs in an | ||
+ | # unexpected or harmful way (CVE-2005-2959, | ||
+ | # CVE-2006-0151) | ||
+ | Defaults always_set_home | ||
+ | Defaults env_reset | ||
+ | |||
+ | # Runas alias specification | ||
+ | POWER_USERS | ||
+ | |||
+ | |||
+ | # Uncomment to allow people in group wheel to run all commands | ||
+ | # %wheel | ||
+ | |||
+ | # Same thing without a password | ||
+ | # %wheel | ||
+ | |||
+ | # Samples | ||
+ | # %users | ||
+ | # %users | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Activar acceso a los comandos de superusuario ==== | ||
+ | |||
+ | En SuSE --ignoro si en otras distribuciones pasa también-- el acceso a los comandos de superusuario no está incluido en el PATH. Eso significa que si intentamos ejecutar el comando ifconfig como un usuario normal, tendremos que teclear / | ||
+ | |||
+ | Este problema se puede resolver de dos formas: | ||
+ | |||
+ | === Forma 1: modificando un script de inicio de cada usuario === | ||
+ | |||
+ | Consiste en modificar el fichero .bashrc y añadir esta línea: | ||
+ | |||
+ | < | ||
+ | export PATH=/ | ||
+ | </ | ||
+ | |||
+ | === Forma 2: haciendolo de forma global para todo el sistema === | ||
+ | |||
+ | Dentro de la carpeta / | ||
+ | |||
+ | < | ||
+ | # | ||
+ | # local.sh - local changes for this system | ||
+ | # | ||
+ | |||
+ | export PATH=/ | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ==== El paso final: desactivar la cuenta de superusuario ==== | ||
+ | |||
+ | Hasta aquí la cosa va muy bien, porque además de tener unas cuentas de usuarios normales que ahora pueden actuar como superusuarios del sistema, el paso final es desactivar la cuenta de superusuario. | ||
+ | |||
+ | TODO: incluir instrucciones para desactivar la cuenta de super-usuario. | ||
+ | |||
+ | ===== Cómo trabajar con sudo ===== | ||
+ | |||
+ | Seamos precisos: hablaremos de cómo trabajar con sudo con la configuración que hemos descrito aquí. Por un lado, cada vez que queramos ejecutar un comando como root, haremos lo siguiente: | ||
+ | |||
+ | < | ||
+ | # sudo comando [parámetros] | ||
+ | </ | ||
+ | |||
+ | o bien, si queremos ser más precisos: | ||
+ | |||
+ | < | ||
+ | #sudo -u root comando [parámetros] | ||
+ | </ | ||
+ | |||
+ | También podemos convertirnos temporalmente en root: | ||
+ | |||
+ | < | ||
+ | # sudo su | ||
+ | </ | ||
+ | |||
+ | o bien en otro usuario: | ||
+ | |||
+ | < | ||
+ | # sudo su - nombre_usuario | ||
+ | </ | ||
+ | |||
+ | Aunque si lo pensamos bien, estas dos opciones deberíamos desactivarlas, | ||
+ | |||
+ | |||
+ | ===== La informática con seguridad nunca es fácil ===== | ||
+ | |||
+ | ==== Hay que escribir " | ||
+ | |||
+ | La informática con seguridad no hace las cosas más fáciles. Parece que esos dos palabros estén condenados a no llevarse bien. | ||
+ | |||
+ | De momento, usar sudo nos hace la tarea de administración del sistema bastante más dura. En lugar de escribir: | ||
+ | |||
+ | < | ||
+ | # mkdir /etc/prueba | ||
+ | </ | ||
+ | |||
+ | Ahora tendremos que escribir: | ||
+ | |||
+ | < | ||
+ | # sudo mkdir /etc/prueba | ||
+ | </ | ||
+ | |||
+ | Si no te parece una concesión importante, prueba a escribir cincuenta comandos así. | ||
+ | |||
+ | Hombre, siempre podremos crear un alias: | ||
+ | |||
+ | < | ||
+ | # alias s=' | ||
+ | </ | ||
+ | |||
+ | que nos haga la vida más fácil. | ||
+ | |||
+ | Otro truco es hacer un " | ||
+ | |||
+ | < | ||
+ | # sudo su | ||
+ | </ | ||
+ | |||
+ | A partir de ese momento nos convertimos en root. | ||
+ | |||
+ | ==== Copiar ficheros entre servidores ya no es tan fácil ==== | ||
+ | |||
+ | TODO: hacer un scp entre dos comandos exige de una cuenta, que de momento sólo vamos a disponer de nuestra propia cuenta por lo que hay que hacer una copia temporal a nuestro directorio de usuario " | ||
+ | |||
+ | Es posible copiar un fichero remotamente sin tener la contraseña de root, en un sistema en el que tengamos acceso mediante sudo. Se trata de usar una facilidad de SSH que permite ejecutar un comando en la máquina remota en lugar de un shell: si ejecutamos | ||
+ | |||
+ | < | ||
+ | maquina_origen> | ||
+ | </ | ||
+ | |||
+ | SSH ejecutará el comando en la máquina remota y devolverá el resultado por pantalla. | ||
+ | |||
+ | Para conseguir copiar un comando al que sólo tenga acceso root, podemos hacer lo siguiente: | ||
+ | |||
+ | < | ||
+ | maquina_origen> | ||
+ | </ | ||
+ | |||
+ | De esta forma, nos conectaremos como nuestro usuario en la máquina remota, y ejecutaremos " | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Algunos enlaces interesantes ===== | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | [[NotasDescartadas]] | ||
+ | |||