lunes, 17 de mayo de 2010

Apache2 - Ocultar ficheros

Para denegar el acceso a diferentes ficheros en el Document Root o cualquier directorio tenemos el siguiente ejemplo

<Location ~ "(.Xauthority|.bash_history|.profile|.rhosts|.sh_history|.ssh|.subversion|.sunw|.bashrc|.svn)">
Order allow,deny
Deny from all
</Location>


Este denegaria el acceso a los ficheros (.bash_history |.profile| .rhosts| .sh_history| .ssh|.subversion| .sunw|.bashrc|.svn) del directorio Document Root.

miércoles, 12 de mayo de 2010

XEN - tap:aio y SLES11

La versión que se incluye en el dvd me ha dado problemas al crear maquinas virtuales con discos configurados con tap:aio como por ejemplo este:

disk = ['tap:aio:/vmachines/10.disk.xm,xvda,w']

El error que da es:

VmError: Device 51952 (tap) could not be connected. Setting up the backend failed. See the log files in /var/log/xen/ for details.

Para ello la solución es actualizar a la versión más nueva posible. Con suscripción a Novell no hay problema, ya en sus repos hay versiones más nuevas. Si no hay el repositorio http://download.opensuse.org/repositories/Virtualization/SLE_11/ que funciona bien.

jueves, 6 de mayo de 2010

RMS - Acceso por consola serie - minicom

Para configurar el acceso por minicom a estos dispositivos, es necesaria la siguiente config en el profile, por defecto /etc/minicom/minirc.dfl

pu port /dev/ttyS0
pu baudrate 9600

pu bits 8
pu parity N
pu stopbits 1
pu rtscts No
pu xonxoff Yes



miércoles, 5 de mayo de 2010

OpenBox - Ligero y rapido

OPENBOX
Este entorno es de los más rápidos que he probado y bastante sencillo de configurar. Para los que lo quieran usar este howto es muy completo:
http://urukrama.wordpress.com/openbox-guide/#Configuring

Unos screenshots http://openbox.org/wiki/Openbox:Screenshots

martes, 4 de mayo de 2010

Pacemaker - Recurso ClusterMon el monitor del cluster

Este recurso ocf (ocf::pacemaker:ClusterMon) crea una pagina html estática donde escribe el estado de los recursos del cluster. Con este aspecto:

Cluster summary

Last updated: Tue May 4 15:58:13 2010
Current DC: nodo1 (nodo1)
2 Nodes configured.
5 Resources configured.

Config Options

Default resource stickiness:0
STONITH of failed nodes:enabled
Cluster is:symmetric
No Quorum Policy:Ignore

Node List

  • Node: nodo1 (nodo1): online
  • Node: nodo2 (nodo2): online

Resource List

STONITH_iLO_RSA_nodo1 (stonith:external/ibmrsa-telnet): Started nodo2
STONITH_iLO_RSA_nodo2 (stonith:external/ibmrsa-telnet): Started nodo1
Resource Group: cluster_services
  • cluster_ip (ocf::heartbeat:IPaddr): Started nodo1
  • cluster_moon (ocf::pacemaker:ClusterMon): Started nodo1
  • cluster_apache2 (lsb:apache2): Started nodo1
vm_mail01 (ocf::heartbeat:Xen): Started nodo2
vm_mail02 (ocf::heartbeat:Xen): Started nodo1

Un recurso curioso :)

jueves, 29 de abril de 2010

Open Chorizo - Un automatizador de tareas para servidores

Quiza el programita más chorra...
Cuando nos encontram
os con tareas repetitivas que hay que hacer en por ejemplo 200 servidores como añadir un nuevo disco de red, hacerlo manualmente es duro duro. Para ello mi siguiente script.

Para que sea automatico del todo hay que tener la clave pública ssh en los servidores de destino.



Mediante una lista de servidores como esta
:

servidor1
servidor2
servidor3
...
servidorN

y una lista de tareas como
ls -l
echo Hola
...
Va ejecutar cada comando en cada servidor, por ssh, mostrando por pantalla los resultados de cada comando.

Asi de simple.











/usr/bin/python
#
# 28/04/2010 by Ferran Serafini
import os
import sys
import getopt


list_servers=[]
list_tasks=[]

#-------------------------------------------------------------------------------
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
#-------------------------------------------------------------------------------
def disable(self):
self.HEADER = ''
self.OKBLUE = ''
self.OKGREEN = ''
self.WARNING = ''
self.FAIL = ''
self.ENDC = ''
#-------------------------------------------------------------------------------
def req_servers():
print "Lo que voy a ejecutar"
print
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
print bcolors.OKGREEN + "Lista servidores" + bcolors.ENDC
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
#-------------------------------------------------------------------------------
def req_commands():
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
print
print bcolors.OKBLUE + "--------------------------" + bcolors.ENDC
print bcolors.OKBLUE + "Lista Comandos" + bcolors.ENDC
print bcolors.OKBLUE + "--------------------------" + bcolors.ENDC
#-------------------------------------------------------------------------------
def hello():
print "Open Chorizo. 0.1 stable"
print "---------------------------------------------------"
print "Executa una llista de tasques en els equips remots que hi hagin en una llista"
print "[EXEMPLE] chorizo -s llista_servers.txt -t llista_tasques.txt"
#-------------------------------------------------------------------------------
def usage():
print "Usage: " + sys.argv[0] + " [ -h | --help ] [ -s | --servers ] [ -t | --tasques ] "
#-------------------------------------------------------------------------------
def check_file(f):
return os.path.isfile(f)
#-------------------------------------------------------------------------------
def file_read(f):
llista=[]
if check_file(f) == True:
f_read=open(f,"r")
for line in f_read:
line_r=str.split(line,"\n")
llista.append(line_r)
f_read.close
return llista
else:
print "Chorizo no trova el fitxer!: "+ f
#-------------------------------------------------------------------------------
def execute_chorix():
for server in list_servers:
counter=1
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
print ">>: Executant en: "+ bcolors.OKGREEN + server[0] + bcolors.ENDC
print bcolors.OKGREEN + "--------------------------" + bcolors.ENDC
for command in list_tasks:
print "(" + str(counter) + "/" + str(len(list_tasks)) + ") " + bcolors.OKGREEN + "#" + server[0] + bcolors.OKBLUE + " >>>> " + command[0] + bcolors.ENDC
c="ssh root@" + server[0] + " -C '" + command[0] + "'"
com=os.popen(c).read()
counter=counter+1
print com
#print bcolors.OKBLUE + "--------------------------" + bcolors.ENDC
return com
#-------------------------------------------------------------------------------
try:
optlist, args = getopt.getopt(sys.argv[1:], 't:s:h' , ["tasques","servers","help"])
except getopt.GetoptError, err:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)

for k,v in optlist:
if k in ('-h','--help'):
hello()
sys.exit(0)
elif k in ('-s','--servers'):
list_servers=file_read(str(v)) #print list_servers
elif k in ('-t','--tasques'):
list_tasks=file_read(str(v)) #print list_tasks
req_servers()
for server in list_servers:
print ">> | " + server[0]
req_commands()
for command in list_tasks:
print "<< | " + command[0] print bcolors.OKBLUE + "--------------------------" + bcolors.ENDC print print bcolors.WARNING + "Tot Ok? [s/n]" + bcolors.ENDC go=raw_input("> ")
if go=="s":
output = execute_chorix()
else:
print "no s'ha executat res"


Despotify - Spotify para GNU/Linux

Si tienes una subscripción "premium" a spotify tienes a tu disposición este cliente ncurses para escuchar música sin necesidad de wine para el cliente oficial de spotify.



apt-get install subversion
svn co https://despotify.svn.sourceforge.net/svnroot/despotify despotify

cd despotify/src
apt-get install libncurses-dev libssl-dev zlib1g-dev libvorbis-dev libexpat1-dev libpulse-dev libgstreamer-plugins-base0.10-0 libgstreamer0.10-dev make libncursesw5-dbg libncursesw5-dev libao-dev libao-dbg libao2

make

make install

Para más info: http://www.emezeta.com/articulos/despotify-cliente-spotify-nativo-para-linux

jueves, 22 de abril de 2010

NAGIOS - Monitor EPO

Desde la consola del EPO se puede configurar un report diario de las actualizaciones de las firmas en formato csv. El siguiente script en Python (mi primer script en este lenguaje) interpeta la cantidad de servidores actualizados y desactualizados para monitorizarse en Nagios. 


#!/usr/bin/python
#
# 26/04/2010
import os
import sys
import getopt

STATE=0
STATE_WARNING=1
STATE_OK=0
ARRAY_VERSIONS=[]
ARRAY_NOMS=[]
OLD_MACHINE=[]
OLD_MACHINE_noms=[]
FITXER_CSV="/home/ferran/av_version.csv"
MAX_VERSION=0
i=0

def hello():
print "Script per comprovar l'estat de les EPO de Mcafee."
print "---------------------------------------------------"
print "Principalment analitza el fitxer definit en FITXER_CSV com a punt de montatge cifs (veure fstab). Aquest fitxer es un csv generat de forma automatica on conte diferents dades relatives a la versio de Mcafee (signatures, versio del s.o, etc). Aqui es comprova la versio maxima trobada i la compara amb cada versio de cada client. Si en troba un desactualitzat el sys tornara Warning"

#Verifiquem que el FITXER csv EXISTEIX
#-------------------------------------------------------------------------------
def check_csv_file():
return os.path.isfile(FITXER_CSV)
#-------------------------------------------------------------------------------
def usage():
print "Usage: " + sys.argv[0] + " [ -h | --help ] "
#-------------------------------------------------------------------------------
#Llegim linia a linia el fitxer i afegim la versio de cada linia a ARRAY_VERSIONS.append(versio) i cada nom del server a ARRAY_NOMS.append(nom)
def llegir_linia(FITXER, i,STATE):
for linia in FITXER: #Busquem en les maquines UOC-
if "UOC-" in linia:
UOCSERVER=str.split(linia,",")
versio=UOCSERVER[14]
nom=UOCSERVER[0]
ARRAY_VERSIONS.append(versio)
ARRAY_NOMS.append(nom) # print ARRAY_VERSIONS
while i < len(ARRAY_VERSIONS):
if ARRAY_VERSIONS[i] < max(ARRAY_VERSIONS): #Warning: hi ha equips desactualitzats,busquem quins a partir de la version mes alta numericament"
OLD_MACHINE.append(ARRAY_VERSIONS[i]) # print OLD_MACHINE
OLD_MACHINE_noms.append(ARRAY_NOMS[i]) # print OLD_MACHINE_noms
STATE=STATE_WARNING=1 # print STATE
i=i+1
else:
i=i+1
FITXER.close
return STATE
#-------------------------------------------------------------------------------
try:
optlist, args = getopt.getopt(sys.argv[1:], 'h' , ["help"])
except getopt.GetoptError, err:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)

for k,v in optlist:
if k in ('-h','--help'):
hello()
sys.exit(0)

if check_csv_file() == True:
STATE=llegir_linia(open(FITXER_CSV,"r"),i,STATE)
if STATE == 1:
# print "Warning: hi ha equips "+ str(len(OLD_MACHINE_noms))+ " desactualitzats," + str(OLD_MACHINE_noms) + str(OLD_MACHINE)
print "WARNING: "+ str(len(OLD_MACHINE_noms))+ " equips desactualitzats, " + " | " .join(str(item)for item in OLD_MACHINE_noms) +" | " + " - " .join(str(item)for item in OLD_MACHINE)
sys.exit(STATE_WARNING)
else:
print "OK: tots els equips actualitzats"
sys.exit(STATE_OK)
else:
print "WARNING: No es pot llegir el FITXER: " + FITXER_CSV
sys.exit(1)