Come posso modificare in modo ricorsivo le autorizzazioni di file e directory?


65

Ho Ubuntu installato sul mio computer locale con apache / php / mysql.

Ora ho una directory in / var / www - all'interno della quale ho molti dei miei progetti in corso. Lavoro anche con opensource (drupal, magento, sugarcrm).

Il problema che sto affrontando sta cambiando l'autorizzazione del file con il terminale. A volte devo cambiare l'autorizzazione dell'intera cartella e delle sue sottocartelle e file successivi. Devo cambiare individualmente usando

sudo chmod 777 foldername

Come posso farlo in modo ricorsivo.

Inoltre, perché devo sempre farlo 777 , ho provato 755 per le cartelle e 644 per i file, ma non funzionerà.

Risposte:


91

Basta aggiungere l' -Ropzione per modificare in modo ricorsivo le autorizzazioni dei file. Un esempio, aggiungere in modo ricorsivo le autorizzazioni di lettura e scrittura per il proprietario e il gruppo su foldername:

chmod -R ug+rw foldername

Le autorizzazioni saranno come 664 o 775.

L'impostazione delle autorizzazioni su 777 è altamente sconsigliata . Si ottengono errori in Apache o nel proprio editor per quanto riguarda le autorizzazioni perché apache viene eseguito con un utente diverso ( www-data) da te.

Se vuoi scrivere /var/www, aggiungiti al www-datagruppo e imposta umask + autorizzazioni di conseguenza.

  • Aggiungiti al www-datagruppo:sudo adduser $USER www-data
  • Modifica la proprietà dei file in /var/www:sudo chown -R www-data:www-data /var/www
  • Cambia umask, quindi i nuovi file creati da Apache concedono anche autorizzazioni di scrittura al gruppo. Aggiungi umask 007a /etc/apache2/envvars.
  • Concedetevi (tecnicamente, il gruppo www-data) scrivere permesso: sudo chmod -R g+w /var/www.

sì, stavo aggiungendo r flag nel posto sbagliato, lo stavo aggiungendo dopo o + w per chmod.
John Merlino,

Inoltre, se provi ad usare chmod -r blablabla(piccolo -r invece di -R) Potresti finire per rimuovere i permessi di lettura per tutti ...
Cyril Duchon-Doris

1
Dopo queste istruzioni, è una buona idea verificare che non ci siano .htaccessfile con permessi di scrittura per apache. find /var/www/ | grep .htaccess | xargs ls -l.
reynoldsnlp,

23

forza bruta:

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

Cosa non funziona? Sii più preciso!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"

quando ti trovi nella cartella, rimuovi "foldername"
Enrique l'

4
... e sostituiscilo con.
Djjeck,

4

Non dovresti aver bisogno di 777 per nulla. Nel peggiore dei casi, dovrai cambiare il proprietario di determinati file e directory con l'utente "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

Se si utilizza il metodo di appartenenza al gruppo Lekensteyn, modificare 755 a 775 e 644 a 664 rispettivamente sopra, quindi forzare la viscosità del gruppo:

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

3

È possibile modificare le sottocartelle e i file su Nautilus. Come puoi vedere nell'immagine qui sotto. Per avere i permissons sui pulsanti, puoi abilitare l'opzione su Ubuntu Tweak.

inserisci qui la descrizione dell'immagine


Utilizzare LANG=C [command]per ottenere traduzioni in inglese.
Lekensteyn,

1

Se vuoi che tutti i tuoi file siano leggibili in tutto il mondo (es. È solo un insieme statico di file / immagini HTML), usa questo comando:

chmod -R a+r <base directory>

In questo modo verranno esaminati in modo ricorsivo tutti i file e le sottodirectory e verranno aggiunti i permessi di lettura.

ATTENZIONE : non farlo per i file eseguibili! Solo i file che dovrebbero essere visibili a tutti.


Stai dicendo "non fare chmod -R a+xnulla" o "non fare gli chmod -R a+reseguibili"?
aleclarson,

L'ho riparato. Il dopo è vero. Fai attenzione a consentire ad altri di accedere agli eseguibili che hai creato.
Ryan Shillington,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.