# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Información sobre PHP desde línea de comandos

A través de la línea de comandos podemos averiguar información relativa a PHP muy interesante, como por ejemplo:

Versión de PHP instalada:

$ php -v

PHP 5.X.X (cli) (built: Jun 18 2009 18:16:19)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with Zend Extension Manager vX.X.X, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer vX.X.X, Copyright (c) 1998-2007, by Zend Technologies

Módulos de PHP instalados/compilados:

$ php -m
[PHP Modules]
bcmath
calendar
ctype
curl
date
dom
filter
ftp
gd
...
...
...
[Zend Modules]
Zend Extension Manager
Zend Optimizer

Información general PHP:

La salida de este comando es la misma que <? phpinfo() ?> en un script php.

$ php -i
phpinfo()
PHP Version => 5.X.X

System => Linux  #1 SMP Thu May 7 10:39:21 EDT 2009 iX86
Build Date => Jun 18 2009 18:14:47
Configure Command =>  './configure'  '--disable-pdo' '--enable-bcmath' '--enable-calendar' '--enable-ftp' '--enable-gd-native-ttf' '--enable-libxml' '--enable-magic-quotes' '--enable
-mbstring' '--enable-sockets' '--enable-zip' '--prefix=/usr/local' '--with-apxs2=/usr/local/apache/bin/apxs' '--with-curl=/opt/curlssl/' '--with-freetype-dir=/usr' '--with-gd' '--wit
Server API => Command Line Interface
Virtual Directory Support => disabled
....
....
....
This program makes use of the Zend Scripting Language Engine:
Zend Engine vX.X.X, Copyright (c) 1998-2009 Zend Technologies
    with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer vX.X.X, Copyright (c) 1998-2007, by Zend Technologies
....
....
....

Mostrar ficheros de configuración cargados y sus rutas:

$ php --ini

Configuration File (php.ini) Path: /xxx/xxx/xx
Loaded Configuration File:         /xxx/xxx/xxx/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

Mostrar configuración de un módulo/extensión instalado:

La sintaxis es php –ri módulo

$ php --ri openssl
openssl

OpenSSL support => enabled
OpenSSL Version => OpenSSL X.X.Xe-fips-xxx 01 Jul 2008

Mostrar información de un módulo/extensión instalado:

La sintaxis es php –re módulo

