Controlar actividad de usuarios en GNU/Linux

Una de las cosas más complejas a la hora de administrar un servidor compartido es controlar qué hace cada usuario. Es importante tener y poder saber qué hace cada usuario en su momento, no sin embargo verlo. Esta parte hay que dejarla clara: Poder saber no es lo mismo que saber. Cada usuario en su día a día de trabajo necesita hacer muchas cosas, y que seas root no te da derecho a "espiar" lo que hace cada usuario. Sin embargo, puede darse el caso de que pase algo en el sistema y quieras saber quién fue el responsable de tal fechoría. Para hacer este tipo de análisis, sí que se puedes emplear estas herramientas de auditaría.
Hoy vamos a hablar por lo tanto de acct, una utilidad para la contabilidad de procesos e inicios de sesión en GNU/Linux. Si la tienes que emplear, da mucho juego e información, así que no está demás tenerla como proceso en el sistema. No consume mucho y llegado el momento, puede ser de utilidad.
Lo primero es instalarla. Para ello,
shell> apt-get install acct
O en sistemas Red Hat,
shell> yum install psacct
Tras su instalación, tendremos que arrancar el proceso que lleva el mismo nombre que el paquete. A partir de este momento, acct estará ya recolectando datos para nosotros, así que toca ver la forma de explotar los datos que almacena.
  • ac
    Este comando se encarga de sacar información de tiempo de conexión de usuario al sistema.
    shell> ac -p
       root                  1823.40
       javier                0.00
    
       total     1823.40
    
  • sa
    No muestra un sumario de información relativa a las estadísticas de ejecución de cada usuario.
    shell> sa -u
       -7365568   0.00  cpu    979k  mem  accton
       -7365568   0.00  cpu  26288k  mem  touch
       -7365568   0.00  cpu  26608k  mem  psacct
       -7365568   0.00  cpu    979k  mem  consoletype
       -7365568   0.00  cpu  26528k  mem  psacct       *
       -7365568   0.00  cpu  26608k  mem  psacct
       -7365568   0.00  cpu  28928k  mem  ls
       -7365568   0.31  cpu  27696k  mem  bash
       -7365568   1.41  cpu  17472k  mem  sshd
       -7365568   0.00  cpu   4332k  mem  unix_chkpwd
       -7365568   0.00  cpu   4332k  mem  unix_chkpwd
       -7365568   0.00  cpu  16416k  mem  sshd         *
       ...
    
  • lastcomm
    Muestra todos los comandos que los usuarios han ejecutado en el sistema. Este es el comando más potente, sin dudarlo, ya que permite sacar mucha información o ser muy cotilla, lo que prefiramos.
    A parte del comando ejecutado, también nos indica la fecha, el usuario y dónde se ejecutó.
    shell> lastcomm
       gtbl           root   pts/0   0.00 secs Sun Jun 22 13:48
       sh         F   root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       bash       F   root   pts/0   0.00 secs Sun Jun 22 13:23
       hostname       root   pts/0   0.00 secs Sun Jun 22 13:23
       bash       F   root   pts/0   0.00 secs Sun Jun 22 13:23
       id             root   pts/0   0.00 secs Sun Jun 22 13:23
       sshd      SF   sshd   ---     0.00 secs Sun Jun 22 13:23
       ...
    
    Como veis, información muy valiosa para análisis en caso de desastre.
Por supuesto, estos tres comandos tienen muchas más opciones que permiten extraer o simplificar la información mostrada, así que no dudes en echarle un vistazo a la página man de cada uno.
Leer más

Desfragmentar disco en Linux

Muchas veces la gente que está acostumbrada a emplear Windows, cuando comienza en el mundo de Linux le sorprende que no haya una forma fácil de desfragmentar el disco duro, como hacía en sus épocas Windowseras. La verdad es que siempre se suele decir que los sistemas ext3 y ext4, los más empleados últimamente en el mundo GNU/Linux, especialmente de escritorio, no sufren de fragmentación. Esto es una verdad a medias, o una mentira piadosa, como prefiráis decir. Todos los sistemas de ficheros, al trabajar con ellos se fragmentan y los de GNU/Linux no iba a ser menos. Es cierto, que por el diseño se fragmentan mucho menos, pero algo también sufren.
Pues bien, si sois de lo que preferís tener el sistema siempre muy controlado y os gusta tener el disco perfectamente ordenado e4defrag es vuestra utilidad para sistemas de ficheros extN.
Lo primero es instalarla y en sistemas basados en Debian esta utilidad está dentro del paquete e2fsprogs, así que...
shell> apt-get install e2fsprogs
Tras su instalación, podemos ver el porcentaje de fragmentación que tiene una de nuestras particiones tal que así,
shell> e4defrag -c /dev/mapper/vg0-data
Fragmented files                      now/best     size/ext
1. /data/01 - El big bang.avi         283/1        1869 KB
2. /data/02 - Agujeros negros.avi     234/1        2258 KB
3. /data/04 - Estrellas.avi           215/1        2458 KB
4. /data/08 - Lunas.avi               208/1        2544 KB
5. /data/05 - Planetas.avi            197/1        2688 KB

 Total/best extents                   44846/30877
 Average size per extent              4961 KB
 Fragmentation score                  0
 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
 This device (/dev/mapper/vg0-data) does not need defragmentation.
 Done.
