Estoy trabajando en un proyecto PHP. Solo que cuando intento entrar por el navegador veo el siguiente error:
Los archivos están hospedados en mi maquina local y así mismo no tengo acceso a él por el navegador. ¿Qué es lo que puede estar causando eso?
Si analizamos el mensaje de error, conseguimos obtener algunas informaciones como:
Prohibido, tú no tienes permiso para acceder loja/index.php
en este servidor.
¿Pero cómo así no tenemos permiso? necesitamos, antes, entender lo que son esos permisos…
En Linux, cuando un archivo o directorio es creado, algunos permisos son atribuidos a él automáticamente.
Esos permisos son divididos en tres grupos: El usuario que creo el archivo (usuario dueño), el grupo dueño del archivo (que puede contener varios usuarios), y de los demás usuarios que no pertenecen al grupo dueño.
Esos permisos pueden ser de lectura (r
, read), escritura (w
, write) y ejecución (x
, execute).
El permiso de lectura (r
) permite visualizar el contenido de un archivo o directorio, ya el permiso de escritura (w
) sirve para alterar el contenido de un archivo y directorio.
La opción de ejecución sirve para tornar el archivo en ejecutable, o, en caso de directorios, para poder accederlo y usar comando, como el cd
.
Cierto, ya sabemos lo que son y cuáles son los permisos, ¿pero como podemos saber cuáles están siendo usados en este archivo?
Para visualizar el permiso de un directorio, podemos ir hasta el local donde ese directorio se encuentra.
El comando cd
(change directory) puede llevarnos hasta ese local, que en mi caso queda en /var/www/html
. Por tanto:
$ cd /var/www/html/
Ahora podemos ordenarle a el terminal listar (ls
, list) el contenido de este directorio:
Hum… Aun no conseguimos visualizar los permisos.
La lista que retorna el comando ls
es una lista normal. Para visualizar los archivos y sus permisos tenemos que indicarle al ls
que queremos una lista larga (-l
).
$ ls -l
Ahora tenemos mas informaciones, pero, como queremos saber apenas de los permisos, vamos a concentrarnos en la primera columna.
La primera columna es dividida en diez caracteres. El primero nos muestra si el objeto listado es un archivo (-
) o un directorio (d
).
Los nueve caracteres restantes nos muestran los permisos de los usuarios dueños, grupo dueño y otros usuarios respectivamente:
En caso tenga algún permiso, es mostrada la letra correspondiente al permiso, si no un trazo (-
) es presentado.
Sabiendo eso, ya conseguimos decir cuál es el permiso de nuestro proyecto loja. El usuario dueño tiene todos los permisos (rwx
), mientras el grupo dueño y los demás usuarios no poseen ningún permiso (---
).
Pero, si yo cree los archivos y tengo todos los permisos, ¿por qué no puedo entrar a la página por el navegador?
Cuando entramos a una página por el navegador, por defecto, el servidor no sabe quién es el usuario, o sea, quién entra a la página web utiliza el permiso otro.
Como el directorio del proyecto no posee permisos disponibles para el grupo de usuarios otros no conseguimos entrar a la página por el navegador.
Pues, necesitamos alterar los permisos de ese directorio para conseguir tener acceso por el navegador. ¿Pero cómo podemos hacer eso?
Para alterar los permisos de un archivo o directorio, tenemos que alterar el modo (chmod
, change mode) que ellas están organizadas.
Queremos que los otros usuarios (o
) tengan acceso de lectura (r
) en el directorio, así podrán visualizar los archivos en el mismo. Entonces podemos digitar en el terminal:
$ chmod o=r loja/
Vamos a listar con la opción de lista larga para ver si ocurrió el cambio en los permisos:
¡Permiso atribuido! Vamos a revisar si ahora conseguimos nuestra página por el navegador:
Aun no obtuvimos éxito. Nosotros atribuimos la opción para la lectura, que en caso de directorios sirve para poder visualizar su contenido. Pero no tenemos permiso para introducir esos directorios. Para eso, necesitamos del permiso de ejecución (x
).
Ya sabemos cómo alterar el permiso de una carpeta, entonces basta decir que queremos adicionar (+
), el permiso de ejecución (x
):
$ chmod o+x loja/
Vamos a intentar entrar nuevamente a nuestro proyecto por el navegador y ver si podemos visualizar nuestra página:
Bien la página fue cargada, ¿pero dónde está el CSS? ¿Por qué será que él no fue cargado?
Vamos a revisar los permisos de los archivos del proyecto y ver si tenemos permiso para introducirlos.
Para eso, podemos entrar en el directorio como hicimos antes con el comando cd
, o entonces, podemos pedir para el ls
listar el contenido del directorio tienda:
$ ls -l loja/
Vea que ni lo archivos o directorios tienen permiso para otros usuarios. O sea, no conseguimos introducir el contenido de los directorios. Para resolver esos problemas basta alterar el permiso de todas las carpetas y directorios.
“Pero, ¿tenemos que alterar el permiso de todos los archivos, diretorios y subdirectorios uno por uno?”
¡No necesitamos! El chmod
tiene una opción que hace eso para nosotros. Esa opción cambia el permiso de los archivos recursivamente. Esto es, ella cambia el permiso de todos los archivos en todo el directorio y subdirectorios.
Vamos entonces a indicarle al comando chmod
cambiar el permiso de manera recursiva (-R
) en el directorio loja
:
$ chmod -R o=rx loja/
Vamos a revisar con el comando ls
si el cambio ocurrió de hecho:
¡Todo listo! Ahora si entramos por el navegador devemos ver el site completo:
¡Éxito! el site cargó, así como todos sus componentes.
Conseguimos alterar los permisos de nuestros archivos, pero solo usamos la opción para otros usuarios (o
). ¿Qué hacer en caso de querer alterar los permisos del usuario y del grupo dueño del archivo?
Antes de mostrar como alterar el permiso del usuario el grupo dueño de un archivo o directorio, vamos crear un archivo de texto en cualquier lugar del sistema para ser usado como prueba. En mi caso voy crear ese archivo en el área de trabajo:
Ese archivo ya contiene algunos permisos que fueron atribuidos por defecto en el momento en que fué creado.
Vamos a ordenarle con el comando chmod
que queremos que el usuario dueño del archivo (u
) tenga, ademas de esos permisos, el permiso de ejecutar el archivo.
Entonces yo puedo ordenarle al comando chmod
aumentar (+
) el permiso de ejecución para el usuario dueño (u
):
$ chmod u+x teste.txt
Tambien podemos ordenarle al comando chmod
retirar (-
) el permiso de escritura del grupo dueño (g
):
$ chmod g-w teste.txt
Si le ordenamos listar ese archivo y sus permisos, podemos ver los cambios:
$ ls -l
“Hum… pero si yo quisiera cambiar el permiso de todos los usuarios en un único comando, ¿cómo puedo hacer?”
Nosotros podemos, por ejemplo, pedirle al chmod
remover el permiso de ejecución del usuario dueño del archivo (u-x
), agregar las opciones de escritura y ejecución para el grupo dueño (g+wx
) y dejar los demás usuarios apenas con el permiso de ejecución (o=x
):
$ chmod u-x,g+wx,o=x teste.txt
¡Listo! Alteramos todos los permisos en apenas una línea con un único comando. Si visualizamos los permisos ahora, veremos los cambios:
Pero necesitamos digitar mucho para alterar todos los permisos. ¿Existe alguna forma de ser más directo en la digitación?
Además de utilizar letras, llamado de modo simbólico, o UGO (User, Group, Others), el chmod
acepta también algunos números. Cuando utilizamos números para alterar los permisos, decimos que estamos utilizando el modo octal.
El modo octal recibe este nombre, pues utilizamos ocho números, de 0 a 7, cada uno de esos números corresponden a una letra, o a un conjunto de letras, en el modo simbólico:
x
) en el modo simbólico;w
);r
).Cuando utilizamos el modo octal, podemos pasar el modo de permisos de cada grupo de usuarios. La orden es siempre: usuario dueño, grupo dueño y otros usuarios.
Entonces, por ejemplo yo ordenarle al comando chmod
, colocar el permiso de lectura para el usuario dueño (4
), para el grupo dueño de la escritura (2
) y la de ejecución para los demás usuarios (1
):
$ chmod 421 teste.txt
Ese comando equivale a chmod u=r,g=w,o=x teste.txt
en modo simbólico.
¿Solo podemos utilizar esas opciones con el modo octal?
Nosotros también conseguimos combinar esos permisos en el modo octal. Por ejemplo, si deseamos que el usuario dueño del archivo tenga el permiso de lectura (4
) y escritura (2
), basta sumar el valor de esos permisos. Por tanto, tendríamos 6
.
Ya si queremos quitar todos los permisos, basta colocar 0
.
Para que el usuario dueño tenga todos los permisos (7
) en el archivo, y el grupo dueño tenga los permisos de lectura y escritura (6
) y los demás usuarios no tengan ningún permiso (0
). Basta indicarle al comando chmod
:
$ chmod 760 teste.txt
Si listamos los permisos, podemos revisar si los cambios funcionaran:
Nuestros permisos fueron atribuidos correctamente. :)
Además del chmod
, otro comando muy utilizado cuando es el chown (change owner). Ese comando consigue cambiar el usuario, el grupo dueño de un archivo o directorio y solo puede ser ejecutado por el super usuario, o por el usuario administrador utilizando el comando sudo
.
Debemos tener mucho cuidado en dar permisos para los usuarios que no son parte del grupo dueño, o no son dueños de los archivos o carpetas. Pues, dependiendo del permiso, esos usuarios consiguen tener acceso a un directorio o archivo en el sistema. Pudiendo visualizar, alterar, o hasta mismo excluir su contenido.
Permisos hacen parte del sistema. Sin ellos no podemos visualizar, alterar o ejecutar archivos, entrar en directorios o listar su contenido. Hasta mismo para acceder a un sitio en el internet necesitamos de permisos.
En Linux, podemos alterar el permiso de archivos y directorios usando un comando propio para eso, el chmod
. Ese comando nos permite alterar los permisos del usuario y grupo dueño del archivo o directorio y de los demás usuarios.
Pero antes de alterar, tenemos que entender cuáles son esos permisos y como pueden ser representados.
Yuri Matheus
Yuri es desarrollador e instructor. Es estudiante de Sistemas de Información en la FIAP y es formado como Técnico en Informática en el Senac SP. Y su foco es en las plataformas Java y Python y en otras áreas como Arquitectura de Software y Machine Learning. Yuri también actúa como editor de contenido en el blog de Alura, donde escribe, principalmente, sobre Red, Docker, Linux, Java y Python.
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Puedes realizar el pago de tus planes en moneda local en los siguientes países:
País | |||||||
---|---|---|---|---|---|---|---|
Plan Semestral |
487.37
BOB |
68358.72
CLP |
308854.24
COP |
65.90
USD |
260.86
PEN |
1428.58
MXN |
3016.99
UYU |
Plan Anual |
738.82
BOB |
103627.26
CLP |
468202.41
COP |
99.90
USD |
395.45
PEN |
2165.64
MXN |
4573.56
UYU |
Plan Anual + Boost |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana