Completaré las respuestas de rahmu y MV con una solución técnica. Todo lo que sigue es válido solo para sistemas similares a UNIX.
Desplácese por la sección chmod / chown para ver un ejemplo con ACL, una herramienta más poderosa que los modos de archivo UNIX.
Encontrar el nombre de usuario de su servidor web
Primero, necesitará saber el nombre de usuario con el que se ejecuta su servidor web. Si está usando Apache, que puede ser apache
o httpd
, www-data
, etc. En la mayoría de Debian-como sistemas, Apache es www-data
. Para nginx, en general, también lo es www-data
.
Para comprobarlo, intente:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Asegúrese de que el nombre de usuario que devuelve este comando sea coherente (por ejemplo, uso nginx el 99% del tiempo, pero este comando devuelve tomcat7
, un servidor web Java que instalé una vez) .
Otorgar permisos al servidor web: usar chmod
ychown
Haciendo un chmod
666 o 777 (la solución ideal para ese tipo de problemas en malas documentaciones / tutoriales) puede hacer que las cosas funcionen mágicamente, pero es inseguro. Otorgar 666 o 777 permisos dará acceso a "otros". Entonces, no solo Apache, sino también grandmother
y nsa
(siempre que esas cuentas de usuario existan en su máquina, pero en realidad no, evite hacerlo a menos que sea solo para pruebas / solución de problemas).
Es mejor ser más específico y otorgar permisos solo a usted y Apache. Cambie el grupo de sus archivos para dar el control total de sus archivos al servidor web. Para hacer esto, cambie el propietario de forma recursiva:
chown -R www-data:www-data your/folder/
Pero lo más probable es que desee mantener el acceso completo a sus archivos cambiando solo el grupo:
chown -R yourusername:www-data your/folder/
Luego, haga lo apropiado chmod
para otorgarle al grupo www-data
los mismos permisos que usted. Por ejemplo, si el modo actual es 640 (6 para usted, 4 para www-data, 0 para otros, traduciendo a -rw-r -----) , configúrelo en 660 (6 para usted, 6 para www- datos, 0 para otros, traduciendo a -rw-rw ----) . Vea la respuesta de rahmu para obtener más información sobre los modos de archivo, es un mecanismo antiguo pero elegante.
Para evitar manipular números arcanos con chmod
, también puede usar esta sintaxis:
chmod -R g+rw your/folder/
Significa "para el grupo ( g
), agregar ( +
) leer y escribir ( rw
) permisos en la carpeta your/folder/
, recursivamente ( -R
)".
En el 90% de los casos, esto debería ser suficiente.
Mi método preferido: usar ACL (Lista de control de acceso)
A veces la primera solución no es suficiente. Tomaré el ejemplo de Symfony Framework que registra y almacena en caché una gran cantidad de datos. Por lo tanto, necesita acceso de escritura a la carpeta correspondiente.
Y el chmod
/chown
método puede no ser suficiente, cuando está utilizando en paralelo la Consola Symfony en la CLI (bajo mi cuenta de usuario) y la Web (usuario del servidor web). Esto causa muchos problemas porque Symfony modifica constantemente los permisos.
En este caso, utilizaremos la ACL (Lista de control de acceso), que es una forma más avanzada de administrar permisos en muchos sistemas UNIX.
Aquí los comandos dados por la documentación oficial de Symfony ( por favor cambie app/cache
y app/logs
según sus necesidades ):
En un sistema que admita chmod +a
(es decir, no Debian / Ubuntu)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
En un sistema que no admite chmod +a
(el más común)
Necesitarás la setfacl
herramienta; tal vez esté instalado en su sistema de manera predeterminada, así que intente setfacl -v
ver si el comando está disponible.
Si el comando no está disponible y está usando Ubuntu 14.04+, solo tendrá que instalar la herramienta:
sudo apt install acl
De lo contrario, siga la documentación de su sistema operativo, ya que es posible que deba cambiar la forma en que se monta su partición ( documentación de Ubuntu aquí ).
Y ahí estamos:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
Nunca tuve ningún problema con este método, satisfecho o le devolvemos su dinero.