Recientemente, un “Webmaster” usó en uno de los servidores que patrocino; un
escaner de vulnerabilidades. El administrador de red del lugar, le dio acceso al
servidor; claro está. El informe reveló un cartapaso de vulnerabilidades. Por
ejemplo, la ausencia de una partición swap; podría dar lugar a un kernel-panic
por falta de memoria RAM; en un servidor de correo con 4 Gigas de RAM. Además,
advertía que la versión de bash (con sus parches puestos) era muy vieja y
recomendaba usar una reciente. Como si instalar software reciente en debian
fuese jamón.
No vi nada con respecto a postfix o dovecot pero de inmediato me llamaron para
que explicara como era posible que mi servidor tuviera semejantes
vulnerabilidades. Claro, con acceso a root cualquiera busca vulnerabilidades.
Soy de los que pasa HORAS, intentando penetrar mi propia seguridad; pero el caso
llevaba un contra ataque más elaborado.
El sosftware por excelencia para probar la seguridad: OpenVAS
No solo identifica el problema, también te dice como arreglarlo.
Funciona de manera similar a un antivirus. Una base de datos se actualiza y ala
las vulnerabilidades conocidas. Luego, una interfaz web, de lo más cómoda;
permite llevar a cabo un análisis tanto ligero como exhaustivo del sistema
seleccionado como objetivo. Además, se pueden programar análisis de manera
automatizada.
Su interfaz web, el llamado “Greenbone Security Assistant”, nos hará la vida muy
fácil una vez instalado.
En archlinux todo es un rollo, así que empezemos:
“instalando openvas”
1
pacman -S openvas
La interfaz web de openvas (el greenbone) debe ser contactada por SSL (obligao).
Como siempre, crear los certificados es todo una ceremonia.
“creando certificados”
12
openvas-mkcert
openvas-mkcert-client -n -i
Ahora lo más importante. Descargarnos la base de datos con las amenazas, o sea,
con las vulnerabilidades.
Una vez dentro, verás la página donde se almacenan los escaneos. Ahí localiza un
botón morado con una barita mágica. Vea la imagen de abajo
En la pantalla que le sigue, especificamos el host al que queremos escanear.
Apto seguido, comenzará el escaneo. Es posible que el servidor deje de prestar
servicios; pues openvas le da con todo.
Finalmente, cuando el escaneo esté terminado, en vez de un tanto por ciento,
verás; como en la primera imagen, un letrero que dice “done” sobre la barra
azul.
La imagen muestra, el resultado del webmaster que le tiró piedras al tejado del
vecino con el suyo de vidrio. Al hacer click en la vulnerabilidad, nos muestra
la solución, como es el ejemplo de esta:
Hermosa pareja; el problema y la solución junticos…
Cualquiera que sepa como usar debidamente los scaffolds, o sea, cualquiera que
sepa como hacerle la paja a ruby on rails para que haga lo que queremos; seguro
habrá intentado en algún momento, añadir un nuevo método a un scaffold. Además,
de seguro quisiste luego poder llamarlo con los métodos “metodo_user_path” y que
la ruta se cree de manera automática.
Por ejemplo, en este caso, tengo el scaffold user y le agregué el método
cambiar aparte de los clásicos PUT y DELETE.
“scope de users_controller.rb”
1234567891011
# cambia el estado de habilitación del usuariosdefcambiar@user.enabled=!@user.enabled@user.saveredirect_to:backend# GET /usersdefindex@users=User.allend
Pero el método cambiar no aparece en rails hasta que no hagas lo siguiente en el
fichero de las rutas.
“config/routes.rb”
1234567891011
# el scaffold de los usuariosresources:usersdo# agregamos el verbo cambiar usado para# @user.enabled=!@user.enabled# para que exista: cambiar_user_pathmemberdoget'cambiar'endend
Ahora existirá el método cambiar_user_path que toma como argumento el
usuario.
cambiar_user_path(user)
De esta manera, se le manda el objeto usuario y genera una URL como
Pensaba escribir una entrada sobre como hacer que se vean los glyphicons luego
de instalar la gema de boostrap en rails 4; pero, recientemente he recibido
numerosas críticas, sobre entradas de mi blog. Dicen que hablo sobre como
solucionar problemas de cosas que ni si quiera conocen pero al parecer están muy
buenas.
Bootstrap es un framework CSS patrocinado por Twitter
y es el fin de los dolores de cabeza para todo el que como yo, le tiene terror a
programar CSS. Por supuesto, como todo en materia de framework, tiene sus pro y
sus contras.
La ventaja de usar un framework, es que te ahorras un mundo de código. La
ventaja además; de usar un framework CSS, es que estás de manera automática
arriba de los último en materia de CSS.
La desventaja de usar un Framework (cea CSS o no) es que en la mayoría de los
casos, carga mil y un elemento que nunca usarás. Por ejemplo, tengo una
aplicación que NO usa carrousel; pero como está hecha a la carrera, no he tenido
tiempo de determinar que elementos o no cargar con bootstrap. Por definición, se
cargan todos.
En nuestro Gemfile, debemos declarar que use bootstrap así:
“scope del Gemfile”
1
gem"twitter-bootstrap-rails"
Luego, procedemos a la instalación del tema CSS, en mi caso, como no uso less ni
nada de eso, lo hago así:
“instalando el engine”
1
rails generate bootstrap:install static
Con eso, supuestamente ya está listo. Pero como todo en ruby on rails se queda
atrás, resulta que el asset pipeline moderno no carga las fuentes y en el
fichero application.css hay que añadirle el siguiente código:
“app/assets/stylesheets/application.css”
12345678910
/* Esto va al final de la CSS */@font-face{font-family:'Glyphicons Halflings';src:url('../assets/glyphicons-halflings-regular.eot');src:url('../assets/glyphicons-halflings-regular.eot?#iefix')format('embedded-opentype'),url('../assets/glyphicons-halflings-regular.woff')format('woff'),url('../assets/glyphicons-halflings-regular.ttf')format('truetype'),url('../assets/glyphicons-halflings-regular.svg#glyphicons_halflingsregular')format('svg');}
¿Qué como conseguí eso? Ni preguntes, me lo mandó por correo un salvaje de la
materia.
Otra cosa:
Si no sabes usar boostrap, te recomiendo que le eches un vistazo. Si sabes
escribir CSS, te recomiendo que lo veas igual, pues tiene una buena API para
personalizarlo como te de la gana.
pero está la gema bootstrap-sass
Sí, ya se que está bootstrap-sass,
que es además es el port oficial de bootstrap y que rails usa
SASS; pero te imaginarás el criterio que tengo sobre
sass.
Por mi, coffe-script y sass pueden cogerlos, doblarlos bien y meterselos ambos
en el…. BOLSILLO. El programador web que no quiera aprender JavaScript y CSS
está embarcao. Por otra parte, para aprender SASS y CoffeScript hay que saber
CSS y JavaScript :D ¿Que problema verdad?
Helpers de utildad
La diferencia entre bootstrap-sass y twitter-bootstrap-rails es que
boostrap-sass la hizo la gente de bootstrap y la segunda, la hicieron usuarios
de ruby on rails…
Te explico:
“fulanito.erb.html”
123
<%=nav_barbrand:"Páfata"do%><%=menu_text"El texto de la barra"%><%end%>
Eso generará un navbar como este:
“render output”
12345
<navclass="navbar navbar-default"role="navigation"><divclass="container"><aclass="navbar-brand"href="http://127.0.0.1:3000/">Páfata</a><pclass="navbar-text">El texto de la barra</p></div></nav>
Si eso no te pareció emocionante, mira el helper de flash. Ponte tu que halla un
error y lo metes en el flash.
“ejemplo_controller.rb”
1234
deffulanitoflash[:error]='Bofatás! El error del milenio'render:fulanitoend
En la vista, pones está simple linea:
“fulanito.erb.html”
1
<%=bootstrap_flash%>
Y se renderiza:
“render output”
1234
<divclass="alert fade in alert-danger "><buttonclass="close"data-dismiss="alert">×</button>Bofatás! El error del milenio
</div>
Échale un vistazo al link de abajo, pa que veas como renderizan breadcumb
declarando los componentes en los controladores.
Aunque el islam es algo poco común en cuba, cada día en el mundo, va tomando más
fuerza. Nunca falta un curioso que se cree culto y te dice.
“yo creo en dios, no en alá”.
Sin darse cuenta el disparate que están diciendo.
Alá es la hispanización de la palabra árabe Al-lāh (الله), que en español significa Dios.
De hecho, los cristianos árabes (que hay) llaman a dios Alá, porque repito,
significa dios LITERALMENTE
Claro, como en todas las religiones, siempre hay extremistas y aquí los hay, que
andan por la habana, disfrazados de árabes y dicen Alá en vez de dios.
Por otra parte, el idioma litúrgico
del islam es el árabe, razón por la cual el término suena más o menos como al
laaj y mucha gente lo agarra por el mango.
Existen dos grandes traducciones del corán al español, la Julio Cortés y la Isa
García. La primera, en mi opinión, es bastante mala; comparada con la segunda,
que es más completa, ya que incluye una interpretación contextual [entre
corchetes] de las oraciones más complejas. Esto nos da la medida que la
traducción es más fiel. En esta traducción, se usa el término Dios en lugar de
Alá (casi siempre con inicial mayúscula).
Por esta razón, mucha gente hablando en español dice “alá”. Y yo pregunto:
¿Has visto algún testigo de Jehová diciendo GOD?
Claro que no, todos dicen dios. Porque cuando la religión salió de Estados
Unidos, medio mundo sabía inglés.
Sin embargo, cuando el islam salió del mundo árabe, la palabra Alá empezó a
sonar en España, donde no convenía que Alá y Dios fueran la misma cosa. A los
Españoles había que convencerlos de que adorar a alá era adorar a un dios
diferente. Problemas políticos de aquel entonces, por una bobería ahí
llamada reconquista.
Hoy, en el siglo XXI, sabemos que dios en árabe se dice “al laj” (Al-Lāh o الله).
Dios y Alá, son la misma cosa, solo cambia la manera en que las vemos… Dios es
uno solo, onmipotente y omnisapiente; nosotros los mortales, dadas nuestras
diferencias políticas, culturales e idiomáticas, necesitamos ponerle nombre a
dios para poder comprenderlo.
En este post, me propongo mostrarle algunas de las bondades de pacman. Cualquier
que conozca Arch Linux, sabe de lo que estoy hablando.
Veremos bien de cerca el engranaje de está compleja maquinaria.
Pacman, es una herramienta lo suficientemente versátil como para llevar el
nombre de “administrador de paquetes”. Su nombre es un juego de palabras que
proviene de juntar las palabras “PACkage MANager”.
A diferencia de ciertas y determinadas distribuciones (entiéndase debian); que
requieren más de 3 softwares para esa pincha. Pacman solo es autosuficiente para
gestionar la paquetería. La herramienta repo-add, está incluída dentro del
paquete de pacman y se usa para crear repositorios personalizados.
Como ya sabrán (o se darán por enterado) Arch Linux no es por release, si no que
un canal en constante desarrollo, hace como upstream, donde se depositan los
paquetes consideraros estables. Esto es lo que en distribuciones estáticas se
llamara “repo”. Pacman lleva la ardua tarea de mantener el sistema debidamente
actualizado. Nuestro sistema no tendrá “actualizaciones” si no que evolucionará
constantemente desde el “core”, escalando horizontalmente el sistema completo.
De esta manera se logra el mítico equilibrio entre estabilidad y novedad.
Para ello, pacman debe tener constancia local de la lista de paquetes que hay en
el upstream. Estas listas son ficheros de textos, comprimidos con gzip, que
contienen información acerca de lo que hay arriba. Por ejemplo, contiene la URL
de como descargarlos.
Para pacman, instalar un paquete o alar está lista, es casi la misma operación.
Se llama “sync” (sincronizar)
“-Sy”
1
pacman -Sy
Pero puedes de un solo viaje, sincronizar y actualizar todo el sistema.
“lo úlitmo que trajo el barco
1
pacman -Syu
Buscar un paquete también es una operación de sincronización.
“buscar fulanito”
1
pacman -Ss fulanito
También puedes, bajar la lista, actualizar el sistema e instalar algo de un solo
golpe.
“todo junto”
1
pacman -Syu fulanito
Pacman irá a los sitios que tiene declarado en el fichero: /etc/pacman.d/mirrorlist
y bajará esos ficheros. Seguidamente los depositará en el directorio /var/lib/pacman/sync/
“bases de datos”
12345
[lazaro@artema ~]$ file /var/lib/pacman/sync/*.db/var/lib/pacman/sync/archlinuxfr.db: gzip compressed data, last modified: Thu May 21 04:31:59 2015, from Unix/var/lib/pacman/sync/community.db: gzip compressed data, last modified: Fri May 29 08:47:01 2015, from Unix/var/lib/pacman/sync/core.db: gzip compressed data, last modified: Wed May 27 19:02:40 2015, from Unix/var/lib/pacman/sync/extra.db: gzip compressed data, last modified: Fri May 29 04:27:15 2015, from Unix
Ahora nuestro sistema sabe lo que hay “arriba” (en el repo) y está listo para
compararlo con lo que está “abajo” (instalado). La información sobre todo los
paquetes que el sistema tiene instalado, se almacena en el directorio
/var/lib/pacman/local/
La lista es muy grande para mostrarla. Pero dentro hay directorios con la
versión de cada programa instalado. Dentro de ese subdirectorio, hay 4 ficheros
que contiene la información del paquete instalado.
Por ejemplo, el paquete ruby, en su versión 2.2.2-1 responde al
directorio /var/lib/pacman/local/ruby-2.2.2-1
Cada directorio, contiene 4 ficheros:
“metainfo de un paquete instalado”
12
[lazaro@artema ~]$ ls /var/lib/pacman/local/ruby-2.2.2-1/desc files install mtree
El fichero desc contiene la información que describe al paquete, versión,
nombre, etc..
El fichero files contiene la lista de ficheros que instala dicho paquete.
El fichero install contiene una serie de comando disparadores, como
post_install. Dentro de install, se declaró una función llamada post_install()
que será llamada cuando el paquete termine de ser instalado.
Por último, mtree (que está comprimido con gz) contiene lo mismo que files,
pero con la suma MD5 de cada fichero. Esto es usado por pacman para verificar la
integridad de los archivos instalados.
Por ejemplo, si quisiéramos ver que ficheros contiene el paquete ruby, podríamos
ver el contenido del fichero files pero sería más fácil usar el comando
Query con el argumento list
El principal fichero de pacman, es /etc/pacman.conf y a diferencia de otros
package managers, este es bien sencillo. Además, es MUY personalizable.
Por ejemplo, la cláusala XferCommand, permite especificar que comando usar para
bajar los paquetes. Las variables, %u y %o serán enviadas como URL del paquetes
y fichero en disco.
En este caso, los ficheros .mo no serán extraídos de los paquetes durante el
proceso de instalación. Como yo uso el sistema en inglés, no me interesa tener
las traducciones de sepetecientos idiomas.
Los paquetes que instales, irán al directorio /var/cache/pacman/pkg/ y
podrías usar dicho directorio como repo para compartirlo con aquellos que no
tiene acceso a internet; o bien, llevártelo para tu casa, lugar donde te
integras al grupo antes mencionado.
Quizás te interese crear tu propio repo. La idea de crear un repo a partir de la
cache, le ha tirado un cabo a una pila de gente. En un viaje reciente que hice
por el oriente de la isla, cargué mi laptop con todo el software necesario he
instalé 3 servidores con arch sin conectarme a internet (vergonzosa hazaña).
Aquellos paquetes que una vez fuero instalados se mantienen. Por tanto, supón
que quieres tener en la otra máquina (la de tu casa) “geary” el cliente de
correo. Simplemente lo instalas y lo desinstalas en la máquina privilegiada.
“cacheando paquetes”
1
pacman -S geary && pacman -R geary
Ahora el paquete está en la cache, y aunque ya no está en el sistema, se
conservará en la cache hasta que no lo borres. Claro, esto tiene como desventaja
que no se bajarán actualizaciones para ese paquete.
En mi caso, yo tengo este escripcito al que llamo mkrepo.sh
mkrepo.sh
12345678910111213141516
#!/bin/bash
# elimina esa base de datos
rm /var/cache/pacman/pkg/custom.db.tar.gz# crea una nueva
repo-add /var/cache/pacman/pkg/custom.db.tar.gz /var/cache/pacman/pkg/*.pkg.tar.xz# dime que tengo que poner
echo '''[mirepo]SigLevel = Optional TrustAllServer = http://localhost:8080'''# sírvelo con darkhttpd
darkhttpd /var/cache/pacman/pkg/ --chroot --port 8080
Al correrlo, la cache se indexa; lista para ser usada como repo. El script hace
un echo, para recordarte como sería la configuración que debes poner en
/etc/pacman.conf para usar ese repo.
Finalmente, darkhttpd (un servidor web que viene con el Live de arch) sirve ese
repo.
Quizás tengas una memoria flash donde creas el repo. En ese caso, bastaría con
especificar una linea Server con la dirección file:///
Server = file:///media/MEMORIA/repo/
Simple verdad?
Pensé hacer esta entrada más larga, pero sería aburrir al lector. En cambio,
ahora ya sabes una parte, te dejo que investigues el resto.
En esta sofocante tarde de verano cubano y en un lugar que no diré, me encontré
detrás de un proxy administrador por la
Schutzstaffel. Lo que no se
parezca a un navegador, NO PASA. Por tanto, Ruby, Wget y demás, NO pinchan.
Por suerte, tengo la costumbre de usar un squid local, para no tener que estar
configurando el navegador. En ese squid declaro como padre el squid del momento
(ya sea salud u otro) y ahí pongo el nombre de usuario con la contraseña una
sola vez. Si estás en cuba y tienes una laptop con linux, te aconsejo que acates
esa costumbre.
Solución:
Reescribir el encabezado User-Agent de las peticiones en el squid local. Así
todas salen de un supuesto firefox.