Lo que está aquí representado es el resultado de ejecutar el comando en el disco que tiene las "copias de seguridad" de todo aquello que veo y que tras varios años escribiendo y borrando en él, apenas hay fragmentación. Por este detalle es por lo que se suele decir que GNU/Linux no sufre de este tipo de problemas.
Por supuesto, si vuestro sistema presenta más fragmentación o algún tipo de problema, la forma de ejecutar e4defrag es la misma, simplemente sin la opción -c.
shell> e4defrag /dev/mapper/vg0-data
Según el tamaño de los ficheros y el estado del disco, le llevarán un poco más o un poco menos. Al finalizar os presentará las estadísticas y vuestro disco quedará sin la tan temida fragmentación.

Nota: Es recomendable que durante el proceso de desfragmentado se emplee el acceso a disco lo menos posible.
Leer más

Postfix: Permission denied

El otro día estaba intentando enviar mails desde una aplicación web, corriendo en un Apache con un servidor con Red Hat y, qué raro, los correos no se enviaban y la función siempre daba fallo. El código PHP sabía que estaba correcto y con Postfix también correctamente configurado, tuve que investigar un poco más el motivo.
Tras ver un poco por los logs, concretamente en el fichero relacionado con el sistema de correo (/var/log/maillog), vi que se estaba llenando de líneas como las que siguen:
postfix/sendmail[8500]: fatal: chdir /var/spool/postfix: Permission denied
postfix/sendmail[9316]: fatal: chdir /var/spool/postfix: Permission denied
postfix/sendmail[9764]: fatal: chdir /var/spool/postfix: Permission denied
Tras un poco más de investigación me acordé de que Red Hat trae SELinux y que probablemente me estuviese molestando un poco. Lo primero que hice fue comprobarlo para estar seguro y nada mejor para ello que el comando getsebool.
shell> getsebool -a | grep mail
   allow_postfix_local_write_mail_spool --> on
   httpd_can_sendmail                   --> off
   logging_syslogd_can_sendmail         --> off
Bien, efectivamente aquí tenemos el problema. La variable httpd_can_sendmail está a off, con lo cual deshabilita|bloquea|prohibe cualquier posibilidad de envío de correos desde el servidor. Así que vamos a habilitarla.
shell> setsebool httpd_can_sendmail 1
Tras este sencillo comando, comprobamos que el nuevo valor se estableció correctamente,
shell> getsebool -a | grep httpd_can_sendmail
   httpd_can_sendmail --> on
Y ahora desde la aplicación web ya me permite enviar correos de forma satisfactoria.
Leer más

Deshabilitar la comprobación de discos en el arranque

Creo que a muchos, por no decir todos los que estemos leyendo esta entrada nos habrá pasado alguna vez, que tras reiniciar un equipo y teniendo prisa en que arranque, éste se pone a comprobar el disco en busca de problemas.
Esta tarea está por defecto en los sistemas de ficheros extN y reiserfs y, lógicamente, si está es por algo. Pero puesto que GNU/Linux es altamente configurable si deseamos que una partición nunca se compruebe, bien por que son muchos datos, bien por que lo hacemos nosotros manualmente, podemos indicárselo. Para ello existe el comando tune2fs.
shell> tune2fs -c0 -i0d /dev/sdXY
Según el manual, las opciones que le pasamos indican lo siguiente:
  • -c max-mount-counts
    Adjust the maximal mounts count between two filesystem checks. If max-mount-counts is 0 then the number of times the filesystem is mounted will be disregarded by e2fsck and the kernel.
  • -i interval-between-checks[d|m|w]
    Adjust the maximal time between two filesystem checks. No postfix or d result in days, m in months, and w in weeks.
    A value of zero will disable the time-dependent checking.
Como veis, en el man de tune2fs se explica el método para deshabilitar, aunque también recomienda no deshabilitarlo, ya que la comprobación del sistema de ficheros es algo importante, ya que garantiza la integridad y la consistencia de los datos.
Failure to do so may lead to filesystem corruption due to bad disks, cables, memory, or kernel bugs to go unnoticed until they cause data loss or corruption.
Así que ya sabéis, si necesitáis evitar que la máquina compruebe el disco tras un reinicio concreto, existen otras formas de hacerlo y si aun así queréis deshabilitarlo, tener presente los problemas futuros que pueda entrañar.
Leer más

OpenSSL break: Actualización de Zimbra

