Tengo un servidor bastante estándar configurado con Apache y PHP. Una aplicación que estoy ejecutando crea archivos y estos son propiedad del usuario de Apache www-data. Los archivos que subo a través de SFTP son propiedad de mi propio usuario charlesr. Todos los archivos son parte del www-datagrupo. Mi problema es que no puedo modificar ni sobrescribir ninguno de los archivos a través de SFTP que son de su propiedad www-data, aunque charlesrsea parte del www-datagrupo. Puedo modificar los archivos sin problemas a través de una sesión SSH.
Así que no estoy seguro de qué hacer. ¿Cómo otorgo a mi sesión de SFTP permisos para modificar www-dataarchivos de propiedad?
Para un poco de antecedentes, estas son las notas que escribí para mí al configurar el servidor:
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
Y luego me explico a mí mismo qué significa establecer el bit SGID (es decir, todos los archivos creados se /var/wwwvuelven parte del www-datagrupo automáticamente).
ACTUALIZAR
Parece que el problema fue causado por la propia aplicación o, más específicamente, por el marco de la aplicación ( Kohana ) que configura ciertos archivos que escribe en 0644 (rw-r - r--); es decir, no se puede escribir en grupo. Esto, junto con el hecho de que los archivos también son propiedad de www-datasignificaba que no podía editar los archivos a través de SFTP cuando estaba conectado como charlesr. No estoy seguro de por qué podría editar los archivos a través de SSH. Supongo que debo haber usado sudo.
Aquí está la estrategia de permisos que ahora uso gracias a la incansable ayuda de Marty Fried , quien señaló los defectos de mi estrategia anterior y también me ayudó a marinarme en el mundo de los permisos de Linux hasta que finalmente lo asimilé. Gracias Marty!
Visión general
- Los archivos y directorios
/var/wwwdeben ser propiedad deroot:webmasters - Todos los desarrolladores deben ser miembros del
webmastersgrupo. - Todos los directorios
/var/wwwdeben establecerse en:2775ou=rwx,g=rwxs,o=rx(rwxrwx-rx) - Todos los archivos
/var/wwwdeben establecerse en:0664oug=rw,o=r(rw-rw-r--)
Los siguientes deben ser propiedad de www-data:webmasters(es decir, estos son los directorios en los que Apache necesita poder escribir):
- aplicación / caché
- aplicación / registros
- subir
- client_helpers / upload
CÓMO
Para configurar permisos en /var/wwwdonde se sirven sus archivos de manera predeterminada:
sudo addgroup webmasterssudo adduser $USER webmasterssudo chown -R root:webmasters /var/wwwsudo find /var/www -type f -exec chmod 664 {} \;sudo find /var/www -type d -exec chmod 775 {} \;sudo find /var/www -type d -exec chmod g+s {} \;sudo chown -R www-data:webmasters application/cache/[etc ...]
Ahora cierre sesión y vuelva a iniciar sesión para que los cambios se hagan efectivos.
El conjunto de comandos anterior hace lo siguiente:
- Crea un nuevo grupo llamado
webmasters; todos los usuarios que necesiten acceso de escritura a los archivos de la aplicación se agregarán a este grupo. - agrega el usuario actual (
$USER) alwebmastersgrupo. - cambia el propietario de
/var/wwwarooty el grupo awebmastersgrupo. - agrega 664 permisos (-rw-rw-r--) a todos los archivos en
/var/www. - agrega 775 permisos (drwxrwxr-x) a todos los directorios en
/var/www. - establece el bit SGID
/var/wwwy todos los directorios en él; Este último punto merece una explicación. Tenga en cuenta también que también puede poner un 2 en la parte frontal de su chmod octal (por ejemplo, 2644) para hacer lo mismo. - establece el propietario en
www-data(usuario de Apache) y el grupo del directorio proporcionado enwebmaster. Esto garantiza que Apache y cualquier persona delwebmastersgrupo puedan escribir en el directorio . Haga lo mismo para todos los demás directorios que deben poder escribirse.
/var/wwwsin agregarlo también a ese grupo?