Lorsque jutilise setfacl pour gérer les autorisations que doivent avoir les fichiers / répertoires enfants, pour une raison quelconque, les fichiers ont toutes les autorisations sauf celle dexécution (« 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
Je pensais que cela avait quelque chose à voir avec umask, mais le changer de différentes manières ne donne jamais le résultat attendu à moins que je ne manque quelque chose.
Comment cela peut-il être corrigé?
Réponse
La réponse de Hauke Laging essaie de dire:
Tout programme qui crée un fichier ou un répertoire spécifie le mode (autorisations) quil souhaite que ce fichier ait. Ceci est presque toujours codé en dur dans le programme C (ou dans le langage utilisé ) et nest presque jamais directement accessible à lutilisateur. Ensuite, la valeur umask
et lACL par défaut peuvent désactiver les bits dautorisation, mais pas ajoutez-les.
Votre problème est que, alors que mkdir
spécifie un mode de 777 (rwxrwxrwx
), presque tous les programmes qui créent des fichiers spécifient 666 (rw-rw-rw-
). Cela inclut touch
, le shell (pour la redirection dE / S; par exemple, program > file
), les éditeurs (vi
, vim
, emacs
, etc…), dd
, split
, et ainsi de suite. Par conséquent, vous nobtiendrez pas les autorisations de rwxrwxrwx
sur un fichier brut immédiatement après sa création (par lun de ces programmes), peu importe ce que vous faites avec les ACL; vous devez créer le fichier, puis chmod
.
Il existe quelques exceptions à cette règle:
-
cp
et les programmes associés (par exemple,cpio
,tar
, etc.) qui copient ou re -créer un fichier, qui (tentera de) définir le nouveau fichier sur le même mode que le fichier dorigine. - Les compilateurs, qui créent des fichiers exécutables binaires, spécifient un mode de 777 (au moins, si le la compilation réussit), de sorte que lutilisateur pourra réellement exécuter le programme quil vient de compiler.
Commentaires
Réponse
Vous ne « mentionnez pas ce que » résultat attendu « est. Je suppose que ce sont les fichiers ayant les bits x
définis.
Vous ne pouvez pas appliquer cela par défaut ACL (comme umask) empêche simplement les autorisations mais ne les définit pas lui-même. Un nouveau répertoire ou fichier nobtient pas plus dautorisations (pour lutilisateur, le groupe et autre) que open()
ou mkdir()
qui le crée demande.
Pour les fichiers, seules les autorisations de lecture et décriture sont demandées. Mais si un compilateur crée un fichier binaire, il demande également lautorisation dexécution.
Commentaires
- Votre réponse est assez chaotique du point de vue anglais. Pouvez-vous la corriger? De plus, je ‘ ne suis pas sûr ce que vous voulez dire. Jetez un œil à mon code. Pour les répertoires, cela fonctionne toujours.Pour les fichiers, cela fonctionne toujours sauf le bit » x « . De plus, si ‘ nest pas la bonne façon de procéder, quest-ce que cest que de définir un umask à chaque fois quun répertoire est accédé?
Réponse
$ touch file && chmod a+x file
Les explications dans les autres réponses sont superbes. Je veux ajouter quelque chose qui donne réellement une réponse à la question,
Comment cela peut-il être corrigé?
avec un code spécifique. @Scott a indiqué comment faire cela,
vous devez créer le fichier, puis
chmod
.
Le code de ma réponse montre comment le faire et le met en évidence en le mettant en premier.
Plus dexplications
Pour commencer, pour simplifier, jajoute simplement au touch
commande donnée par lOP, spécifiquement touch file
devient 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
Ici, je vais configurer la même situation sur ma machine (Cygwin) pour montrer que cela fonctionne, puis faire de même sur une boîte virtuelle Ubuntu pour montrer les différences dans la configuration . (Notez que la commande réelle pour réparer les choses ne change pas, je veux simplement montrer quelques différences qui pourraient apparaître avec setfacl
, ainsi que pour vérifier moi-même que cela fonctionne .)
$ 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
Réponse
Vous pouvez essayer ce simple script remplace les enregistrements ACL pour chaque fichier et répertoire, en donnant les permissions par défaut spécifiées.
$ 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
etother
Entrées ACL. Si vous avez des entrées ACL par défaut pour des utilisateurs ou des groupes nommés, elles ‘ seront héritées comme spécifié, nest-ce pas?