27 may 2011

Administración segura de Linux con sudo


Root es el todopoderoso en Linux. Gracias a nuestra característica errante como seres humanos es muy aventurado usar root. Usando sudo podemos limitar el riesgo y evitar situaciones indeseadas.


Uso de root en linux


La cuenta root en Linux puede hacer todo - ver todos los archivos, correr todas las tareas, matar todos los procesos, ver todos los logs, borrar discos duros, etc. En lo personal, he visto muchos "administradores" que son felices usando root, inclusive que inician sesión en el ambiente gráfico como root. A este tipo de personas también las he visto sufrir y llorar durante días debido a que cometieron errores difíciles de revertir. Por ejemplo: apagar el servidor, borrar el directorio /, activar el firewall, etc.

Afortunadamente, existe una forma de limitar el impacto del error humano, esto se logra con sudo, qué, sencillamente, permite ejecutar comando como root a usuarios que no son root. Eso no le quita lo peligroso, pero si nos va a ahorrar muchos dolores de cabeza.



¿Cómo funciona sudo?

Sudo permite a los usuarios realizar acciones como root. Podemos especificar las cuentas de usuario que pueden hacer tareas especificas. Por ejemplo, si queremos darle permiso al usuario angel para reiniciar apache, angel puede hacer lo siguiente:

angel@angel-Vostro-200:~$ sudo /etc/init.d/httpd restart
Password: #angel's password entered
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

Sin ser root, angel pudo reiniciar apache. Adicional a esto, todas las acciones son reportadas a /var/log/messages.

Jun 12 00:00:01 angel-Vostro-200 sudo: angel : TTY = pts/0 ; PWD = /home/angel ; USER = root ; COMMAND = /etc/init.d/httpd restart

Configurando los permisos

Para hacer esto se debe acceder como root y ejecutar visudo.
# visudo

Este es el archivo de configuración de sudoers. Aquí se definen los comandos que vamos a permitir que ejecuten los usuarios como root. Nuestra necesidad es que angel pueda administrar Apache.

Para facilitar la administración, sugiero generar alias de usuario.
User_Alias WEBSERVERADMIN = angel

A continuación se definen los servicios que angel podrá operar.
Cmnd_Alias APACHE = /etc/init.d/httpd start, /etc/init.d/httpd stop, /etc/init.d/httpd restart, /etc/init.d/httpd graceful, /etc/init.d/httpd configtest

Por último, construimos los permisos usando alias de usuario y de comando:
WEBSERVERADMIN ALL= APACHE

Para salir de visudo, presionamos ESC y escribimos :wq en modo comando (igual que en vi)

A partir de este momento, cualquier usuario en el alias WEBSERVERADMIN podrá usar los comandos definidos en  Cmnd_Alias cuando usen sudo.

Nota: No olviden anteponer sudo antes de ejecutar el comando. 

Nos vemos en la siguiente entrada.

20 may 2011

Buscar y Reemplazar en VI

Algo que normalmente hacemos en Win2, en Word, Excel, Notepad y, prácticamente, en cualquier editor gráfico de texto, es usar la función "Buscar y Reemplazar". Pero qué pasa cuando estamos frente a una consola linux, sin ambiente gráfico... Cómo que la cosa se complica, no? Bueno, pues el editor "vi" (vi-ai) nos permite hacer esto de una forma sencilla:



Abran el archivo con vi

$ vi archivo

Vayan a "command mode" presionando la tecla <ESC> y a continuación escriban:

:1,$ s/texto_buscado/reemplazar_con/g

Esto significa, escribir el carácter dos puntos ":" luego definimos el rango de líneas en donde queremos buscar y reemplazar, en este caso decimos: desde la línea "1", luego "," y el "$" que significa la última línea del archivo.

A continuación un "espacio" y "s/" que significa "Search" escribir el texto a buscar, luego "/" escribir el texto con el qué vamos a reemplazar, y por último "/g" para indicar el fin del comando.

:1,$ s/texto_buscado/reemplazar_con/g

Si desean que por cada coincidencia les vaya confirmando el reemplazo solo agreguen una "c" al final:

:1,$ s/texto_buscado/reemplazar_con/gc

Listo, nos vemos en la siguiente entrada.