Script de notificación de uso de quota de disco / Disk Quota Notification Script


Estuve un rato buscando si alguien se había tomado el trabajito de armar un script para enviar un mail a los usuarios cuando estos estuvieran superando la quota de disco (al menos la SOFT quota) pero no econtré nada similar, así que no me quedó otra que hacerlo… Aquí dejo mi aporte para los que lo necesiten:

Lo que hace es recorrer los usuarios existentes en el /etc/passwd con UID >= 500. Esto es para Linux CentOS, Fedora, Redhat, pero pueden modificarlo para otros linuxes.
Para cada uno de ellos utiliza el comando repquota y compara los campos soft y hard para calcular el espacio utilizado.
En base a esto envía un mail de notificación al usuario y otro a sistemas para que nos enteremos que determinado usuario tiene problemas de quota.

#!/bin/sh
#hvivani. 20101217
#verifica quotas de usuario en filesystem y envía mail notificando exceso de soft quota.

for name in $(awk -F: ‘($3>=500) && ($3!=65534) {print $1}’ /etc/passwd)
do
      limiteSoft=`/usr/sbin/repquota /  |grep “$name ” |awk ‘($3>$4) && ($4!=0) {print $4}’`
      usado=`/usr/sbin/repquota /  |grep “$name ” |awk ‘($3>$4) && ($4!=0) {print $3}’`
      limiteHard=`/usr/sbin/repquota /  |grep “$name ” |awk ‘($3>$4) && ($4!=0) {print $5}’`

      ### si el limite soft no es nulo
      if [ -n “$limiteSoft” ]
      then
         ### si el limite soft supera el espacio utilizado
         if [ “$usado” -ge “$limiteSoft” ]
         then
            nota=”Usuario: $name, Ud. esta excediendo su espacio en disco: Limite: $limiteSoft Bytes. Utilizado: $usado Bytes. Por favor, libere espacio en su carpeta personal o sistema de correo.”
            echo $nota | mail -s “ATENCION: Uso de Disco !!” $name@dominio.com.ar
            echo “El usuario $name ha superado SOFT quota. Limite: $limiteSoft Bytes. Utilizado: $usado Bytes.” | mail -s “ATENCION: Uso de Disco $name !!” sistemas@dominio.com.ar
         fi
         ### si el limite hard supera el espacio utilizado
         if [ “$usado” -ge “$limiteHard” ]
         then
            nota=”Usuario $name, Ud, esta excediendo su espacio en disco: Limite: $limiteHard Bytes. Utilizado: $usado Bytes. No podrá escribir en su sistema hasta que libere espacio en su carpeta personal o sistema de correo.”
            echo $nota | mail -s “Uso de Disco !!” $name@dominio.com.ar
            echo “El usuario $name ha superado HARD quota. Limite: $limiteSoft Bytes. Utilizado: $usado Bytes.” | mail -s “ATENCION: Uso de Disco $name !!” sistemas@dominio.com.ar
         fi
      fi

done

Configurar sendmail con servidor smtp externo / Configure sendmail using smarthost


Dado que varias veces me he topado con la necesidad de configurar un sendmail en un servidor para que utilice un smtp externo, aqui lo agendamos:

Necesitaremos instalar el paquete sendmail-cf:
# yum install sendmail-cf

cambiamos el /etc/mail/sendmail.mc:
descomentamos la línea del SMARTHOST y agregamos un FEATURE:
define(`SMART_HOST’, `your-smtp-server’)
FEATURE(authinfo)dnl 

Recompilamos el sendmal.mc:
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 

Creamos o editamos el /etc/mail/authinfo con la siguiente linea:
AuthInfo: “U:” “P:” “M:DIGEST-MD5”

Creamos el authinfo.db:
# makemap hash /etc/mail/authinfo < /etc/mail/authinfo

Restarteamos el sendmail:
# /sbin/service sendmail restart 
Un detalle importante, si reciben como respuesta el mensaje:
553 sorry, your envelope sender domain must exist (#5.7.1)

Es porque no está correctamente seteado el hostname en el equipo. Pueden verificarlo con el comando:
# hostname -f

smokeping-2.4.1 Installation Notes


smokeping-2.4.1 Installation NotesOn publictest8.fedoraproject.org (2.6.18-194.8.1.el5xen)Ticket #2510

1) We need to install the following packets:# yum install rrdtool# yum install fping# yum install echoping# yum install curl# yum install perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-RadiusPerl perl-IO-Socket-SSL perl-Socket6 perl-CGI-SpeedyCGI

I suposed installed httpd.

2) We download smokeping and set to its working directory:# wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.4.1.tar.gz# tar zxvf smokeping-2.4.1.tar.gz# mv smokeping-2.4.1 /opt/smokeping

3) We need to rename some files to its working name:# mv /opt/smokeping/bin/smokeping.dist /opt/smokeping/bin/smokeping# mv /opt/smokeping/htdocs/smokeping.cgi.dist /opt/smokeping/htdocs/smokeping.cgi# mv /opt/smokeping/htdocs/tr.cgi.dist /opt/smokeping/htdocs/tr.cgi# mv /opt/smokeping/etc/config.dist /opt/smokeping/etc/config# mv /opt/smokeping/etc/basepage.html.dist /opt/smokeping/etc/basepage.html# mv /opt/smokeping/etc/smokemail.dist /opt/smokeping/etc/smokemail# mv /opt/smokeping/etc/tmail.dist /opt/smokeping/etc/tmail# mv /opt/smokeping/etc/smokeping_secrets.dist /opt/smokeping/etc/smokeping_secrets# chmod 600 /opt/smokeping/etc/smokeping_secrets

4) We need to modify this file:# vi /opt/smokeping/bin/smokepingand replace the firsts 9 lines with this values: #!/usr/bin/perl -w # -*-perl-*-

use lib qw(/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/RRDs/); use lib qw(/opt/smokeping/lib);

use Smokeping 2.004000;

Smokeping::main(“/opt/smokeping/etc/config”);

5) We need to modify this file:# vi /opt/smokeping/htdocs/smokeping.cgiand replace the firsts 10 lines with this values: #!/usr/bin/speedy -w # -*-perl-*-

use lib qw(/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/RRDs); use lib qw(/opt/smokeping/lib); use CGI::Carp qw(fatalsToBrowser);

use Smokeping 2.004000;

Smokeping::cgi(“/opt/smokeping/etc/config”);

6) We need to modify this file:# vi /opt/smokeping/htdocs/tr.cgiand replace the firsts 4 lines with this values: #!/usr/bin/speedy -w use strict; use lib qw(/opt/smokeping/lib); use lib qw(perl);

7) We need to prepare the http directory:# mkdir -p /var/www/html/smokeping/img /var/www/html/smokeping/script/ /opt/smokeping/data /opt/smokeping/var# chown -R apache:apache /var/www/html/smokeping/img

# ln -s /opt/smokeping/htdocs/cropper /var/www/html/smokeping/cropper# ln -s /opt/smokeping/htdocs/resource /var/www/html/smokeping/resource# ln -s /opt/smokeping/htdocs/script/Tr.js /var/www/html/smokeping/script/Tr.js# ln -s /opt/smokeping/htdocs/smokeping.cgi /var/www/html/smokeping/smokeping.cgi# ln -s /opt/smokeping/htdocs/tr.cgi /var/www/html/smokeping/tr.cgi# ln -s /opt/smokeping/htdocs/img /var/www/html/smokeping/img

uncomment the following line at /etc/httpd/conf/httpd.conf:AddHandler cgi-script .cgi

8 ) We need to create this file with this content:# vi /etc/httpd/conf.d/smokeping.conf Alias /smokeping/ /opt/smokeping/htdocs/

DirectoryIndex index.php index.cgi smokeping.cgi Options Indexes FollowSymLinks ExecCGI MultiViews AllowOverride all

9) We modify the configuration file with content like this: *** General ***

owner    = hvivani contact  = hernan@vivani.com.ar mailhost = localhost sendmail = /usr/sbin/sendmail # NOTE: do not put the Image Cache below cgi-bin # since all files under cgi-bin will be executed … this is not # good for images. imgcache = /var/www/html/smokeping/img imgurl   = http://publictest8.fedoraproject.org/smokeping/img datadir = /opt/smokeping/data piddir  = /opt/smokeping/var cgiurl   = http://publictest8.fedoraproject.org/smokeping/smokeping.cgi smokemail = /opt/smokeping/etc/smokemail tmail = /opt/smokeping/etc/tmail # specify this to get syslog logging syslogfacility = local0 # each probe is now run in its own process # disable this to revert to the old behaviour # concurrentprobes = no

*** Alerts *** to = hernan@vivani.com.ar from = smokealert@publictest8.fedoraproject.org

