martes, 31 de mayo de 2016

For system admins: Know where 'they' can write ...


Have you ever feel anguished allowing untrusted users access to terminal emulation in your systems?

I was in that situation with some Docker ssh containers I shared, so I decided to know which are my writables directories in my systems for an user. I share with you my python script to report that:

https://github.com/jvillaraco/sys/blob/master/testRights.py

 Any suggestion will be welcome!

jueves, 26 de mayo de 2016

Instalación de Docker sobre Debian con personalización del interfaz docker0

De la serie manos a la obra ...

Intro

Últimamente he tenido que dar solución a una situación compleja y, de las alternativas, la mejor posicionada era el contenedor del tipo Docker. A pesar de que los servidores de explotación los tenemos sobre RHEL, utilizo algún Debian para hacer pruebas de concepto (creo que un día documentaré las razones para mantener una Debian para este tipo de pruebas por su facilidad) ...


Problema

En principio una instalación que parecía que iba a ser del tipo 'siguiente, siguiente' (si eso es realmente aplicable al mundo de la consola), se complicó (solo un poco) ya que el segmento de red donde Docker asigna la IP de las máquinas/aplicaciones que levanta COINCIDÍA con el segmento que usamos en la oficina para los PC de trabajo de la red interna, la 172.17.0.0/16 (Un post explicativo). Ya os imagináis, cuando le levanta el servicio docker se deja de ver el servidor a nivel de IP. Si le añadimos al hecho del cambio de Debian al Systemd (no sin ruido ...), hace que todas las soluciones en doc. existente no funcionara. Ahí están expuestas las razones para escribir el artículo.


Instalación

Se puede seguir la documentación del fabricante para la instalación sobre Debian:
https://docs.docker.com/engine/installation/linux/debian/

(La verdad es que hasta aquí es trivial)


Configuración

La solución pasa por modificar la red docker0 para que no sea la 172.17.0.0/16. Para ello (se ejecuta como root o mediante sudo):

Se edita el fichero /lib/systemd/system/docker.service

Se modifica la linea siguiente:
  ExecStart=/usr/bin/docker daemon -H fd://

Por la siguiente:
  ExecStart=/usr/bin/docker daemon -H fd:// --bip=192.168.133.1/24

systemctl daemon-reload

systemctl show docker --property ExecStart
  (se verifica que aparezca la opción añadida)

systemctl restart docker

docker run hello-world



Se explican los comandos utilizados:
  • La linea ExecStart del fichero /lib/systemd/system/docker.service: Como se puede deducir, corresponde a la linea executada por el Systemd en el momento de arrancar el servicio configurado.
  • El parámetro --bip de la linea ExecStart: Asigna la IP del Ethernet Bridge docker0 creado por el servicio Docker. Se puede ampliar la documentación de esta operación en el doc.: https://docs.docker.com/engine/userguide/networking/default_network/custom-docker0/.
  • systemctl daemon-reload: Recarga el system con las nuevas unidades o las modificaciones de las existentes
  • systemctl show docker --property ExecStart: Verifica la propiedad ExecStart de la unidad docker.
  • systemctl restart docker: Rearranca el servicio docker
  • docker run hello-world: Arranca un contenedor de la imagen hello-word. En el siguiente enlace encontraréis más información sobre esta imagen: https://hub.docker.com/_/hello-world/