El siguiente artículo trata sobre Change Mode, CHMOD abreviado, que es el sistema de asignación de permisos que se utiliza principalmente en sitios web o sistemas operativos basados en Unix, como las distribuciones GNU/Linux, *BSD o el sistema operativo MAC OS de Apple.
Trabajando con páginas web es cuestión de tiempo que necesitemos asignar o cambiar los permisos a algún archivo, carpeta o conjunto de ambos.
La asignación de permisos a los archivos es un tema importante, relacionado directamente con la seguridad del sitio, si bien es algo que la mayoría desconocemos cuando nos creamos un sitio web y que muy probablemente nos suene más cuando hablamos del uso de Sistemas de Administración de Contenido (CMS), ya sean portales web, foros, wikis o sistemas de blogs.
Estos CMS suelen llevar documentación adjunta (normalmente un leeme.txt o un readme.txt) en el que nos especifican, por lo menos, los permisos concretos para algunos archivos. El problema viene con el resto de archivos ya que al no estar especificado y desconocer este tema uno puede no saber que hacer y dejarse algún archivo con unos permisos inadecuados que puede darnos más de un dolor de cabeza.
En casi cualquier sitio que preguntemos nos podrán decir como asignar o cambiar permisos de archivos, normalmente el método más rápido y sencillo pasa por usar un cliente FTP (el programa con el que subimos los archivos al servidor), suele tener una opción con la cual cambiar los permisos; por ejemplo con el FileZilla simplemente hacemos click con el botón derecho sobre el archivo o carpeta, seleccionamos Atributos del archivo y ya podemos hacer lo que nos han indicado.
Pero estamos más o menos igual que al principio porque aunque ya sabemos como hacerlo seguimos sin saber que hacemos exactamente y para que.
CHMOD es el acrónimo de Change MODe y es un comando Unix, que a su vez es un sistema operativo multiplataforma y multiusuario. Unix mueve diversos sistemas operativos como GNU/Linux, FreeBSD o MAC OS X entre otros; esto quiere decir que los usuarios de estos sistemas están más familiarizados con CHMOD porque es el sistema de asignación de permisos que usan en el día a día.
Toda esta explicación y la que sigue, como se puede deducir del párrafo anterior, solo es válida para páginas web alojadas en servidores basados en Unix, que son la gran mayoría y además cuestan menos.
Para entender un poco mejor el funcionamiento hay que tener algunos conceptos claros.
Los permisos de archivo se pueden asignar por medio de una consola, con números o con letras, ya sea por FTP, Telnet (inseguro y en desuso) o SSH y también en modo gráfico como hemos visto anteriormente.
Entrando en la parte más técnica debemos tener en cuenta que CHMOD permite 3 tipos de permisos para 3 tipos de usuarios.
Permisos de lectura (r), escritura (w) y ejecución (x) para el propietario (u), el grupo (g) y otros (o).
El propietario es el dueño del archivo; grupo hace referencia a un conjunto de usuarios con permisos similares, no es algo que esté muy extendido y a lo que se le dé mucho uso, pero tiene su utilidad y otros hace referencia a el resto de usuarios que tienen acceso a los archivos, entiéndanse visitantes, robots de búsqueda, etc.
En cuanto a los permisos, se permiten múltiples combinaciones de los mismos en referencia a unos valores básicos:
1 es permiso de ejecución.
2 es permiso de escritura.
4 es permiso de lectura.
Para entender mejor la numeración concreta solo habría que separar el número de un permiso en los valores (1,2 ó 4) correspondientes que diesen como resultado el número en cuestión, viendo todos los números los permisos serían:
7 lectura, escritura y ejecución (4+2+1) o en letras … rwx
6 lectura, escritura (4+2) … rw-
5 lectura, ejecucion (4+1) … r-x
4 lectura … r
3 escritura, ejecución … -wx
2 escritura … -w-
1 ejecución … –x
0 nada, sin acceso … —
En modo gráfico es bastante sencillo de hacer porque simplemente marcamos unas casillas o escribimos el número del permiso correspondiente, por ejemplo, si queremos que el propietario tenga permisos de lectura y escritura (6) y que grupo y otros solo tengan de lectura (4) escribiríamos 644 .. si queremos que los tres grupos tengan todos los permisos el número sería 777, etc..
En modo consola, escribiríamos chmod usuario permiso/s archivo.. por ejemplo chmod ugo 777 configuration.php … con esto asignaríamos todos los permisos para el archivo de configuración a los tres tipos de usuarios.
Haciéndolo solo con letras sería un pelín más complejo, además tendríamos que incluir los símbolos + para añadir permisos o – para quitar permisos, para actuar en más de un tipo de usuario separamos con comas: chmod u+rwx,go+rx configuration.php; de este modo hemos añadido todos los permisos al propietario y a grupos y otros solo le hemos añadido de lectura y ejecución, del mismo modo podríamos quitar al grupo la opción de ejecución con: chmod g-x configuration.php
Si pretendemos asignar permisos a un directorio lo haríamos de igual modo, cambiando el nombre de archivo por el del directorio y para que los directorios hijos y los archivos del directorio hereden los permisos añadiríamos al final del comando -R; chmod ugo rwx cache -R
Generalmente los permisos correctos serán de 755 para los directorios (la caché suele requerir permisos 777) y de 644 para los archivos.
Para finalizar, ¿por qué si se supone que somos el propietario necesitamos permisos 777 para editar los archivos? Porque el propietario en realidad es el servidor y nosotros en este caso el propietario del mismo al que le indicamos los cambios y él los ejecuta.
En caso de necesitar cambiar el propietario de un archivo usaríamos el comando chown del siguiente modo:
chown nuevopropietario nombrearchivo
Para cambiar el propietario de un directorio y que los directorios internos y los archivos pasen también al nuevo propietario:
chown -R nuevopropietario nombredirectorio
Los usuarios de sistemas unix o administradores de servidores en general pueden acceder a la documentación de chmod/chown desde la consola con man chmod o man chown