Hace unos meses ya publicamos una advertencia de fallo de seguridad grave en OpenSSL y Zimbra estaba afectado, por lo que dijimos cómo actualizarlo.
Esta última semana el mundo de la seguridad se volvió a ver un poco azotado ya que OpenSSL cayó nuevamente. Por supuesto esto implica, si tienes un sistema afectado, actualizar rápidamente, y Zimbra no se hizo esperar y sacó un parche de seguridad a dicha vulnerabilidad. Aplicarlo, como suele ser bastante habitual en Zimbra, es sencillo.
Lo primero, es descargarse el código de parche.
shell> cd /tmp
shell> wget http://files.zimbra.com/downloads/security/zmopenssl-updater.sh
shell> chmod a+rx zmopenssl-updater.sh
Tras ello, debemos de, como usuario zimbra, parar todos los servicios.
shell> su - zimbra
zimbra@shell> zmcontrol stop
Ahora, nuevamente como usuario root, debemos de ejecutar el script, que aplicará el parche y solucionará el problema.
shell> /tmp/zmopenssl-updater.sh
   Downloading patched openssl
   Validating patched openssl: success
   Backing up old openssl: complete
   Installing patched openssl: complete
   OpenSSL patch process complete.
   Please restart Zimbra Collaboration Suite
Una vez terminado, podemos volver a arrancar todos los servicios de Zimbra.
zimbra@shell> zmcontrol start
Y para quedarnos más tranquilos, podemos comprobar que la versión de OpenSSL que Zimbra emplea sí se actualizó, pasando de la 0.9.8k 25 Mar 2009 (en mi caso) a la 1.0.1h 5 Jun 2014.
zimbra@shell> openssl version
   OpenSSL 1.0.1h 5 Jun 2014

Referencias:

Leer más

20 mandamientos del #sysadmin

Una más que interesante recopilación de los 20 mandamientos o consejos que Steve Stady y Seth Vidal recogieron en su día para sysadmins o administradores de sistemas. La traducción del documento original es libre.
  1. Do it the same, over and over and over again.
    Haz lo mismo una y otra y otra vez.
  2. Backups are sacred! If you do not know if your backups are current, then test them by restoring the data and comparing.
    Las copias de seguridad son sagradas! Si no sabes si están al día, entonces pruébalas restableciendo los datos y comparando.
  3. Do not make many, tiny partitions, make a smaller number of larger partitions, instead.
    No crees muchas pequeñas particiones, crea un número pequeño de particiones grandes.
  4. Why change the system default when you don’t have to?
    ¿Por qué cambiar el sistema por defecto cuando no es necesario?
  5. Think now so you don’t have to later (at 4am).
    Piensa ahora como si fuese más tarde (las 4 de la mañana).
  6. If you have to do it more than once, automate it. If you cannot automate it, document it.
    Las tareas repetitivas, automatízalas
     [puppetsalt]
    . Si no puedes automatizarlas, documéntalas.
  7. Personality is for people, not for computers.
    La personalidad es para las personas, no para los ordenadores.
  8. Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it” - Brian W. Kernighan
    Depurar código es dos veces más duro que escribirlo. Por lo tanto, si escribes el código de la manera más inteligente posible, no eres, por definición, lo suficientemente inteligente para depurarlo.
  9. If you do not know what a machine will do when it is rebooted, then it is not production ready.
    Si no sabes qué pasará cuando la máquina se reinicie, entonces no está lista para pasar a producción.
  10. Unless you write an essay on why you need to do something "special" use the tools, procedures, techniques and resources the OS provided for you.
    A menos que escribas un ensayo sobre por qué una máquina necesita hacer algo especial, utiliza las herramientas, procedimientos, técnicas y recursos que te proporciona el sistema operativo.
  11. Remember the Mack Truck Scenario: If no one will be able to figure this out if you get hit by a Mack truck, then you’re doing something wrong.
    Recuerda la escena del camión: Si nadie será capaz de comprender lo que pasa si te atropella un camión, entonces es que algo estás haciendo mal.
  12. Revision Control! Comment!
    Usa sistemas de control de versiones!
     [git
    Comenta!!
  13. Log and rotate logs. Log remotely for best effect.
    Crea losg y guárdalos! Mejor incluso, en remoto [syslog, splunk].
  14. Simplicity is its own reward.
    La simplicidad es la mayor recompensa.
  15. If you haven’t thought of at least one potential negative outcome of hitting enter at the end of the command you just typed; then you don’t understand the command well enough to use it on a production system.
    Si no has pensado al menos una vez en los inconvenientes de pulsar "Enter" justo después de escribir el comando, entonces no conoces suficientemente bien la línea de comandos como para utilizarla en una máquina de producción.
  16. Use a unique marker for names of packages that are locally developed. $domainname perhaps?
    Utiliza un tag sencillo de identificar ($domainname) para todos los paquetes que se han desarrollado en la máquina local.
  17. If you cannot enumerate every port that should be listening on a given machine; then it is not production ready.
    Si no puedes enumerar cada uno de los puertos que deberían estar a la escucha en un servidor concreto, entonces no lo pongas en producción.
  18. If the host firewalling allows access to more ports than ABSOLUTELY necessary; then the host is not production ready.
    Si el firewall permite acceso a más puertos de los absolutamente necesarios; entonces ese servidor no puede estar en producción.
  19. If it seems like someone else would have encountered this problem before, they probably have. We do not live in a vacuum. Google for the answer
    Si parece que alguien más ha encontrado antes un problema, probablemente es que así ha sido. No vivimos aislados. La respuesta está en Google.
  20. DOCUMENT!
    Documentación!
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios