| |
About
Consultor orientado al sector TELCO (eTOM, SID), dirección de proyectos (scrum) y sistemas (Oracle, Weblogic, Jboss, Solaris, etc.). Un poco de todo, vamos.
Sindicación

Licencia

Validación


Sistemas





Varios

|
|
| Tengo debian instalada en mi portatil. Lo tengo protegido con contraseña en la Bios, por lo que la constraseña para iniciar sesión era redundante. Sé que podía eliminarla con GDM o KDM y sus opciones de autologin.. pero me fastidiaba tener estos Display Manager tan pesados y con tantas dependencias corriendo de fondo, además de que no uso ni Gnome ni Kde.
Eliminar el display manager tenía un inconveniente claro. Tener que meter cada vez que inicio la máquina usuario, contraseña y poner un ’startx’.
La solución final fue la siguinte:
apt-get install mingetty
apt-get install rcconf
rcconf
Desmarqué xdm, gdm, kdm o wdm (depende del que uses). También se podría quitar del sistema .
Luego:
emacs /etc/inittab
y comentamos la linea correspondiente al tty1 añadiendo otra, dejando así:
#1:2345:respawn:/sbin/getty 38400 tty1
1:2345:respawn:/sbin/mingetty –autologin sceibe tty1
donde sceibe es mi usuario.
Con esto ya logueamos al usuario, pero podríamos querer ejecutar algo, como por ejemplo iniciar las X. Para ello:
emacs ~/.bash_profile
y añadimos algo como:
if [ -z “$DISPLAY” ] && [ $(tty) == /dev/tty1 ]; then
startx
fi
justo despues del umask 022.
Con esto al reiniciar se deberían cargar automáticamente las X con nuestro usuario favorito.
|
| Necesitaba cambiar el tamaño a unas imágenes en linux y hacerlo usando solo la consola.
La solución fue esta:
apt-get install imagemagick
convert -sample 640×480 pict1608.jpg pict1608.jpg
Y para rotarlas sería:
convert -rotate 90 input.jpg output.jpg
convert -rotate 270 input.jpg output.jpg
Más info en starlinux
|
| Dos scripts en php nuevos.
El primero pilla todas fotos del directorio en que se ejecuta y los renombra poniendo la fecha + una cadena que le pasas como parametro + id + la extension. Muy sencillo y para mi, muy útil:
PHP:
-
-
#!/usr/bin/php
-
-
<?php
-
-
-
-
$dato = $argv[1];
-
-
-
// Ordenacion de los archivos segn fecha!!
-
$content_array = array();
-
$dirname = ".";
-
-
-
$i=0;
-
-
if ($file != "." && $file != ".."){
-
$content_array[$i][0] = $file;
-
$content_array[$i][1] = date ("Y m d", filemtime($dirname. "/". $file));
-
$i++;
-
}
-
-
-
foreach($content_array as $res){
-
$sortAux[] = $res[1];
-
}
-
-
-
-
// Toca renombrar
-
-
$i = 0;
-
foreach ($content_array as $fichero) {
-
-
-
-
-
-
-
$i++;
-
echo "Renombrando ". $nombre[0]. ".". $nombre[1]. " creado el ". $fecha. " a ". $fecha. "_". $dato. "_". $i. ".". $nombre[1]. "\n";
-
rename($nombre[0]. ".". $nombre[1], $fecha. "_". $dato. "_". $i. ".".strtolower ($nombre[1]));
-
}
-
}
-
?>
-
Este otro lo hice para solucionar el volcado de una base de datos en otro servidor. El caso es que petaba todo el rato al intentar volcar el sql en el server dando el siguiente error:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARSET=latin1 AUTO_INCREMENT=4'
El script es el siguiente:
PHP:
-
-
#!/usr/bin/php -q
-
#
-
-
<?php
-
-
$fich = $argv[1];
-
-
-
-
while ($read = fgets($fp, 1024))
-
-
{
-
-
$read= str_replace("ENGINE=MyISAM DEFAULT CHARSET=latin1", "", $read);
-
-
-
-
-
}
-
?>
-
y para acabar en la shell de Linux hice:
./arregla_mysql.php word.sql > word_arreglado.sql
mysql --force --user='root' --password='atitelavoyacontar' nombre_base_datos < word_arreglado.sql
Y listo.. la base de datos subida en 0.5.
Saludos!!
|
| Para no usar claves en ssh ( más seguro ) haremos lo siguiente.
1) Editamos /etc/ssh/ssh_config y descomentamos la siguiente linea:
IdentityFile ~/.ssh/id_rsa
Ahora para un usuario de ejemplo manolo en local y manolito en remoto:
ssh-keygen -t rsa (todo intro )
ssh-copy-id -i /home/manolo/.ssh/id_rsa.pub manolito@r-yuste.com
y ahora:
ssh manolito@r-yuste.com
y guala, ya no debería pedir password!!
También podremos hacer 'scp' sin password y ejecutar comandos del tipo ssh manolito@r-yuste.com 'ls'.
Muy útil!
Nota: en el caso de que no tengas ssh-copy-id puedes subir el id_rsa.pub al servidor y hacer un:
cat id_rsa.pub >> ~/.ssh/authorized_keys
que tendrá el mismo efecto.
|
| El otro día habilité el modsecurity para el apache. Todo ha ido bien hasta hoy, que intentando publicar la entrada anterior me encontré con un falso positivo, concretamente me daba un problema de desconfiguración en el servidor .
Ya lo he arreglado, he comentado esta linea en el modsecurity.conf:
#SecFilterScanPOST On
Y ya funciona correctamente.
|
| Desde que descubrí esto de hacer scripts php para ejecutarlos en local ando lanzado. En este caso, lo que hago es un script que hace lo siguiente:
1) Va descomprimiendo todos los archivos .zip de la carpeta donde se ejecuta.
2) Abre el .doc del interior con Openoffice para que yo pueda grabarlo con formato Word 2000 , ya que el Word 2003 no sirve. Esto no haría falta si la gente que escribió el archivo Word siguiera las especificaciones (ahorrándome un huevo de trabajo). Quizá se pueda hacer más fácil, pero no sé como.
3) Transforma el doc en html usando wvHtml , una magnífica herramienta.
4) Edita el Html para introducir estilos y copia el css en la carpeta.
5) Lo muestra en el firefox para poder revisarlo.
6) Elimina el doc.
7) Comprime el html nuevamente renombrado.
8) Elimina la carpeta creada inicialmente.
No es ninguna virguería tecnológica pero me ha ahorrado bastante trabajo. Obviamente se podría mejorar mucho.. pero bueno.. tampoco tenía mucho tiempo para ello.
PHP:
-
-
#!/usr/bin/php
-
-
<?php
-
-
$dir = "./";
-
-
while (false !== ($nombre_archivo = readdir($dh))) {
-
$archivos[] = $nombre_archivo;
-
}
-
-
-
-
//mkdir("./mierda");
-
-
foreach ($archivos as $fichero) {
-
-
-
if ( $nombre[0][0] == 'a' ) break;
-
-
if ( $nombre[1] == "zip") {
-
exec("unzip -d ". $nombre[0]. " ". $nombre[0]. ".zip");
-
echo "Cambiando a ". $nombre[0]. "\n";
-
-
exec("openoffice ". $nombre[0]. ".doc");
-
exec("wvHtml ". $nombre[0]. ".doc ". $nombre[0]. ".html");
-
-
//$contenido=str_replace("\n","",$contenido);
-
$contenido= str_replace("<head>", "<head><link href=\"estilo.css\" type=\"text/css\" rel=\"stylesheet\"> ", $contenido);
-
if(! $gestor = fopen($nombre[0]. ".html", 'w')) {
-
echo "Error abriendo ". $nombre[0]. ".html\n";
-
}
-
-
if(fwrite($gestor, $contenido) === false) {
-
echo "Error escribiendo en ". $nombre[0]. "\n";
-
}
-
-
-
if (! copy("../../estilo.css", "./estilo.css")) {
-
echo "failed to copy estilo...\n";
-
}
-
-
exec("firefox ". $nombre[0]. ".html &");
-
// exec("openoffice ".$nombre[0].".doc");
-
-
exec("zip ../a". $nombre[0]. " *");
-
-
exec("rm -fr ". $nombre[0]);
-
-
}
-
}
-
-
?>
-
|
| Esta chorrada me ha traido de cabeza las dos últimas semanas!!!
El caso es que en un código ASP que venía modificando me encontraba cosas como esta:
ASP:
-
-
if(datos("titulo")) = "" then
-
titulo = "ninguno"
-
else
-
titulo = Server.HTMLEncode(ucase(trim(datos("titulo"))))
-
end if
-
datos venía de una consulta a la base de datos, y la idea era saber si el campo titulo estaba vacio para poder cambiarlo por otro.
Bien, daba errores mil y, después de mucho buscar la clave para detectar si en campo en la base de datos es NULL o vacio debería ser algo como:
ASP:
-
-
if(datos("titulo")) = "" OR isnull(datos("titulo"))) then
-
titulo = "ninguno"
-
else
-
titulo = Server.HTMLEncode(ucase(trim(datos("titulo"))))
-
end if
-
Y eso es todo.. de esas estupideces que te hacen perder diez minutos.
|
| Hay por ahí un gusano nuevo que me tiene algo acojonado. Por si acaso hoy decidí proteger un poco más mi preciado servidor, y más concretamente el apache usando el mod_security.
apt-get install libapache-mod-security
Una vez instalado:
cd /etc
mkdir modsecurity
cd modsecurity
wget http://www.gotroot.com/downloads/ftp/mod_security/apache1/apache1-gotrootrules-latest.tar.gz
mv apache1/* .
rm -fr apache1*
Y ahora creamos un archivo /etc/apache/conf.d/modsecurity.conf con algo como:
BASH:
<ifmodule mod_security.c>
# Only inspect dynamic requests
# (YOU MUST TEST TO MAKE SURE IT WORKS AS EXPECTED)
#SecFilterEngine DynamicOnly
SecFilterEngine On
# Reject requests with status 500
SecFilterDefaultAction "deny,log,status:500"
# Some sane defaults
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckCookieFormat On
SecFilterCheckUnicodeEncoding Off
SecFilterNormalizeCookies On
# enable version 1 (RFC 2965) cookies
SecFilterCookieFormat 1
SecServerResponseToken Off
#If you want to scan the output, uncomment these
#SecFilterScanOutput On
#SecFilterOutputMimeTypes "(null) text/html text/plain"
# Accept almost all byte values
SecFilterForceByteRange 1 255
# Server masking is optional
#fake server banner - NOYB used - no one needs to know what we are using
SecServerSignature "NOYB"
#SecUploadDir /tmp
#SecUploadKeepFiles Off
# Only record the interesting stuff
SecAuditEngine RelevantOnly
SecAuditLog logs/audit_log
# You normally won't need debug logging
SecFilterDebugLevel 0
SecFilterDebugLog logs/modsec_debug_log
#And now, the rules
#Remove any of these Include lines you do not use or have rules for.
#First, add in your exclusion rules:
#These MUST come first!
Include /etc/modsecurity/exclude.conf
#Application protection rules
Include /etc/modsecurity/rules.conf
#Comment spam rules
Include /etc/modsecurity/blacklist.conf
#Bad hosts, bad proxies and other bad players
Include /etc/modsecurity/blacklist2.conf
#Bad clients, known bogus useragents and other signs of malware
Include /etc/modsecurity/useragents.conf
#Known bad software, rootkits and other malware
Include /etc/modsecurity/rootkits.conf
#Signatures to prevent proxying through your server
#only rule these rules if your server is NOT a proxy
Include /etc/modsecurity/proxy.conf
#Additional rules for Apache 2.x ONLY! Do not add this line if you use Apache 1.x
#Include /etc/modsecurity/apache2-rules.conf
</ifmodule>
Atentos, como trabajo con Apache1 he comentado la última linea. Comprobar que en el archivo /etc/apache/httpd.conf hay esta linea: Include /etc/apache/conf.d o similar.
Y a reiniciar:
/etc/init.d/apache restart
Decir que me dió varios errores en algunas lineas que fuí comentando hasta que todo quedó chachi. Lo bueno ahora sería cada cierto tiempo pasarme por gotroot.com e ir actualizando las citadas lineas.
Mucha mas info en gotroot.com.
Un saludo a todos!!
|
| Me he currado un script ( el wind2html ) que aunque está muy bien tarda un huevo y parte del otro en ejecutarse. Esto, además de ser un engorro carga un montón el servidor ( no es que me importe pero bueno... me pareció un poco chapuzas ).
Lo solucioné metiendo en el crontab una orden que descargara la web cada 10 minutos y la dejara en el directorio como index.html, pisando así el script php y evitando que se ejecute a través de web. Además, con esto, puedo ejecutar el script php si deseo tener la información del último segundo.
Lo que hice:
crontab -e
para editar el crontab, luego añadí una linea tal que así:
10 * * * * wget --output-document="/var/www/locowind/wind2html/index.html" http://locowind.com/wind2html/index.php
y gualá!!
Más info en crontab
|
| Hoy tuve que darle acceso ftp a un amigo a mi portatil. Ya tenía creado un usuario para tal efecto, debidamente chrooteado para que no pudiera salir de su directorio. En concreto en el vsftpd.conf edité las siguientes lineas:
anonymous_enable=NO
local_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
y en vsftpd.chroot_list :
invitado
que será el usuario que será chrooteado. El problema de esto es que el usuario podría loguearse por ssh y eso es algo que no quiero que pueda hacer, así que edite el sshd_config:
AllowUsers sceibe
AllowGroups sceibe
y ya solo yo puedo loguearme por ssh. Al final toco reiniciar los servicios:
/etc/init.d/ssh restart
/etc/init.d/vsftpd restart
Ahora ya mi amigo puede subir lo que quiera sin mayor problema!!!
|
|
|