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
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
user
,group
eother
Voci ACL. Se hai voci ACL predefinite per utenti o gruppi con nome, ‘ verranno ereditate come specificato, giusto?