2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37

Come impostare i permessi dei file in modo che i nuovi file ereditino gli stessi permessi?

Ho una cartella in cui nuove sottocartelle e file saranno creati automaticamente da uno script.

Voglio mantenere i permessi di utente e di gruppo in modo ricorsivo per tutte le nuove cartelle e i nuovi file posizionati nella directory madre. So che questo comporta l'impostazione di un bit adesivo, ma non riesco a trovare un comando che mostri esattamente ciò di cui ho bisogno.

Questo è quello che ho fatto finora:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

In seguito, voglio che i 660 permessi siano impostati ricorsivamente a tutte le cartelle e i file messi in /path/to/parent.

Tuttavia, tutto quello che ho provato finora ha fallito. Qualcuno può aiutarmi per favore?

In realtà il flag ottale 660 probabilmente non è nemmeno corretto. I permessi che voglio sono:

  1. Le directory poste sotto /path/to/parent sono eXecutable da utenti con permessi
  2. I file sono leggibili/scrivibili dall'utente me stesso e dai membri di somegroup
  3. I file e le cartelle in /path/to/parent NON sono leggibili dal mondo

Sto girando su Ubuntu 10.0.4 LTS.

Qualcuno può aiutare per favore?

Risposte (3)

64
64
64
2011-03-30 10:28:30 +0000

I bit di permesso che state cercando sono 0770 e 0660.

  • rw- permessi → 110 binario → 6 ottale

Il gruppo di proprietà può essere ereditato dai nuovi file e cartelle creati nella tua cartella /path/to/parent impostando il bit setgid usando chmod g+s come questo:

chmod g+s /path/to/parent

Ora, tutti i nuovi file e cartelle creati sotto /path/to/parent avranno lo stesso gruppo assegnato come è impostato su /path/to/parent.


I permessi POSIX sui file non sono non ereditati; sono dati dal processo che li crea e combinati con il suo attuale valore di umask.

Tuttavia, si possono usare POSIX ACLs per ottenere questo. Impostare la default ACL su una directory:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Questo applicherà setfacl alla directory /path/to/parent, -m modificando le -default ACLs - quelle che saranno applicate agli elementi appena creati. (X maiuscolo significa che solo le directory riceveranno il bit +x.)

(Se necessario, si può aggiungere un u:someuser:rwX o un g:someuser:rwX - preferibilmente un gruppo - alle ACL.)


Nota: Sui vecchi sistemi che usano ext3/ext4, era necessario montare il filesystem con l'opzione acl, altrimenti avrebbe ignorato tutte le ACL e impedito di impostarne di nuove.

mount -o remount,acl /

Per impostare questo in modo permanente, usare tune2fs -o acl <device> o modificare /etc/fstab.

10
10
10
2011-03-30 12:09:01 +0000

Grawity dà una risposta eccellente, ma sospetto che la domanda modificata possa aver cambiato leggermente le cose.

suggerirei di lasciare la directory di proprietà dell'utente/gruppo apache. Questa sarà probabilmente apache o httpd a seconda della tua distribuzione.

ad esempio

chown -R apache:apache /path/to/parent

Potete poi fare qualcosa come https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian o anche aggiungervi al gruppo apache per assicurarvi di avere accesso di gruppo alla directory. (Qualcosa come usermod -aG apache username)

Io non farei chmod -R l'intera directory perché non vuoi script html o jpg o altre cose casuali eseguibili. Dovresti cambiare i permessi come richiesto. (anche se resettare a 660 potrebbe non essere la peggiore delle idee.)

Qualcosa che potresti provare è:

chmod o+w file

La ‘o’ significa ‘altro’ & ‘w’ significa ‘scrivere’. Puoi anche avere ‘u’ per ‘user’ e ‘g’ per ‘group’, così come ‘r’ e ‘x’ che si spera siano auto esplicativi. Puoi rimuovere i permessi usando ‘-’ piuttosto che ‘+’.

2
2
2
2011-03-30 14:22:39 +0000

Penso che tu stia complicando troppo la questione. Se la directory di primo livello non è accessibile agli altri, allora gli altri non saranno in grado di creare file all'interno dell'albero. L'accesso in scrittura di gruppo non è richiesto se solo apache sta facendo la scrittura.

Questi passi dovrebbero fare ciò che vuoi (sostituisci directory nei comandi con la directory che vuoi usare):

  • aggiungi umask 027 allo script apache defaults /etc/default/apache. Questo impedirà ad altri di accedere a qualsiasi file o directory creata da apache.
  • esegui chown www-data:www-data directory sulla directory in cui vuoi che apache possa scrivere.
  • esegui chmod 750 directory sulla directory in cui vuoi che apache possa scrivere.

Permettere ad apache di scrivere su una directory apre la possibilità di iniettare ogni sorta di malware nel contenuto che state servendo. Controllate il contenuto di questo albero di directory in modo appropriato.