Después de realizar un website con Joomla si el cliente no necesita añadir nuevas funcionalidades o no puede actualizar los módulos, componentes o plugins porque se ha quedado desactualizada, suele suceder que empiezan a encontrarse numerosas vulnerabilidades que son aprovechadas para acceder al código para manipularlo, enviar emails, mostrar otros productos, infectar a los visitantes o atacar a otras webs.
Ante este panorama, sí el cliente no esta dispuesto a realizar cambios y a realizar una pequeña inversión en subsanarlos nos vemos avocados recibir todo tipo de ataques.
Para solucionar este problema existe varias soluciones, una de ellas que es fácilmente aplicable, simplemente es proteger el espacio web contra escritura, ya qué muchos ataques se basan en modificar los ficheros index.php , template.php, footer.php, etc... y con añadir solamente la escritura en las zonas, donde sea necesario para el correcto funcionamiento del Joomla, solucionamos muchos quebraderos de cabeza.
Hemos realizado un pequeño script en bash que tiene en cuenta las versiones de Joomla1.0 hasta la 3.1 y los habituales componentes que escriben en partes especiales como el docman, akeeba, virtuemart 1.5.x, sef404, extplorer, breezingforms.
Con esto el cliente podrá continuar trabajado con su web añadiendo nuevos artículos, recibiendo información de los formularios, etc.. pero no podrá ni instalar nada nuevo ni modificar archivos css ni php. En caso necesario se tendría que habilitar la escritura en esos archivos pero limitandolo para que a los atacantes les cueste más y que desistan e intente atacar a otra web menos protegida.
- #!/bin/sh
-
- dir="/var/www/$1/htdocs"
-
- if [ ! "$1" ]
- then
- echo "falta el nombre del dominio"
- exit 1
- fi
-
- if [ ! -d $dir ]
- then
- echo "no existe el dominio"
- exit 1
- fi
-
- cd $dir
-
- chmod ogu-w $dir
- chmod ogu-w -R administrator components includes language libraries modules plugins templates
- chmod ogu-w *.php
-
- # Permisos para joomla =1.0
- if [ -d editor ]
- then
- chmod ogu-w -R editor
- fi
- if [ -d mambots ]
- then
- chmod ogu-w -R mambots
- fi
-
- # Permisos para joomla =1.5
- if [ -d xmlrpc ]
- then
- chmod ogu-w -R xmlrpc
- fi
-
- # Permisos para joomla >=1.6
- if [ -d cli ]
- then
- chmod ogu-w -R cli
- fi
-
- # Permisos para joomla >=3.0
- if [ -d bin ]
- then
- chmod ogu-w -R bin layouts
- fi
-
- chmod ogu+w -R administrator/cache
-
- if [ -d administrator/backups ]
- then
- chmod ogu+w -R administrator/backups
- fi
-
- # Ajusta permisos para virtuemart 1.5.x
- if [ -d components/com_virtuemart/shop_image ]
- then
- chmod ogu+w -R components/com_virtuemart/shop_image
- fi
- if [ -e administrator/components/com_virtuemart/virtuemart.cfg.php ]
- then
- chmod ogu+w -R administrator/components/com_virtuemart/virtuemart.cfg.php
- fi
-
-
- # Ajusta permisos para rsform
- if [ -d components/com_rsform/uploads ]
- then
- chmod ogu+w -R components/com_rsform/uploads
- fi
-
-
- # Ajusta permisos para docman
- if [ -e administrator/components/com_docman/docman.config.php ]
- then
- chmod ogu+w -R administrator/components/com_docman/docman.config.php
- fi
-
-
- # Ajusta permisos para sef404
- if [ -d administrator/components/com_sh404sef/config ]
- then
- chmod ogu+w -R administrator/components/com_sh404sef/config
- fi
- if [ -d components/com_sh404sef/cache ]
- then
- chmod ogu+w -R components/com_sh404sef/cache
- fi
-
-
- # Ajusta permisos para akeeba
- if [ -d administrator/components/com_akeeba/backup ]
- then
- chmod ogu+w -R administrator/components/com_akeeba/backup
- fi
-
-
- # Ajusta permisos para extplorer
- if [ -d administrator/components/com_extplorer/config ]
- then
- chmod ogu+w -R administrator/components/com_extplorer/config
- fi
-
-
- # Ajusta permisos para breezingforms
- if [ -d administrator/components/com_breezingforms/ajax_cache ]
- then
- chmod ogu+w -R administrator/components/com_breezingforms/ajax_cache
- fi
- if [ -d administrator/components/com_breezingforms/payment_cache ]
- then
- chmod ogu+w -R administrator/components/com_breezingforms/payment_cache
- fi
- Como mejora suplementaria, sí el cliente no necesita añadir ninguna imagen nueva también se puede proteger todo el directorio /images
- Como existen infinidad de módulos, componentes y configuraciones en caso de encontrar algún componente que no funcione, enviadnos para incluirlo.