Quando uso setfacl per gestire i permessi che dovrebbero avere i file / directory figli, per qualche motivo i file hanno tutti i permessi tranne quello di esecuzione (“x”).

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl . # file: . # owner: someuser # group: webs # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rw-rw-rw- 1 someuser webs 0 paź 31 13:35 file 

Pensavo avesse qualcosa a che fare con umask, ma cambiarlo in vari modi non dà mai il risultato atteso a meno che non mi manchi qualcosa.

Come può essere risolto?

Risposta

La risposta di Hauke Laging sta cercando di dire:

Qualsiasi programma che crea un file o una directory specifica la modalità (permessi) che vuole che quel file abbia. Questo è quasi sempre hard-coded nel programma C (o qualunque lingua sia usata ) ed è quasi mai direttamente accessibile allutente. Quindi il valore umask e lACL predefinito possono disattivare i bit di autorizzazione, ma non aggiungili.

Il tuo problema è che, mentre mkdir specifica una modalità 777 (rwxrwxrwx), quasi tutti i programmi che creano file specificano 666 (rw-rw-rw-). Ciò include touch, la shell (per il reindirizzamento I / O; ad es. program > file), gli editor (vi, vim, emacs, ecc…), dd, split e così via. Pertanto, non otterrai i permessi di rwxrwxrwx su un file normale immediatamente dopo la creazione (da uno qualsiasi di questi programmi), indipendentemente da ciò che fai con gli ACL; devi creare il file e poi chmod esso.

Ci sono un paio di eccezioni a questa regola:

  • cp e programmi correlati (ad es. cpio, tar e così via) che copiano o altrimenti ri -crea un file, che tenterà di impostare il nuovo file sulla stessa modalità del file originale.
  • I compilatori, che creano file eseguibili binari, specificano una modalità di 777 (almeno, se il la compilazione ha esito positivo), quindi lutente sarà effettivamente in grado di eseguire il programma che ha appena compilato.

Commenti

  • Presumo solo questo si applica alle tradizionali modalità di autorizzazione Unix, che corrispondono a user, group e other Voci ACL. Se hai voci ACL predefinite per utenti o gruppi con nome, ‘ verranno ereditate come specificato, giusto?
  • È una citazione da qualche parte? In tal caso, aggiungi la fonte e, in caso contrario, rimuovi la formattazione delle virgolette.
  • @terdon: Non è una citazione; è (come descritto) una parafrasi della risposta di Hauke Laging . Come dovrebbe essere gestito? (1) Avrei potuto modificare laltra risposta, ma so che le riscritture massicce dei post di altre persone sono disapprovate. (E nota, FWIW, che il mio rappresentante su questo sito era < 2000 nellottobre 2014.) (2) Avrei potuto postarlo come commento sullaltra risposta. O meglio, avrei potuto postarlo come una serie di tre commenti, dato che è > 1200 caratteri. Ma ciò non è coerente con la mia comprensione dello scopo dei commenti. … (Segue)
  • Ehi, ‘ non era un reclamo! Questa è una bella risposta e lho trovata solo perché mi chiedevo la stessa cosa. Vorrei solo rimuovere la formattazione delle virgolette, che ‘ è tutto. Pubblicare una risposta che chiarisca una esistente va bene fintanto che si menziona loriginale (cosa che hai fatto). Sì, laggiunta di un collegamento sarebbe una buona idea, ma ‘ non è un grosso problema. Chiaramente non stai solo copiando la sua risposta nella tua.
  • Non pensavo fosse una lamentela; grazie per la lode. Ma sicuramente ti rendi conto che qualsiasi richiesta da una persona a rombo ha laria di un pugno di ferro in un guanto di velluto. 🙂 P.S. Ho modificato la mia risposta in base al tuo suggerimento.

Risposta

Non dici cosa ” il risultato atteso “è. Presumo che siano i file con i x bit impostati.

Non puoi imporlo come ACL predefinito (come umask) impedisce solo i permessi ma non li imposta da solo. Una nuova directory o file non ottiene più autorizzazioni (per utente, gruppo e altro) rispetto a open() o mkdir() chiamata che lo crea richiede.

Per i file di solito è richiesta solo lautorizzazione di lettura e scrittura. Ma se un compilatore crea un file binario, richiede anche lautorizzazione di esecuzione.

Commenti

  • La tua risposta è piuttosto caotica dal punto di vista inglese. Puoi correggerla? Inoltre ‘ non ne sono sicuro cosa intendi. Dai unocchiata al mio codice. Per le directory funziona sempre.Per i file funziona sempre tranne che per il bit ” x “. Inoltre, se ‘ non è il modo corretto per farlo, allora cosa significa impostare una umask ogni volta che si accede a una directory?

Risposta

$ touch file && chmod a+x file

Le spiegazioni in altre risposte sono superbe. Voglio aggiungere qualcosa che dia effettivamente una risposta alla domanda,

Come può essere risolto?

con codice specifico. @Scott ha spiegato come farlo,

devi creare il file e poi chmod esso.

Il codice nella mia risposta mostra come farlo e lo evidenzia mettendolo per primo.


Altre spiegazioni

Per iniziare, per semplicità, aggiungo semplicemente al touch comando fornito dallOP, in particolare touch file diventa touch file && chmod a+x file.

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rwxrwxrwx 1 someuser webs 0 paź 31 13:35 file 

Qui, imposterò la stessa situazione sulla mia macchina (Cygwin) per dimostrare che funziona, quindi farò lo stesso su una macchina Ubuntu virtuale per mostrare le differenze nella configurazione (Nota che il comando effettivo per risolvere le cose non cambia, voglio semplicemente mostrare alcune differenze che potrebbero emergere con setfacl, oltre a verificare di persona che funzioni .)

$ uname -a | head -n 1 CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ pwd /home/me $ mkdir user294034 $ setfacl -m u::rwx user294034/ $ setfacl -m d:u::rwx user294034/ $ setfacl -m g::rwX user294034/ setfacl: illegal acl entries $ setfacl -m g::rws user294034/ setfacl: illegal acl entries $ # I guess I don"t know how to get the `flags: -s-` on Cygwin $ setfacl -m g::rwx user294034/ $ setfacl -m d:g::rwx user294034/ $ setfacl -m o::rwx user294034/ $ setfacl -m d:o::rwx user294034/ $ cd user294034 $ getfacl . # file: . # owner: me # group: my_group user::rwx group::rwx other:rwx default:user::rwx default:group::rwx default:other:rwx $ # I admitted that I don"t know how to get `# flags: -s-` $ umask 0022 $ umask 0000 $ touch file $ mkdir dir $ # Here, we"ll see the same problem $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rw-rw-rw- 1 me my_group 0 Sep 18 20:31 file $ # Here, we"ll fix the problem $ rm file $ touch file && chmod a+x file $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rwxrwxrwx 1 me my_group 0 Sep 18 20:32 file 

Risposta

Puoi provare questo semplice script che sostituisce i record ACL per ogni file e directory, fornendo i permessi predefiniti specificati.

$ cd ~ $ mkdir .config $ cat <<"EOF" >> .config/dacl user::rwx group::rwx other:r-x default:user::rwx default:group::rwx default:other:r-x EOF $ cat <<"EOF" >> .config/facl user::rw- group::rw- other:r-- default:user::rw- default:group::rw- default:other:r-- EOF $ cd / $ find $1 -type d -exec setfacl -f ~/.config/dacl {} \; $ find $1 -type f -exec setfacl -f ~/.config/facl {} \; $ getfacl . # file: . # owner: MyUser # group: Administrators user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::r-x 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *