Funciones a deshabilitar en php.ini – Tips para securizar php

Y es que, cada vez se ven mas destrozos a causa de las webs mal hechas (o poco actualizadas) en php . Que si postnuke, que si phpnuke, phpbb, mybb y un larguisimo etc. Ya que esto es un dolor de cabeza para cualquier sysadmin, algo a tener en cuenta es el deshabilitar ciertas funciones de php en el php.ini, y el que las quiera.. que las habilite en el .htaccess de su virtualhost bajo su responsabilidad, no? Empezamos:

Editamos fichero de configuración de PHP php.ini

#vi /etc/php.ini

buscamos la linea que contiene disable_functions. Posiblemente tenga un ; delante, que sirve para inutilizarla. Eliminamos el ; y dejamos la linea de esta forma:

disable_functions = system, exec, popen, passthru, shell_exec, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate

Asi, nos cargamos unas cuantas funciones peligrosas que a mas de uno le han dejado sin dormir.

Por otro lado, es de esperar el estar atentos a cosas como el safe_mode, allow_url_fopen y demas… pero creo que eso ya lo puse en otro post anterior 🙂

The Linux Command Line – Ebook

The Linux ® Command Line es un libro publicado bajo licencia Creative Commons creado por William E. Shotts, Jr especialmente para aquellos que se están iniciando en el mundo de la línea de comandos Linux.

En sus 522 páginas se cubre el mismo material disponible en LinuxCommand.org pero con mucho más detalle. Además de lo básico de la línea de comandos se enseña el shell scripting y el uso de los programas más comunes de la línea de comandos Linux.

Podéis descargar el libro a través de este Link.

http://sourceforge.net/projects/linuxcommand/files/TLCL/09.12/TLCL-09.12.pdf/download

Web oficial de el libro. http://linuxcommand.org/

Cambiar la password de root de MySQL

Muchas veces cuando trabajamos con MySQL perdemos la contraseña del root lo cual es un gran problemas si solo tenemos una cuenta con todos los privilegios para acceder a MySQL, como nuestro manejo de mysql es poco, terminamos por eliminar el motor de bases de datos y empezar el trabajo de nuevo esto es una gran perdida de tiempo y hacer de esfuerzo por eso le mostrare una forma para poder cambiar la password del root en MySQL lo primero que debemos hacer es detener el servicio Mysql

#> /etc/rc.d/init.d/mysqld stop

Una vez el servicio este abajo escribimos las siguientes líneas:

#> mysqld_safe –skip-grant-tables –skip-networking

Cuando abrimos el mysqld_safe es como si trabajásemos en el modo a prueba de fallos de Windows

–skip-grant-tables esta opción causa que el servidor no use el sistema de privilegios lo que le da acceso ilimitado a todas las bases de datos a todos los usuarios de la base de datos.

–skip-networking deja de escuchar (LISTEN) conexiones TCP/IP provenientes de la red, es decir MySQL trabajaría en un ambiente totalmente local

Ahora nos logeamos como root pero no damos un password ya que en el modo abierto nos permite obviar la contraseña del usuario root hasta que terminemos de asignar una nueva password :

#>mysql -u root

Una vez dentro de mysql usamos la base de datos mysql:

mysql> use mysql;

Cambiamos la contraseña de ‘root’ agregando la siguiente línea:

mysql> UPDATE user SET password=PASSWORD(‘nuevo_pass’) WHERE user=’root’;

Si lo hacemos bien veremos algo como esto:

Query OK, 1 rows affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Reiniciamos el servicio y listo

#> service mysqld restart

La siguiente vez que entre al monitor (mysql -u root -p) usa la nueva clave o contraseña.

Comandos para buscar ficheros y carpetas en Linux

Vamos a ver algunos de los comandos que nos pueden resultar útiles cuando queremos buscar un archivo y/o carpetas en linux, desde consola.

  • locate
locate archivo.php

Este comando buscar en una “especie de base de datos” donde tiene la ruta de los fichero y así resulta mucho más rápido encontrar los ficheros o carpetas que si se tiene que recorrer toda la estructura de directorios.

Hay que tener en cuenta que la “base de datos” del locate puede estar obsoleta. Para actualizarla debemos usar este comando (lo pondré en segundo plano con “&” porque le puede costar en ejecutarse).

updatedb &
  • find

El comando find sirve para buscar ficheros y directorios pero es muy complejo y tiene muchas opciones, de las cuales sólo explicare algunas.

La ruta de acceso por defecto es el directorio actual (representado con un “. “)  y la expresión por defecto es –print. A la hora de buscar, puedes especificar muchos parámetros:

  1. el nombre (-name xxx)
  2. find . -name tureceta*
  3. Si es un archivo o carpeta (-type f –type d)
  4. find . -type f -name tureceta*
    find . -type d -name tureceta*
  5. Los permisos que tiene (-perm nnn)
  6. find . -type d -perm 777
  7. El usuario al que pertenece (-user usuario1)
  8. find . -type f -user usuario1
  9. El grupo al que pertenece (-group grupo1)
  10. find . -type f -group grupo1
  11. Si el fichero está vacio (-empty)
  12. find . -type f -empty
  13. El tamaño (-size n[cwbkMG]) siendo
    ‘b’    para bloques de 512-byte (este es el de por defecto)
    ‘c’    para bytes
    ‘w’   para two-byte words
    ‘k’    para Kilobytes (1024 bytes)
    ‘M’   para Megabytes (1048576 bytes)
    ‘G’    para Gigabytes (1073741824 bytes)

    find . -size 21k
  14. Modificados los datos en las últimas X*24h (- dtime n)
  15. find . -tipe f -dtime 2  (en las últimas 48h = 2*24)
  16. Accedidos en las últimas X*24h (- atime n)
  17. find . -tipe f -atime 2  (en las últimas 48h = 2*24)

Recordar que con la ayuda y con el man del comando tendréis toda la información

find --help
man find
  • whereis
  • Buscar la localización de un fichero binario, fuente o man

    [root@server ~]# whereis grep
    grep: /bin/grep /usr/share/man/man1/grep.1.gz /usr/share/man/man1p/grep.1p.gz
  • which
  • Buscar la localización de un fichero binario o ejecutable

    [root@sever ~]# which grep
    /bin/grep
    



Instalar Memcached en CentOS 5.3

Memcached is a generic purpose distributed high performance memory object caching system to use in speeding up dynamic database driven websites by caching data and objects in memory to reduce the amount the database needs to be read.

Memcached was originally developed by Danga Interactive for LiveJournal but is now used by many popular and large community driven websites like Slashdot, Wikipedia, SourceForge, GameFAQs, Facebook, Digg, Fotolog, Kayak and like. It is being distributed under a permissive free software licence. Know more about who all are using memcached

Things to consider before Installing memcached.

  1. First, decide how much memory you want to give memcached to use for caching.
  2. Then decide if you want to run memcached on the default port (11211) or not.
  3. Next decide if you want memcached to listen to a specific IP address if you have multiple IP addresses on your server
  4. Finally decide, what user you want to run memcached as; typically, you want to run it using Apache user so that Apache processes can access memcache data

Installation Process

1. If you don’t have rpmforge installed, follow this step.

wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm –install rpmforge-release-0.3.6-1.el5.rf.i386.rpm
yum install –enablerepo=rpmforge memcached

2. Start memcached.

memcached -d -m 512 -l 127.0.0.1 -p 11211 -u nobody

The “-m SIZE” is the flag for setting the memory requirements in MBs. Once this cache is filled memcache will just start to overwrite with newer content. Please experiment with this setting to find what works best for you.

3. Install PHP extension.

wget http://pecl.php.net/get/memcache-2.2.5.tgz

4. Extract tar file.

tar -xvf memcache-2.2.5.tgz

5. Open the directory.

cd memcache-2.2.5

6. Install the memchaced PHP extension.

phpize && ./configure –enable-memcache && make

7.  Copy the extension.

cp modules/memcache.so {PHP extension directory}

8. Edit your php.ini and add the following line.

extension=memcache.so

9. Last is restart your webserver.

10. If you check your server using a phpinfo page you should now see a MemCache section on the page. You can now fully use the MemCache functionality in your PHP.

memcached pre-requissites

yum -y install libevent libevent-devel

How to make memcached run automatically when you restart your server?. Add this line to rc.local

#!/bin/sh
echo “# Start memcached” >> /etc/rc.local
echo “/usr/local/bin/memcached -d -m 1024 -u httpd -l 127.0.0.1″ >> /etc/rc.local

How to have a multiple memcached server.

Create LocalSettings.php file and this line.

$wgMainCacheType = CACHE_MEMCACHED;
$wgParserCacheType = CACHE_MEMCACHED; # optional
$wgMessageCacheType = CACHE_MEMCACHED; # optional
$wgMemCachedServers = array( “127.0.0.1:11211″ );

$wgSessionsInMemcached = true; # optional

To use multiple servers (physically separate boxes or multiple caches on one machine on a large-memory x86 box), just add more items to the array. To increase the weight of a server (say, because it has twice the memory of the others and you want to spread usage evenly), make its entry a subarray:

$wgMemCachedServers = array(“127.0.0.1:11211″, # one gig on this box
array(“127.0.0.1:11211″, 2 ) # two gigs on the other box
);

Security Note:

Memcached has no security or authentication. Please ensure that your server is appropriately firewalled,
and that the port(s) used for memcached servers are not publicly accessible. Otherwise, anyone on the internet can put data into and read data from your cache.

ENJOY FRIENDS AND MAKE EASY¡¡¡¡¡¡¡¡¡¡¡