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.
fuente

/var/wwwsin agregarlo también a ese grupo?/var/wwwpor lo que pensé que da acceso al grupowww-datay haciendo cada uno un miembro de ese grupo sería una buena solución. Sin embargo, ahora puedo ver el problema de que Apache pueda sobrescribir cualquier archivo allí. Dado que solo 2 desarrolladores (que me incluyen a mí) tienen acceso al código, es relativamente seguro a corto plazo.Me di cuenta de que no lo habías usado
chown.Para configurar correctamente la propiedad de los archivos / carpetas, puede configurar todo el directorio de esta manera:
chown -R www-data:www-dataEsto establece la propiedad de grupo
www-datay usuariowww-dataAdemás, puede hacer esto como una solución temporal:
chmod 777 /var/data/<filename>ochmod 777 /var/data/<foldername>edite los archivos según sea necesario, luego
chmod 644 /var/data/<filename>ochmod 755 /var/data/<foldername>Tenga cuidado de usar el interruptor "-R", ya que también cambia los permisos de todos los subarchivos y carpetas.
664 son los permisos de archivo estándar de Apache y 755 los permisos de carpeta estándar.
Espero que esto ayude :)
Estrella
fuente
/var/data? Además, ¿qué directorio le sugiere que use el comandochown -R www-data:www-data? Ojalá no/var/www.