+someloss type = loss # in percent pattern = >0%,*12*,>0%,*12*,>0% comment = loss 3 times  in a row

*** Database ***

step     = 300 pings    = 20

# consfn mrhb steps total

AVERAGE  0.5   1  1008 AVERAGE  0.5  12  4320     MIN  0.5  12  4320     MAX  0.5  12  4320 AVERAGE  0.5 144   720     MAX  0.5 144   720     MIN  0.5 144   720

*** Presentation ***

template = /opt/smokeping/etc/basepage.html

+ charts

menu = Charts title = The most interesting destinations

++ stddev sorter = StdDev(entries=>4) title = Top Standard Deviation menu = Std Deviation format = Standard Deviation %f

++ max sorter = Max(entries=>5) title = Top Max Roundtrip Time menu = by Max format = Max Roundtrip Time %f seconds

++ loss sorter = Loss(entries=>5) title = Top Packet Loss menu = Loss format = Packets Lost %f

++ median sorter = Median(entries=>5) title = Top Median Roundtrip Time menu = by Median format = Median RTT %f seconds

+ overview

width = 600 height = 50 range = 10h

+ detail

width = 600 height = 200 unison_tolerance = 2

“Last 3 Hours”    3h “Last 30 Hours”   30h “Last 10 Days”    10d “Last 400 Days”   400d

#+ hierarchies #++ owner #title = Host Owner #++ location #title = Location

*** Probes ***

+ FPing

binary = /usr/sbin/fping

*** Slaves *** secrets=/opt/smokeping/etc/smokeping_secrets #+boomer #display_name=boomer #color=0000ff #+slave2

*** Targets ***

probe = FPing

menu = Top title = Network Latency Grapher remark = Welcome to the SmokePing website of Fedora Project.    Here you will learn all about the latency of our network.

+ Test menu= Targets title = Ping Targets #parents = owner:/Test/James location:/

++ publictest8

menu = publictest8 title = publictest8 #alerts = someloss #slaves = boomer slave2 host = publictest8.fedoraproject.org

++ bodhost01

menu = bodhost01 title = bodhost01 #alerts = someloss host = bodhost01.fedoraproject.org

++ ibiblio01

menu = ibiblio01 title = ibiblio01 #alerts = someloss host = ibiblio01.fedoraproject.org

++ internetx01

menu = internetx01 title = internetx01 #alerts = someloss host = internetx01.fedoraproject.org

++ osuosl01

menu = osuosl01 title = osuosl01 #alerts = someloss host = osuosl01.fedoraproject.org

++ serverbeach01

menu = serverbeach01 title = serverbeach01 #alerts = someloss host = serverbeach01.fedoraproject.org

++ serverbeach02

menu = serverbeach02 title = serverbeach02 #alerts = someloss host = serverbeach02.fedoraproject.org

++ serverbeach03

menu = serverbeach03 title = serverbeach03 #alerts = someloss host = serverbeach03.fedoraproject.org

++ serverbeach04

menu = serverbeach04 title = serverbeach04 #alerts = someloss host = serverbeach04.fedoraproject.org

++ serverbeach05

menu = serverbeach05 title = serverbeach05 #alerts = someloss host = serverbeach05.fedoraproject.org

++ telia01

menu = telia01 title = telia01 #alerts = someloss host = telia01.fedoraproject.org

++ tummy01

menu = tummy01 title = tummy01 #alerts = someloss host = tummy01.fedoraproject.org

++ download05

menu = download05 title = download05 #alerts = someloss host = download05.fedoraproject.org

++ people01

menu = people01 title = people01 #alerts = someloss host = people01.fedoraproject.org

#++ MultiHost

#menu = Multihost #title = James and James as seen from Boomer #host = /Test/James /Test/James~boomer

10) Now we star smokeping and httpd:# /opt/smokeping/bin/smokeping# /sbin/service httpd start

11) You can view it working at: publictest8.fedoraproject.org/smokeping/

Ticket #2510

Home’s Centralizados / Configuring Centralized Home Directories


El uso de los home de usuarios centralizados nos da muchisima flexibilidad de administración. A tal punto que los usuarios pueden conectarse y ver sus archivos casi desde cualquier equipo.

En el servidor:
Debemos instalar el nfs:
# yum install nfs-utils

