Velocidad de tu tarjeta ethernet

Un comando muy útil para ver qué velocidades soporta tu tarjeta de red, y más importante si cabe, a qué velocidad está configurada actualmente, es «ethtool», un comando que podremos encontrar en la mayoría de distribuciones linux.

Un ejemplo de salida sería el siguiente:

[root@server root]# ethtool eth1
Settings for eth1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/FullSupports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/FullAdvertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: g
Wake-on: g
Link detected: yes

Como se puede ver en el ejemplo, la tarjeta de red eth1 soporta trabajar a 10, 100 y 1000 Mbps,, pero actualmente, está trabajando a 100Mbps, tal y como se puede ver junto a «Speed».

Un comando útil, que ofrece algo más de información que el usual «dmesg | grep eth1».

Fuente: http://linuxhelp.blogspot.com/2005/10/find-speed-of-your-ethernet-card-in.html

Jaulas SFTP

Jail FTPBuscando la forma de configurar un servidor SFTP (Secure FTP) para la transferencia de ficheros segura, me he encontrado que el propio OpenSSH que viene en la mayoría de versiones, ya proporciona el servicio de servidor sftp.

Mirando la configuración de OpenSSH vemos como efectivamente, se define el servicio sftp:

# cat /etc/ssh/sshd_config
Subsystem sftp /usr/libexec/openssh/sftp-server

Así pues, por defecto, ya se dispone de un método para transferencia de ficheros sobre SSH gracias a OpenSSH.

Sin embargo, este método permite a un usuario, conectarse por SFTP y poder navegar por cualquier directorio del sistema al que tenga acceso, que por defecto, son la mayoría de ellos. Si se quiere «enjaular» al usuario en un directorio concreto, para que pueda trabajar únicamente con los ficheros y directorios de un directorio determinado, la cosa se complica.

Continuar leyendo «Jaulas SFTP»

Sustitución múltiple

Durante las últimas semanas, me he visto con la necesidad de cambiar una misma línea en cientos de archivos diferentes. Para evitar cambiarlo uno por uno, he buscado por Internet hasta encontrar el comando adecuado, el cual se asemeja mucho al comando de sustitución que tiene ‘vi’:

perl -p -i -e ‘s/DocumentRoot \/usr\/local\/www\/data-dist\//DocumentRoot \/var\/www\//g’ *

En este ejemplo, se buscaría en todos los archivos del directorio actual (*), por la cadena «DocumentRoot /usr/local/www/data-dist» y se sustituiría por «DocumentRoot /var/www».

El comando parece mucho más engorroso, por la necesidad de escapar las «/» que contiene la cadena de búsqueda. En realidad, la sentencia de búsqueda sería la siguiente:

perl -p -i -e ‘s/cadena a buscar/nueva cadena/g’ nombre_ficheros_donde_buscar

Con esto, ya tendríamos la base para realizar sustituciones en múltiples archivos, desde la terminal de nuestra distribución Linux preferida.

 

Fuentes:

http://enavas.blogspot.com/2008/10/reemplazar-texto-en-todos-los-archivos.html
http://es.w3support.net/index.php?db=so&id=1398558

Creación de una AMI personalizada

cloud computingAmazon, entre muchos otros, ofrece un servicio de cloud computing, en el que podemos crear máquinas a partir de imágenes de sistemas operativos preconfigurados compartidos en la red de Amazon. Estas imágenes se conocen como AMIs (Amazon Machine Image).

Sin embargo, se puede dar la ocasión en la que necesitemos instalar una máquina con un determinado sistema, que no se encuentre entre las diversas AMIs disponibles. En esas ocasiones, deberemos seguir las instrucciones de Amazon para la creación de una AMI personalizada.

Continuar leyendo «Creación de una AMI personalizada»

Copia con exclusiones

Imaginemos que tenemos un directorio con decenas de miles de ficheros. Imaginemos ahora que necesitamos copiarlos casi todos, a otro directorio. ¿Cómo conseguimos, mediante un único comando, realizar la copia de todos los ficheros excepto los que no necesitamos copiar?

Una solución sería, estando ubicados en el directorio de origen (que contiene los ficheros) con la siguiente línea:

ls | egrep -v ‘^excepcion1|^excepcion2|^excepcion3’ | xargs -i cp {} /dest_folder/

En esta línea, excepcion1 corresponde con el nombre de un fichero que no queremos copiar (o en el caso de tener varios ficheros cuyo nombre empieza por excepcion1, con todos ellos). Análogamente con excepcion2 y excepcion3. dest_folder, corresponde con el directorio de destino.

Por ejemplo, si se quisieran copiar todos los archivos, excepto los que empiezan por adoc*, data*, table* y user*, se podría usar la siguiente sentencia:

ls | egrep -v ‘^adoc|^data|^table|^user’ | xargs -i cp {} /dest_folder/

NOTA: con ‘^’ se indica que el nombre del archivo (en este caso) ha de empezar con el patrón indicado.

¿Cuándo reiniciar Apache?

RAID
Dos preguntas cortas con respuestas de copy&paste sobre Apache.

¿Una modificación en el archivo php.ini requiere reiniciar apache para aplicarse?
«Si tenemos PHP como módulo del servidor, el archivo php.ini se lee cada vez que se reinicia. Por lo tanto tienes que reiniciar para que actualice los cambios. »
Fuente: http://www.ignside.net/man/servidores/phpini.php

