Permisos de archivo predeterminados para el usuario de php www-data

8

Tengo un php instalado en mi máquina ubuntu. La raíz web es/var/www

Configuré los permisos para esta carpeta así:

sudo chown -R ftpuser: www-data / var / www

ftpuser es el usuario que configuré para que pueda ftp a / var / www desde otra máquina en la red. www-data es el usuario que usa php. Lo verifiqué dos veces usando whoamiphp.

Cada vez que subo un archivo FTP a la máquina, el grupo no tiene permisos para el archivo. Entonces, cuando intento acceder a él en mi navegador machine-name/new-file.php, me dicen que me han denegado el permiso y tengo que ir chmodal nuevo archivo.

Me pregunto si hay una forma en que pueda predeterminar el usuario / grupo www-data para que tenga permisos de acceso a nuevos archivos, de modo que no tenga que mantener chmod en cada archivo nuevo.

JD Isaacks
fuente

Respuestas:

6

Podrías usar ACL. Para configurar ACL para Ubuntu 10.10, primero monte los sistemas de archivos con la opción acl en / etc / fstab.

sudo vim /etc/fstab

UUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 por defecto, acl 0 1

sudo mount -o remount,acl /

Luego, cree un grupo al que pueda pertenecer un usuario para este propósito.

sudo groupadd developers
sudo usermod -a -G developers $username

El usuario debe cerrar sesión y volver a ingresar para convertirse en miembro del grupo de desarrolladores.

Por supuesto, no haga esto si tiene contenido en el directorio / var / www que desea, sino solo para ilustrar cómo configurarlo para comenzar:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root.developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public

Luego reemplace las referencias a "/ var / www" con "/ var / www / public" en un archivo de configuración y vuelva a cargar.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Si quisiéramos restringir la eliminación y el cambio de nombre de todos menos el usuario que creó el archivo:

sudo chmod +t /var/www/public

De esta manera, si queremos crear directorios para marcos que existen fuera de la raíz del documento de Apache o tal vez crear directorios que se puedan escribir en el servidor, todavía es fácil.

Directorio de registros grabables de Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Directorio de bibliotecas legibles por Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/lib
sudo chmod 0750 /var/www/lib

fuente
Esto funcionó perfectamente para mí, pero me interesaría si pudiera explicar lo que el chmod g+sy setfaclcomandos hicieron (y sus parámetros).
Greg
4

Estoy seguro de que ya resolvió esto, por lo que es para cualquier persona con una solicitud similar

ejecute el comando "cambiar propiedad" en su carpeta webroot:

sudo chown manny -R www

Esto hará que el propietario reemplace "manny" con su nombre de usuario, permitiéndole escribir / leer dentro de la carpeta www

Manny
fuente
1

Si su servidor web ni siquiera puede leer los archivos, es muy probable que los permisos new-file.phpsean algo así como 600 (lectura y escritura para el propietario). Busque una configuración de umask en su aplicación FTP y asegúrese de que sea algo así como 007.

Si su aplicación web necesita modificar los archivos (u otras operaciones que solo pueden ser realizadas por el propietario del archivo), necesita otro enfoque. Si está usando Apache, debería considerar usar itk MPM . Con ese módulo, puede hacer que Apache ejecute / abra los archivos usando el mismo usuario que "ftpuser". Si necesita más información sobre este tema, agregue un comentario.

Lekensteyn
fuente