Además debemos tener configurada y habilitada la autenticación de usuarios con NIS o LDAP. Esta configuración ya la describimos en:
https://hvivani.wordpress.com/2010/12/06/autenticacion-de-usuarios-con-ldap-con-ssltsl-instalar-y-configurar-servidor-y-clientes-ldap/
y en:
https://hvivani.wordpress.com/2010/12/06/autenticacion-de-usuarios-con-nis-instalar-y-configurar-servidor-y-clientes-nis/

En el /etc/exports exportamos el /home completo agregando esta linea:
/home           192.168.1.0/255.255.255.0(rw,sync)

Starteamos el servicio y lo configuramos para el arranque automatico:
# service nfs start
# chkconfig –level 2345 nfs on

Verificamos que el directorio exportado sea visible desde los equipos clientes. En cualquiera de ellos hacemos un:
# showmount -e ServidorNFS

Configuración del Firewall en el Servidor NFS:
Si usamos iptables, deberemos abrir el puerto 2049 tcp/udp a fin de acceder a los directorios exportados desde los clientes.
Además, debemos establecer algunos puertos adicionales que normalmente se abren dinámicamente para que se abran de manera estática y poder definirlos en el firewall.
En el archivo /etc/sysconfig/nfs habilitamos las siguientes líneas:
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020

Si hacemos un:
# rpcinfo -p ServidorNFS
deberíamos ver algo asi:
   program vers proto   port  service
100000    2   tcp    111  portmapper
100000    2   udp    111  portmapper
100024    1   udp    662  status
100024    1   tcp    662  status
100004    2   udp    834  ypserv
100004    1   udp    834  ypserv
100004    2   tcp    834  ypserv
100004    1   tcp    834  ypserv
600100069    1   udp    835  fypxfrd
600100069    1   tcp    835  fypxfrd
100011    1   udp    875  rquotad
100011    2   udp    875  rquotad
100011    1   tcp    875  rquotad
100011    2   tcp    875  rquotad
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100021    1   udp  48320  nlockmgr
100021    3   udp  48320  nlockmgr
100021    4   udp  48320  nlockmgr
100021    1   tcp  32803  nlockmgr
100021    3   tcp  32803  nlockmgr
100021    4   tcp  32803  nlockmgr
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100005    1   udp    897  mountd
100005    1   tcp    897  mountd
100005    2   udp    897  mountd
100005    2   tcp    897  mountd
100005    3   udp    897  mountd
100005    3   tcp    897  mountd
100009    1   udp    617  yppasswdd

Aquí podemos ver que puertos tiene abiertos cada servicio y si es tcp o udp.
Con esta info, configuramos el firewall (iptables) para abrir estos puertos:
897 tcp/udp, 875 tcp/udp, 662 tcp/udp, etc.

Configuración del cliente:

Por un lado debemos tener habilitada la autenticación por NIS o LDAP, como deciamos al principio, por lo tanto, supongo que configuré (por ejemplo) la autenticación por NIS a través del system-config-authentication estableciendo el dominio NIS y la IP del serividor NIS.

Debemos hacer un rsync de los archivos contenidos en el home del usuario en la maquina cliente para llevarlos al servidor:
# rsync -vah –exclude=”.gvfs” /home/usuario/ usuario@ServidorNFS:/home/usuario/

Instalamos los siguientes paquetes:
# yum install autofs ypbind rpcbind nfs-utils

Renombramos el /home a /home.bak
# mv /home /home.bak

En caso de que el home esté montado en una partición específica en el fstab, comentamos la línea con un #.
Creamos un nuevo home:
# mkdir /home

en el /etc/auto.master agregamos la siguiente linea:
/home   /etc/auto.home

creamos un archivo /etc/auto.home con la siguiente linea:
*  -fstype=nfs,rw,soft,nosuid  ServidorNFS:/home/&

reiniciamos el equipo cliente, ingresamos como root, y hacemos un:
# su – usuario
de algún usuario conocido. Esto debería dejarnos parados en el home remoto del usuario.
Si esto funciona bien, ya podemos reiniciar e ingresar con cualquier usuario del servidor y va a automontarnos el home en el equipo local.

Una consideración importante: En el equipo cliente no deben existir usuarios comunes. Solo root.

Autenticación de usuarios con ldap con SSL/TSL: Instalar y configurar servidor y clientes ldap


Dada su flexibilidad y la posibilidad de configurarlo para reemplazar un Active Directory de Windows, la autenticación por ldap se está utilizando cada vez mas. Mas aún en ambientes mixtos: linux/windows.
Aplicable a: Redhat/Fedora/CentOS

Instalación del Servidor:
Necesitamos instalar los siguientes paquetes para instalar el servidor ldap:
# yum -y install openldap openldap-clients openldap-servers authconfig authconfig-gtk

Creamos un directorio especifico para organizar la información:
# mkdir /var/lib/ldap/autenticar
# chmod 700 /var/lib/ldap/autenticar
# chown ldap.ldap /var/lib/ldap/autenticar

Creamos la passwd de acceso del administrador del directorio LDAP:
# slappasswd
La salida de este comando la utilizaremos en el archivo slapd.conf para indicar la passwd del administrador.
Editamos el archivo /etc/openldap/slapd.conf y verificamos o modificamos las siguientes líneas:

database bdb
suffix "dc=su-red-local,dc=com
"rootdn "cn=Administrator,dc=su-red-local,dc=com
"rootpw {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
directory /var/lib/ldap/autenticar

Starteamos el servicio y lo agregamos al arranque del sistema:
# service ldap start
# chkconfig –level 2345 ldap on

Migración de datos:
Editamos el archivo /usr/share/openldap/migration/migrate_common.ph y modificamos las variables $DEFAULT_MAIL_DOMAIN y $DEFAULT_BASE para que asuman nuestros valores de configuración.

Creamos un objeto base que contendrá el resto de los objetos del directorio:
# /usr/share/openldap/migration/migrate_base.pl > base.ldif 

Con ldapadd seteamos los datos de “base”:
# ldapadd -x -W -D ‘cn=Administrator, dc=su-red-local, dc=com’ -h 127.0.0.1 -f base.ldif
Migramos usuarios y grupos:
# /usr/share/openldap/migration/migrate_group.pl /etc/group group.ldif
# /usr/share/openldap/migration/migrate_passwd.pl /etc/passwd passwd.ldif
Con ldapadd los agregamos al directorio:
# ldapadd -x -W -D ‘cn=Administrator, dc=su-red-local, dc=com’ -h 127.0.0.1 -f group.ldif
# ldapadd -x -W -D ‘cn=Administrator, dc=su-red-local, dc=com’ -h 127.0.0.1 -f passwd.ldif

Verificamos que esté todo correcto hasta aquí:
Con este comando verificamos los directorios disponibles en el localhost:
# ldapsearch -h 127.0.0.1 -x -b ” -s base ‘(objectclass=*)’ namingContexts 
Este comando devuelve toda la información existente en el directorio:
# ldapsearch -x -b ‘dc=su-red-local,dc=com’ ‘(objectclass=*)’
Este comando devuelve la información especifica de un usuario:
# ldapsearch -x -b ‘uid=hvivani,ou=People,dc=su-red-local,dc=com’

Apertura de Puertos en Firewall / iptables:
Necesitamos abrir los puertos 389 y 636. Por defecto para las comunicaciones por ssl, escucha por el puerto 636. Si hacemos un “nmap localhost” en el servidor ldap y vemos que no está escuchando en el puerto 636 es que hay algún error en la configuración del SSL.

Se puede verificar también que en el /etc/init.d/ldap la llamada debe contener el “ldaps://”, sinó, no se abrirá nunca el puerto 636.
# Sección: Set default values
SLAPD_SERVICES=”ldap:/// ldaps:///”

Configuración de Clientes:

Debemos tener instalado el paquete openldap-clients:
# yum install openldap-clients
Creamos el directorio para almacenar los certificados:
# mkdir -p /etc/openldap/cacerts/

En el /etc/ldap.conf, establecemos las siguientes líneas:

URI ldap://servidor.su-red-local.com
BASE dc=su-red-local,dc=com
HOST su-red-local.com
TLS_CACERTDIR /etc/openldap/cacerts/
TLS_REQCERT allow

Descargamos el certificado generado en el servidor en los clientes. La forma mas simple es descargarlos con el comando openssl desde el cliente:
# openssl s_client -connect servidor.su-red-local.com:636 > fds_cacert.asc
Editamos el archivo fds_cacert.asc y le dejamos solo la info del certificado:
BEGIN CERTIFICATE—–
MIIBwjCCASugAwIBAgICA+kwDQYJKoZIhvcNAQEEBQAwETEPMA0GA1UEAxMGQ0Fj
ZXJ0MB4XDTA3MTEwMjAwMTkwMFoXDTE3MTEwMjAwMTkwMFowPDEgMB4GA1UECxMX
RmVkb3JhIERpcmVjdG9yeSBTZXJ2ZXIxGDAWBgNVBAMTD2RzMS52emxhLmdvYi52
ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwqeOpO9FckLO55gCIq49yIpf
ikh4Ny1fcHJtFzPV0uMJgGkNEozqTMJ9D7Qtwfv2xmCVKF8AAKtTQBg3IlUMttA8
20lIA0lkrkD3dH36ix51N/NA53S2S7pyj8O3hsye6ZOTJ7KwY8LSLrpe41qKNLIC
sOvtcdcNRT/4OpIu+jUCAwEAATANBgkqhkiG9w0BAQQFAAOBgQAkaaJlp4V9aoCO
chigU9YZCQhr5VJOq6+QXh3FAvFZYmmbZfjwqovWDdPMXlmB8fledMuo0Q2Y6Pqu
cjiM5y+C43+ydvgHmo5Q5rViQnBbaXtWlAeI3IkIzcpzCCmL/cuJT1L65JBrs7eZ
33CAW2p2PLMVY8ORipIGaD0Wn98FXA==
—–END CERTIFICATE—–

Otra opción es utilizar el comando system-config-authentication y utilizar la opción “descargar certificado”. Para esto, previamente debemos habilitar el servidor http y dejar una copia del certificado disponible para descarga.

Autenticación de usuarios con NIS: Instalar y configurar servidor y clientes NIS


Una buena opción para la autenticación de usuarios en una red linux es la utilización de NIS. Aquí vemos detalles de la configuración del servidor y los clientes (Redhat / CentOS / Fedora).

Instalación y Configuración del Servidor NIS:
Instalamos los paquetes necesarios:
# yum install ypbind yp-tools ypserv

En el /etc/yp.conf agregamos la siguiente línea:
ypserver 127.0.0.1

En el /etc/ypserv.conf verificamos que exista la siguiente configuración:

dns: no
files: 30
xfr_check_port: yes
* : * : shadow.byname : port
* : * : passwd.adjunct.byname : port

En el /etc/sysconfig/network agregamos la siguiente línea:

NISDOMAIN=”dominio.net”
Editamos el /var/yp/securenets para definir la red con que trabajamos agregando las siguientes lineas:
host 127.0.0.1
255.255.255.0 192.168.0.0

Reiniciamos servicios portmap e ypserv:
# service portmap restart
# service ypserv restart

y verificamos que el ypserv se inicie al arranque del systema:
# chkconfig –level 2345 ypserv on

para verificar que el programa está funcionando podemos poner:
# rpcinfo -u localhost ypserv  y si todo está ok, la respuesta será:
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting

Procedemos ahora a crear los mapas NIS que almacenaran toda la información del servicio:
# /usr/lib/yp/ypinit -m
en plataformas de 64 bits será:
# /usr/lib64/yp/ypinit -m

Este comando solicitará el nombre del servidor NIS y luego regenerará la base de datos NIS de usuarios, grupos, etc. La salida será algo como esto:

At this point, we have to construct a list of the hosts which will run NIS
servers.  server0 is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a .
    next host to add:  server0
    next host to add: 
The current list of NIS servers looks like this:

server0

Is this correct?  [y/n: y]  y
We need a few minutes to build the databases…
Building /var/yp/dominio.net/ypservers…
Running /var/yp/Makefile…
gmake[1]: Entering directory `/var/yp/dominio.net’
Updating passwd.byname…
Updating passwd.byuid…
Updating group.byname…
Updating group.bygid…
Updating hosts.byname…
Updating hosts.byaddr…
Updating rpc.byname…
Updating rpc.bynumber…
Updating services.byname…
Updating services.byservicename…
Updating netid.byname…
Updating protocols.bynumber…
Updating protocols.byname…
Updating mail.aliases…
gmake[1]: Leaving directory `/var/yp/dominio.net’

server0 has been set up as a NIS master server.

Now you can run ypinit -s server0 on all slave server.

Ahora starteamos el resto de los servicios para arrancar el NIS:
# service ypbind start
# service yppasswd start
# service ypxfrd start
Y agregamos estos servicios al arranque:
# chkconfig –level 2345 ypbind on
# chkconfig –level 2345 yppasswdd on
# chkconfig –level 2345 ypxfrd on

Configuración de puertos estáticos para el servidor NIS:
Si tenemos iptables corriendo en el servidor NIS, debemos hacer que la apertura de puertos sea estática.
Agregamos la siguiente línea en el /etc/sysconfig/network:
YPSERV_ARGS=”-p 834″ YPXFRD_ARGS=”-p 835″
 Y abrimos los puertos 834 y 835:
iptables -A INPUT -p ALL -s! 192.168.0.0/24 –dport 834 -j DROP iptables -A INPUT -p ALL -s! 192.168.0.0/24 –dport 835 -j DROP

Pruebas:  
En el cliente, si hacemos un:
$ ypcat passwd
veremos la info de usuario que está siendo publicada por el servidor NIS.

Otro comando util es:
$ rpcinfo -p servidornis
que nos muestra todos los puertos y protocolos donde está escuchando:
   program vers proto   port  service
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp    970  status
    100024    1   tcp    973  status
    100004    2   udp    834  ypserv
    100004    1   udp    834  ypserv
    100004    2   tcp    834  ypserv
    100004    1   tcp    834  ypserv
 600100069    1   udp    835  fypxfrd
 600100069    1   tcp    835  fypxfrd
    100009    1   udp    944  yppasswdd

Configuración de los clientes:
Los clientes necesitan tener instalado el ypbind y el yp-tools:
# yum install ypbind yp-tools

Editamos el /etc/yp.conf agregando la siguiente linea:
domain dominio.net server 192.168.0.54

Debemos asegurarnos que en el archivo /etc/hosts, están definidos los datos del servidor NIS:
192.168.0.54   server0.dominio.net

Restarteamos el servicio y enlazamos con el servidor:
#service ypbind start

Seguridad en Redes Sociales


Bueno, este no es un tema que acostumbre tocar pero hace un tiempo que me ronda en la cabeza  ya que es realmente preocupante ver como se expone a la familia y en especial a los hijos en las redes sociales. En particular facebook.

Imaginen la siguiente situación: “subo” al facebook las últimas fotos del cumpleaños de mi hijo. Inclusive pongo un título como: “Fotos del cumple de Juancito”. Si no he establecido los niveles de privacidad adecuados, automáticamente estaré “mostrando” a mi hijo a todos los usuarios de facebook. 
Ahora imaginemos a un pederasta cualquiera que anda a la caza de niños.
Si se topa con nuestra cuenta de facebook, automáticamente tendrá toda la info necesaria como para establecer contacto con él: sabe como es fisicamente, sabe como se llama, sabe como se llaman sus padres. Supongamos que vive en la misma ciudad que nosotros: puede ubicarnos por la guía telefónica para llamar a casa o inclusive saber donde vivimos. Puede seguirnos e ir a buscarlo a la escuela diciendole: “Hola Juancito, yo soy Fernando, amigo de tu papá Juan Carlos, el me pidió que te venga a buscar porque todavía está trabajando.”

Hoy por hoy, pederastas, secuestradores, todo tipo de criminales, tienen toda la información servida para realizar su trabajo en internet.

Como hablábamos hace unos días en familia: esto no es para causar pánico, solo es para tomar conciencia de como manejarnos en este nuevo mundo de las comunicaciones.
Traten, por favor, de establecer en las opciones de privacidad del facebook, que el contenido puede ser visto solo por “mis amigos”.
Inclusive la opción “amigos de mis amigos” no creo que sea segura, dado que no puedo confiar en ellos.
Más aún, tengan cuidado al publicar fotos de terceros, por ejemplo: “el cumple de mi sobrino” porque si no tienen establecidas correctamente las políticas de privacidad lo están dejando expuesto.

Las herramientas como Facebook, son excelentes medios de comunicación. Cuando no existía, teníamos que enviar varios mails con las fotos que queríamos mostrar a nuestros familiares, tal vez nos olvidabamos de alguno… con esta herramienta, la publicación es automática y llegamos a todos ellos de una vez.
La cuestión es que no nos han educado acerca de los peligros de internet y el nivel de exposición que puede llegar a tener.

Migración de Usuarios Linux


Aplicable a: Redhat/CentOS/Fedora.

Los archivos y directorios que referencian a los usuarios son los siguientes:
/etc/passwd – Información de las cuentas de usuario del sistema.
/etc/shadow – Contraseñas encriptadas para cada usuario.
/etc/group – Grupos a los cuales pertenecen los usuarios.
/etc/gshadow – Archivo shadow de los grupos.
/home – Archivos de los usuarios.
Ojo: En el servidor destino no deben existir cuentas de usuario.

En el servidor de origen de las cuentas, creamos un directorio para ir guardando los datos:
# mkdir /root/backuser

Para extraer los usuarios del passwd vamos a usar el gran awk:
# awk -F: ‘($3>=500) && ($3!=65534)’ /etc/passwd > /root/backuser/passwd

El -F es para decirle que el field separator es el “:”.
Luego filtra que $3 (posición 3 en el passwd) sea >=500 y != de 65534. En toda la línea Redhat, los UID y los GID arrancan en el 500.
El resultado lo redirigimos ( > ) al nuevo archivo /root/backuser/passwd

Ahora extraemos los grupos:
awk -F: ‘($3>=500) && ($3!=65534)’ /etc/group > /root/backuser/group

Con el shadow hacemos algo parecido, pero en el awk debemos obtener el nombre de usuario, dado que en el shadow ese es el campo clave:
# awk -F: ‘($3>=500) && ($3!=65534) {print $1}’ /etc/passwd | tee – | egrep -f – /etc/shadow > /root/backuser/shadow

Si existe el gshadow, lo copiamos directamente:
# cp /etc/gshadow /root/backuser

Copiamos estos archivos con scp u otro medio al servidor destino. Es decir, a donde queremos migrar los usuarios:
# scp /root/backuser/passwd root@destino:/root/passwd.bak
# scp /root/backuser/group root@destino:/root/group.bak
# scp /root/backuser/shadow root@destino:/root/shadow.bak
# scp /root/backuser/gshadow root@destino:/root/gshadow.bak

Luego, en el servidor destino, previo backup de los archivos originales en el /etc, “cateamos” los archivos obtenidos con el awk dentro de los del sistema:

# cat /root/passwd.bak >> /etc/passwd
# cat /root/shadow.bak >> /etc/shadow
# cat /root/group.bak >> /etc/group
# cat /root/gshadow.bak >> /etc/gshadow

Con esto tendríamos los usuarios migrados. Ahora nos falta migrar la data contenida en los home’s:

Para esto, lo mas práctico es hacer un rsync, por ejemplo:
# /usr/bin/rsync -vah root@serverorigen:/home/ /home/

Ahora crucen los dedos y reinicien…

Backup de Volúmenes Lógicos en servidor remoto / LVM Snapshot to Remote


Tengo varias máquinas virtuales KVM corriendo en un CentOS. Estas VMs trabajan sobre volúmenes LVM almacenados en /dev/VolGroup01/vm01 , /dev/VolGroup01/vm02, etc
El tema es que necesitaba realizar backups de estos LVMs para tenerlos como respaldo en un equipo backup , y en caso de contingencia levantar la máquina virtual en dicho equipo.
El CentOS que administra todas estas máquinas virtuales, no tiene mas espacio en disco como para hacer snapshots locales de los LVM para luego transferirlos a otro equipo.
Como hacer para mandar estos snapshots a otro equipo? La opción que encontré hasta ahora es la siguiente:

# dd if=/dev/VolGoup01/vm01 | ssh root@equiporemoto “dd of=/var/lib/libvirt/images/vm01.img”

opcionalmente , puedo poner un gzip en el medio para reducir el tamaño del archivo y el tráfico:

# dd if=/dev/VolGoup01/vm01 | gzip |ssh root@equiporemoto “dd of=/var/lib/libvirt/images/vm01.img.gz”

Con esto, teniendo preconfigurada la máquina en el KVM del equipo backup, en caso de necesidad, solo debo descomprimir el archivo y ponerla en marcha.

Si alguien tiene una sicutación similar y le encontró otra vuelta lo escucho ansioso !!!

Crear claves RSA para autenticar por SSH / SSH with RSA key authentication


Material de consulta frecuente, como crear las claves para autenticar SSH y copiarlas al host destino:
Generar la clave:
 $ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/usuario/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/usuario/.ssh/id_rsa.
Your public key has been saved in /home/usuario/.ssh/id_rsa.pub.
The key fingerprint is:
49:6d:6f:08:7b:89:53:a0:67:c9:d3:c0:ff:fd:1c:27 usuario@host
The key’s randomart image is:
+–[ RSA 2048]—-+
|       .o         |
|       o.*       |
|      . O.=     |
|       + O.+   |
|        S +.o.  |
|         o .. E..|
|               +o|
|                o |
|                    |
+————-+

Copiar la clave generada:
$ ssh-copy-id -i /home/usuario/.ssh/id_rsa usuario@hostdestino