¿Y qué pasa si no puedo reiniciar apache porqué está en producción sirviendo una aplicación crítica?
«Las señales USR1 o graceful hacen que el proceso padre indique a sus hijos que terminen después de servir la petición que estén atendiendo en ese momento (o de inmediato si no están sirviendo ninguna petición). El proceso padre lee de nuevo sus ficheros de configuración y vuelve a abrir sus ficheros log. Conforme cada hijo va terminando, el proceso padre lo va sustituyendo con un hijo de una nueva generación con la nueva configuración, que empeciezan a servir peticiones inmediatamente.»
Fuente: http://httpd.apache.org/docs/2.0/stopping.html

Actualización Noviembre 2013

Aprovecho para actualizar este post con un par de apuntes:

  • Ante cualquier cambio en la configuración de Apache, podemos verificar si hay problemas con la nueva configuración, antes de aplicar los cambios, ejecutando:
/etc/init.d/httpd configtest
  • Una vez verificada la configuración, podemos reiniciar la configuración (sin necesidad de reiniciar Apache y por tanto sin afectar al servicio) símplemente haciendo un reload:
/etc/init.d/httpd reload

Flickr! Foto por US Mission Geneva

Registrar actividad en sesión ssh

spy
Imaginemos que queremos un método para registrar todo lo que un determinado usuario realiza durante su sesión ssh. Por lo tanto, lo que se busca es guardar el log de la actividad del usuario en el propio equipo al que se conecta, y por supuesto, no se quiere que el usuario pueda modificar o eliminar este archivo de log.

Opción 1

Una primera opción, es complicarse la vida, montando este entorno a mano.

Continuar leyendo «Registrar actividad en sesión ssh»

Verificar el estado del RAID con hpacucli

RAIDEn ocasiones es necesario ver el estado del RAID de un determinado servidor. El problema, es que normalmente se necesita reiniciar la máquina para poder entrar en la BIOS, la cual contiene los detalles del RAID.

Sin embargo, algunos fabricantes proporcionan herramientas que permiten consultar este tipo de información, sin necesidad de interrumpir el servicio por culpa de un reinicio.

  • En una máquina con SO Fedora, primeramente he consultado el modelo del servidor con la utilidad «lshw» que se puede instalar directamente con yum.
  • Tras comprobar que el servidor corresponde a un HP Proliant, he buscado en la web del fabricante una herramienta de este tipo, que en el caso de HP ha resultado ser HP Array Configuration Utility CLI for Linux, disponible en este enlace.
  • Para esta utilidad, HP pone a disposición todas las versiones que se han publicado de la misma, pero me he decidido a descargar la versión recomendada (se puede ver el «recommended» en el título, grande y descriptivo).
  • La herramienta se instala con «rpm -i hpacucli-8.61-1.0.noarch.rpm«.
  • Una vez instalada, se podrá ejecutar el comando «hpacucli»

Continuar leyendo «Verificar el estado del RAID con hpacucli»

MySQL usuario de lectura

Resulta que crear un usuario de mysql con acceso desde hosts remotos no es tan intuitivo como podría pensarse. Durante la creación de un usuario en mysql, ya sea con el comando apropiado o mediante utilidades como «mysql_setpermission», se debe indicar si el usuario mysql podrá conectar con el motor SQL únicamente desde el localhost, o si por el contrario, tendrá acceso desde un host remoto específico o desde cualquier host (%).

Sin embargo, para que el acceso remoto funcione, deberá crearse primero el usuario localhost y posteriormente el mismo usuario para %:

mysql> create user ‘readonly’@’localhost’ identified by ‘mipassword’;
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on *.* to ‘readonly’@’localhost’;
Query OK, 0 rows affected (0.00 sec)

mysql> create user ‘readonly’@’%’ identified by ‘mipassword’;
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on *.* to ‘readonly’@’%’;
Query OK, 0 rows affected (0.00 sec)

 

Esto se puede leer en la documentación oficial de MySQL:

«It is necessary to have both accounts for monty to be able to connect from anywhere as monty

Con estas instrucciones se habrá creado un usuario llamado «readonly» con únicamente permisos de lectura (selects) contra todas las bases de datos existentes, tanto desde el host local como desde cualquier otro host remoto.

Límite de conexiones en MySQL

MySQL tiene un límite de conexiones simultáneas que acepta, que por defecto en las versiones actuales está en 150. En realidad, 151, puesto que esta 1 está reservada para el administrador poder conectar en local y ver qué está pasando.

Podemos consultar el límite actual, tal y como se muestra en el siguiente ejemplo:

mysql> show variables like «max_connections»;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 151 |
+—————–+——-+
1 row in set (0.00 sec)

Si quisiéramos incrementar el límite por ejemplo a 300 conexiones simultáneas, únicamente deberíamos añadir la siguiente línea al archivo de configuración de MySQL, típicamente en /etc/my.cnf:

max_connections = 300

Una vez hecho esto, y después del posterior reinicio del servicio, deberíamos poder confirmar el incremento del límite:

mysql> show variables like «max_connections»;
+—————–+——-+
| Variable_name | Value |
+—————–+——-+
| max_connections | 300 |
+—————–+——-+
1 row in set (0.00 sec)

Actualización: También podemos cambiar este parámetro «al vuelo» con el comando siguiente:

mysql> SET GLOBAL max_connections = 300;

Decir, que tenemos un par de opciones para ver el número de conexiones actuales:

mysql> SHOW STATUS WHERE `variable_name` = ‘Threads_connected’

O directamente,

mysql> SHOW PROCESSLIST;

Fuentes:
http://www.electrictoolbox.com/update-max-connections-mysql/
http://forums.mysql.com/read.php?24,15350,28036