Come impostare le autorizzazioni per i file in modo che i nuovi file ereditino le stesse autorizzazioni? [duplicare]


35

Questa domanda ha già una risposta qui:

Ho una cartella in cui le nuove sottocartelle e file verranno creati automaticamente, da uno script.

Voglio mantenere le autorizzazioni utente e di gruppo in modo ricorsivo per tutte le nuove cartelle e file inseriti nella directory principale. So che questo comporta l'impostazione di un bit appiccicoso, 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

Successivamente, desidero che le autorizzazioni 660 vengano impostate in modo ricorsivo su tutte le cartelle e i file inseriti /path/to/parent.

Tuttavia, tutto ciò che ho provato finora è fallito. Qualcuno può aiutare per favore?

In realtà la bandiera ottale 660 probabilmente non è nemmeno corretta. Le autorizzazioni che desidero sono:

  1. Le directory posizionate sotto /path/to/parentsono eseguibili dagli utenti con autorizzazioni
  2. i file sono letti / scrivibili dall'utente stesso e dai membri di un gruppo
  3. I file e le cartelle in /path/to/parentNON sono leggibili dal mondo

Sono in esecuzione su Ubuntu 10.0.4 LTS.

Qualcuno può aiutare per favore?

Risposte:


10

Grawity offre 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. Questo probabilmente sarà apache o httpd a seconda della tua distribuzione.

per esempio

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

Puoi quindi fare qualcosa come https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian o persino aggiungerti al gruppo apache per assicurarti di avere accesso di gruppo alla directory. (Qualcosa del tipo usermod -aG apache username)

Non vorrei chmod -Rl'intera directory perché non vuoi script html o jpg o eseguibili in altre cose casuali. È necessario modificare le autorizzazioni come richiesto. (sebbene ripristinarlo a 660 potrebbe non essere la peggiore delle idee.)

Qualcosa che potresti provare è:

chmod o+w file

'O' significa 'altro' e 'w' significa 'scrivere'. Puoi anche avere "u" per "utente" e "g" per "gruppo", così come "r" e "x" che si spera siano autoesplicativi. Puoi rimuovere le autorizzazioni usando '-' anziché '+'.


La soluzione più semplice credo sia quella di aggiungermi al gruppo utenti apache. Grazie per avermelo suggerito. Non so perché non ci abbia pensato!
oompahloompah,

1
È o+wuna buona scelta qui? Le modifiche non dovrebbero essere limitate a ue g? Altrimenti, che senso ha cercare di mantenere la sicurezza nella directory e nelle sottodirectory?
JWW

61

I bit di autorizzazione che stai cercando sono 0770 e 0660.

  • rw-permessi → 110binario → 6ottale

La proprietà del gruppo può essere ereditata da nuovi file e cartelle creati nella cartella / path / to / parent impostando il bit setgid usando in chmod g+squesto modo:

chmod g+s /path/to/parent

Ora, a tutti i nuovi file e cartelle creati in / path / to / parent verrà assegnato lo stesso gruppo impostato su / path / to / parent.


Le autorizzazioni per i file POSIX non sono ereditate; sono dati dal processo di creazione e combinati con il valore corrente di umask.

Tuttavia, è possibile utilizzare ACL POSIX per raggiungere questo obiettivo. Imposta l' ACL predefinito su una directory:

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

Questo si applicherà setfaclalla directory / path / to / parent, -midentificando gli ACL -dpredefiniti , quelli che verranno applicati agli elementi appena creati. (Maiuscolo Xsignifica che solo le directory riceveranno il +xbit.)

(Se necessario, è possibile aggiungere un u:someuser:rwXo g:someuser:rwX- preferibilmente un gruppo - agli ACL.)


Nota: sui sistemi meno recenti che utilizzano ext3 / ext4, era necessario montare il filesystem con l' aclopzione, altrimenti ignorava tutti gli ACL e non si potevano impostare nuovi.

mount -o remount,acl /

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


5
Grazie per il tempo dedicato a rispondere. Sfortunatamente, sono abbastanza nuovo per tutto questo, e ciò che hai scritto è indistinguibile dal greco per me (scusami per gli SO greci!). Non ho capito gran parte di ciò che hai scritto. Ho un processo web e voglio dare ad Apache la possibilità di creare cartelle e file in una cartella principale in cui solo Apache (il proprietario) e io (il gruppo) abbiamo la possibilità di creare file e cambiare directory. Tutti gli altri sono banditi. questo è tutto ciò che sto cercando di fare. Apache deve essere in grado di creare sottocartelle e archiviare i file al loro interno.
oompahloompah,

Questo non funziona con unzip?
datasn.io

2

Penso che tu stia complicando troppo il problema. Se la directory di livello superiore non è accessibile ad altri, 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 eseguendo la scrittura.

Questi passaggi dovrebbero fare quello che vuoi (sostituisci la directory nei comandi con la directory che vuoi usare):

  • aggiungi umask 027allo script di default di apache /etc/default/apache. Ciò impedirà ad altri di accedere a qualsiasi file o directory creata da apache.
  • esegui chown www-data:www-data directorysulla directory in cui vuoi che Apache sia in grado di scrivere.
  • esegui chmod 750 directorysulla directory in cui vuoi che Apache sia in grado di scrivere.

Consentire ad Apache di scrivere in una directory apre la possibilità di iniettare qualsiasi tipo di malware nel contenuto che stai offrendo. Monitorare il contenuto di questo albero di directory in modo appropriato.

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.