$ php --re openssl
Extension [
 extension #35 openssl version  ] {

  - Constants [36] {
    Constant [ string OPENSSL_VERSION_TEXT ] { OpenSSL X.X.Xe-fips-xxx 01 Jul 2008 }
    Constant [ integer OPENSSL_VERSION_NUMBER ] { 9469999 }
    Constant [ integer X509_PURPOSE_SSL_CLIENT ] { 1 }
    Constant [ integer X509_PURPOSE_SSL_SERVER ] { 2 }
    Constant [ integer X509_PURPOSE_NS_SSL_SERVER ] { 3 }
    Constant [ integer X509_PURPOSE_SMIME_SIGN ] { 4 }
    Constant [ integer X509_PURPOSE_SMIME_ENCRYPT ] { 5 }
    Constant [ integer X509_PURPOSE_CRL_SIGN ] { 6 }
    Constant [ integer X509_PURPOSE_ANY ] { 7 }
    Constant [ integer OPENSSL_ALGO_SHA1 ] { 1 }
    Constant [ integer OPENSSL_ALGO_MD5 ] { 2 }
    Constant [ integer OPENSSL_ALGO_MD4 ] { 3 }
    Constant [ integer OPENSSL_ALGO_MD2 ] { 4 }
    Constant [ integer OPENSSL_ALGO_DSS1 ] { 5 }
...
...
...

Respecto a estos dos últimos puntos, también podemos buscar información acerca de una clase (php –rf clase) y de una función (php –rc función).

Trucos útiles de configuración .htaccess para desarrolladores

Tras leer un artículo en www.thomsonchemmanoor.com paso a traducirlo/adaptarlo y adaptarlo pues puede ser útil en algún momento para desarrolladores, programadores y administradores de sitios web. Se trata de una colección de directivas y configuraciones disponibles dentro de los ficheros .htaccess para realizar tareas cotidianas en sitios web de gran utilidad.

Crear una página de error 404 personalizada

Mediante .htaccess en un servidor linux bajo apache es una tarea sencilla. Usando un editor de texto simplemente crea un fichero con el nombre .htaccess. Las páginas de error personalizadas dan a tu sitio web mayor profesionalidad permitiendo redirigir los errores a un lugar que permita al usuario volver a la página principal, facilitar ayuda, etc.

Añade las siguientes líneas a tu fichero .htaccess, teniendo en cuenta que las páginas personalizadas de error se encuentran en /error/

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

Configurar la zona horaria del servidor

SetEnv TZ America/Houston

Bloquear IPs usando .htaccess

En ciertos momentos suele ser necesario bloquear el acceso al sitio web o determinados directorios de u una IP o rangos, para hacerlo simplemente añade lo siguiente a tu fichero .htaccess configurando las IPs que desees:

allow from all
deny from 145.186.14.122
deny from 124.15

Redirecciones amigables para SEO con redirects 301 permanentes

Esto es útil para direcciones ya no disponibles, antiguas o movidas a otra URL:

Redirect 301 /d/file.html http://www.htaccesselite.com/r/file.html

Configurar el email del administrador del servidor

ServerSignature EMail
SetEnv SERVER_ADMIN default@domain.com

Bloquear Hotlink con .htaccess

Muy útil para evitar que otros sitios webs utilicen las imagenes de tu servidor y consuman tu ancho de banda, ten en cuenta que si usas RSS tendrás que permitirle la recogida de imagenes:

Options +FollowSymlinks
# Protect Hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domainname\.com/ [nc]
RewriteRule .*\.(gif|jpg|png)$ http://domainname.com/img/hotlink_f_o.png [nc]

Bloquear acceso de un determinado User Agent

Un agente de usuario es una aplicación informática que funciona como cliente en un protocolo de red; el nombre se aplica generalmente para referirse a aquellas aplicaciones que acceden a la World Wide Web. Los agentes de usuario que se conectan a la Web pueden ser desde navegadores web hasta los web crawler de los buscadores, pasando por teléfonos móviles, lectores de pantalla y navegadores en Braille usados por personas con discapacidades.

## .htaccess Code :: BEGIN
## Block Bad Bots by user-Agent
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Java.* [NC,OR]
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR]
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR]
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR]
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR]
SetEnvIfNoCase user-Agent ^Zeus [NC]

Order Allow,Deny
Allow from all
Deny from env=bad_bot

## .htaccess Code :: END

Redirigir a los visitantes a otro sitio diferente excepto ciertas IPs

Muy útil para cuando el webmaster está realizando tareas de mantenimiento, redirige a todos los visitantes a la página temporal de mantenimiento mientras que desde su IP sigue trabajando en la página web normal:

ErrorDocument 403 http://www.youdomain.com
Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

Evitar mostrar el cuadro de solicitud de descarga

Con este código evitas que al pinchar en un enlace (por ejemplo un pdf o pelicula) evitas que salga el cuadro preguntando si quieres descargarlo.

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

Cambiar el tipo de fichero a una extensión

Podemos hacer que un determinado tipo de fichero actue como si fuera otro, por ejemplo podemos hacer que las imágenes jpg, los index.html o default.cgi actuen como php

ForceType application/x-httpd-php
SetHandler application/x-httpd-php

Bloquear acceso al fichero .htaccess

El título lo dice todo, bloquear accesos indeseados a nuestro fichero .htaccess, redirigiendolos a un error 403

# secure htaccess file

 order allow,deny
 deny from all

Proteger acceso a un determinado tipo de fichero

Si por ejemplo quisieramos que nadie pudiera acceder a un fichero llamado default.jpg

# prevent access of a certain file

 order allow,deny
 deny from all

Evitar la navegación de directorios

Si un determinado directorio no tiene página “index” válida, es probable que nos deje listar los ficheros de la carpeta, para evitar esto podemos cortar la opción de navegación de directorios y mostrar un “Forbidden”:

# disable directory browsing
Options All -Indexes

Cambiar página de inicio o por defecto

Si por ejemplo en vez de index.html queremos que la página de inicio sea default.html:

# serve alternate default index page
DirectoryIndex default.html

Proteger directorios o ficheros con password

Con esta opción podemos solicitar usuario/clave para acceder a una determinada sección de la página web. Existen multitud de webs que hacen esto por tí automáticamente y te facilitan el código, por ejemplo .htaccess Generator. Aquí un ejemplo:

# to protect a file

AuthType Basic
AuthName “Prompt”
AuthUserFile /home/path/.htpasswd
Require valid-user

# password-protect a directory
resides
AuthType basic
AuthName “This directory is protected”
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user

Redirigir viejo dominio a uno nuevo

Simple y efectivo, si hemos cambiado el nombre de dominio de nuestra página web redirigiremos todo el tráfico que siga llegando al viejo hacia el nuevo:

# redirect from old domain to new domain
RewriteEngine On
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

Cómo instalar y configurar SNMP

Ando estos días bastante liado con instalaciones y configuraciones de SNMP así que andaba buscando un buen manual, que seguro que a alguno le viene muy bien ;) . He encontrado este y me ha parecido excelente, muy detallado y claramente explicado en Linux para Todos, al estar compartido bajo licencia Creative Commons me he tomado la libertad de publicarlo aquí, es C & P, ya que difícil es mejorarlo, no obstante podemos debatir cualquier duda en los comentarios.

Introducción.

SNMP (Simple Network Management Protocol) es un protocolo ampliamente utilizado en la administración de redes para supervisar la salud y el bienestar del equipo de la red, equipo de computo y otros dispositivos. Net-SNMP, el software utilizado en este documento, es un conjunto de aplicaciones utilizados para implementar SNMP v1, SNMP v2c y SNMP v3 utilizando IPv4 y/o IPv6.

Software requerido.

  • net-snmp-5.0.9
  • net-snmp-utils-5.0.9

Snmpd es un servicio que regularmente se instala de modo predefinido en la mayoría de las distribuciones, aunque no está habilitado en los servicios de arranque del sistema. El paquete net-snmp-utils no suele instalarse de modo predefinido, por tanto se puede ejecutar lo siguiente para realizar la instalación del software necesario:

Sistemas que utilicen yum:

yum -y install net-snmp net-snmp-utils

Sistemas que utilicen up2date:

up2date -i net-snmp net-snmp-utils

Procedimientos

Fichero de configuración.

El fichero /etc/snmp/snmpd.conf que se instala por defecto es una verdadera maraña de comentarios y opciones de todo tipo. Lo más recomendable será cerrar un fichero nuevo y limpio de contenido.

cd /etc/snmp
mv snmpd.conf snmpd.conf-OLD
touch snmpd.conf

Listas de control de acceso.

Se deben crear las listas de control de acceso (ACL) correspondientes en el fichero /etc/snmp/snmpd.conf y que servirán para definir quien tendrá acceso hacia el servicio snmpd. A una de estas listas se le otorgará permiso de acceso de lectura y escritura para lo que sea necesario y a la otra de solo lectura. Por razones de seguridad solo la interfaz 127.0.0.1 será la de lectura escritura. Se otorgará permiso de acceso de solo lectura a una red o bien a una IP en la otra lista de control de acceso (ACL).

De modo tal se podrían agregar un par de líneas como las siguientes:

com2sec local 127.0.0.1/32 Cl4v3-d3-Acc3s0
com2sec miredlocal 192.168.1.0/24 Cl4v3-d3-Acc3s0

En lo anterior la primera línea significa que habrá una lista de control de acceso denominada «local» y que corresponderá solo a 127.0.0.1/32, asignando Cl4v3-d3-Acc3s0 como clave de acceso. La segunda línea hace lo mismo pero definiendo a la red 192.168.1.0/24. Se puede definir lo que uno guste mientras no sea la clave de root, esto porque dicha clave se transmite a través de la red en forma de texto simple (es decir, sin cifrar).

Definición de grupos.

Se van a crear dos grupos: MyRWGroup y MyROGroup. El primero será un grupo al que se asignarán más adelante permisos de lectura escritura y el segundo será un grupo al que posteriormente se asignarán permisos de solo lectura. Por cada grupo se asignan tres líneas que especifican el tipo de acceso que se permitirá en un momento dado a un grupo en particular. Es decir, MyRWGroup se asocia a local y MyROGroup a miredlocal.

#Se asigna local al grupo de lectura escritura
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local

#Se asigna miredlocal al grupo de solo lectura
group MyROGroup v1 miredlocal
group MyROGroup v2c miredlocal
group MyROGroup usm miredlocal

Ramas permitidas.

Se especifican las ramas que se van a permitir ver a través del servicio. Lo más común, para, por ejemplo, utilizarse con MRTG, es lo siguiente:

## name   incl/excl subtree   mask(optional)
view all  included  .1        80

Asignación de permisos a los grupos.

Se debe especificar que permisos tendrán los dos grupos, MyROGroup y MyRWGroup. Son de especial interés las últimas columnas.

## group         context  sec.model sec.level prefix read   write notif
access MyROGroup ""       any       noauth    exact  all    none  none
access MyRWGroup ""       any       noauth    exact  all    all   all

Parámetros de carácter informativo.

Se definen dos parámetros de carácter informativo para que cuando utilicen aplicaciones cliente como MRTG se incluya algo de información acerca de que sistema se está accediendo.

syslocation Servidor Linux en SU-SERVIDOR.algun-dominio.net
syscontact Administrador (fulano@algun-dominio.net)

Un ejemplo real.

El ejemplo que mostramos a continuación se utiliza en todas las PC que posee el autor en casa y la oficina. Solo bastará reemplazar redlocal por lo que uno considere apropiado y reemplazar 192.168.1.0/24 por la red o la IP desde donde se requiera acceder con un cliente snmp, como MRTG.

# Listas de control de acceso (ACL)
## sec.name source community (alias clave de acceso)
com2sec local 127.0.0.1/32 Cl4v3-d3-Acc3s0
com2sec miredlocal 192.168.1.0/24 Cl4v3-d3-Acc3s0
#Se asigna ACL al grupo de lectura escritura
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
#Se asigna ACL al grupo de solo lectura
group MyROGroup v1 miredlocal
group MyROGroup v2c miredlocal
group MyROGroup usm miredlocal
# Ramas MIB que se permiten ver
## name   incl/excl subtree   mask(optional)
view all  included  .1        80
# Establece permisos de lectura y escritura
## group         context  sec.model sec.level prefix read   write notif
access MyROGroup ""       any       noauth    exact  all    none  none
access MyRWGroup ""       any       noauth    exact  all    all   all
# Información de Contacto del Sistema
syslocation Servidor Linux en amdk6.linuxparatodos.com.mx
syscontact Administrador (fulano@algun-dominio.net)

Si es necesario añadir más equipos para que accedan al servicio snmp, solo hay que hacer lo siguiente:

  1. Agregar una ACL con un nombre único. Ejemplo:
    com2sec micueva 192.168.1.251 Cl4v3-d3-Acc3s0
  2. Agregar un juego reglas que asignen al grupo, en este caso micueva, con lo siguiente:
    group otrogrupo v1 local
    group otrogrupo v2c local
    group otrogrupo usm local
  3. Agregar una línea donde se establece que permisos tendrá el grupo otrogrupo. En este ejemplo, va a ser de solo lectura:
    access MyROGroup "" any noauth exact all none none

Iniciar el servicio y añadirlo a los servicios de arranque del sistema

Inicie el servicio de SNMP y añada éste al resto de los servicios que arrancan junto con el sistema:

service snmpd start
chkconfig snmpd on

Comprobaciones.

Suponiendo que sea signó como clave de acceso Cl4v3-d3-Acc3s0 en un sistema cuya dirección IP es 192.168.1.254, para probar si la configuración funciona, solo hay que ejecutar los dos siguiente mandatos a fin verificar que devuelvan información acerca del sistema consultado.

snmpwalk -v 1 192.168.1.254 -c Cl4v3-d3-Acc3s0 system
snmpwalk -v 1 192.168.1.254 -c Cl4v3-d3-Acc3s0 interfaces