¿Cómo puedo cambiar recursivamente los permisos de archivos y directorios?

65

Tengo ubuntu instalado en mi computadora local con apache / php / mysql.

Ahora tengo un directorio en / var / www, dentro del cual tengo varios de mis proyectos en curso. También trabajo con código abierto (drupal, magento, sugarcrm).

El problema que estoy enfrentando es cambiar el permiso de archivo con la terminal. En algún momento necesito cambiar el permiso de la carpeta completa y sus subcarpetas y archivos posteriores. Tengo que cambiar individualmente usando

sudo chmod 777 foldername

¿Cómo puedo hacer esto recursivamente?

Además, ¿por qué tengo que hacerlo siempre? 777 , probé 755 para carpetas y 644 para archivos, pero eso no funcionará.

Nikhil
fuente

Respuestas:

90

Simplemente agregue la -Ropción para cambiar recursivamente los permisos de los archivos. Un ejemplo, agrega recursivamente permisos de lectura y escritura para el propietario y el grupo en foldername:

chmod -R ug+rw foldername

Los permisos serán como 664 o 775.

Establecer los permisos a 777 es altamente desaconsejado . Obtiene errores en Apache o en su editor con respecto a los permisos porque apache se ejecuta con un usuario diferente ( www-data) que usted.

Si desea escribir /var/www, agréguelo al www-datagrupo y configure los permisos umask + en consecuencia.

  • Añádete al www-datagrupo:sudo adduser $USER www-data
  • Cambiar la propiedad de los archivos en /var/www:sudo chown -R www-data:www-data /var/www
  • Cambie la umask, por lo que los archivos recién creados por Apache también otorgan permisos de escritura al grupo. Añadir umask 007a /etc/apache2/envvars.
  • Conceder a sí mismo (técnicamente, el grupo www-data) escribir permisos: sudo chmod -R g+w /var/www.
Lekensteyn
fuente
sí, estaba agregando r flag en el lugar equivocado, lo estaba agregando después de o + w para chmod.
JohnMerlino
Además, si intenta usar chmod -r blablabla(pequeño -r en lugar de -R) Puede terminar eliminando los permisos de lectura para todos ...
Cyril Duchon-Doris
1
Después de estas instrucciones, es una buena idea verificar que no haya .htaccessarchivos con permisos de escritura para apache. find /var/www/ | grep .htaccess | xargs ls -l.
reynoldsnlp
23

fuerza bruta:

sudo find foldername -exec chmod a+rwx {} ";"

¿Qué no funciona? ¡Sé más específico!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"
usuario desconocido
fuente
cuando esté dentro de la carpeta, elimine "nombre de carpeta"
Enrique
44
... y reemplazarlo con.
djjeck
4

No debería necesitar 777 para nada. En el peor de los casos, deberá cambiar el propietario de ciertos archivos y directorios al usuario "www-data".

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Si está utilizando el método de membresía grupal de Lekensteyn, cambie 755 a 775 y 644 a 664 respectivamente arriba, y luego fuerce la adherencia del grupo:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s
Kees Cook
fuente
3

Puede cambiar las subcarpetas y los archivos en Nautilus. Como puedes ver en la imagen de abajo. Para tener los permisos en los botones, puede habilitar la opción en Ubuntu Tweak.

ingrese la descripción de la imagen aquí

Alfredo Hernández
fuente
Use LANG=C [command]para obtener traducciones al inglés.
Lekensteyn
1

Si desea que todos sus archivos sean legibles para el mundo (es decir, es solo un conjunto estático de archivos / imágenes HTML), utilice este comando:

chmod -R a+r <base directory>

Eso revisará recursivamente todos los archivos y subdirectorios y les agregará permiso de lectura.

ADVERTENCIA : ¡No haga esto para archivos que son ejecutables! Solo archivos que deberían ser visibles para todos.

Ryan Shillington
fuente
¿Estás diciendo "no hagas chmod -R a+xnada" o "no hagas nada chmod -R a+ren ejecutables"?
aleclarson
Lo arreglé. Lo último es cierto. Tenga cuidado al permitir que otros accedan a los ejecutables que ha creado.
Ryan Shillington