Fichier héritant de l'autorisation du répertoire dans lequel il est copié?

9

J'ai des fichiers créés dans mon répertoire personnel avec seulement la permission de lecture de l'utilisateur ( r-- --- ---). Je veux copier ce fichier dans un autre répertoire /etc/test/qui a l'autorisation de dossier de 744 ( rwx r-- r--). Je dois autoriser le fichier que je copie à hériter de l'autorisation du dossier dans lequel il est copié car jusqu'à présent, lorsque je le copie, les autorisations de fichiers sont toujours les mêmes ( r-- --- ---). J'ai essayé la commande setfacl, mais cela n'a pas fonctionné? Veuillez aider.

PS. Je ne peux pas simplement chmod -r /etc/test/parce qu'il y a beaucoup de fichiers qui seront copiés dans ce dossier au fil du temps et je ne veux pas exécuter la commande chmod chaque fois qu'un fichier est copié.

LUUUUUUUUUUUUUU
la source
Quelle setfaclcommande avez-vous essayé? Quelle a été sa sortie?
Mikel
setfacl -Rm d: u :: rwx, d: g :: r, d: o :: r / etc / test. Il n'y avait aucune sortie, il a juste accepté la commande.
LUUUUUUUUUUUUUU
Comment copiez-vous le fichier? Que se passe-t-il si vous utilisez /bin/cpsans options?
Mikel
La commande que j'utilise est sudo cp / home / file / etc / test / file. J'ai aussi essayé d'utiliser / bin / cp sans résultat différent
LUUUUUUUUUUUUUU

Réponses:

14

Les autorisations ne sont généralement pas propagées par le répertoire dans lequel les fichiers sont copiés, mais les nouvelles autorisations sont plutôt contrôlées par l'utilisateur umask. Cependant, lorsque vous copiez un fichier d'un emplacement à un autre, c'est un peu un cas spécial où l'utilisateur umaskest essentiellement ignoré et les autorisations existantes sur le fichier sont préservées. Comprendre ce concept est la clé pour obtenir ce que vous voulez.

Donc, pour copier un fichier mais "supprimer" ses autorisations actuelles, vous pouvez dire cpde "ne pas conserver" en utilisant le --no-preserve=allcommutateur.

Exemple

Disons que j'ai le fichier suivant comme vous.

$ mkdir -m 744 somedir

$ touch afile
$ chmod 400 afile 

$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile

Et comme vous l'avez confirmé, si nous le copions simplement à l'aveugle, cpnous obtenons ceci:

$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile

Maintenant, répétons cela, mais cette fois, dites cpde "supprimer les autorisations":

$ rm -f somedir/afile 

$ cp --no-preserve=all afile somedir/

$ ls -l somedir/
total 0
-rw-rw-r--. 1 saml saml 0 Feb 14 15:21 afile

Ainsi, le fichier copié a maintenant ses autorisations définies sur 664, où les a-t-il obtenues?

$ umask
0002

Si j'ai changé mon umaskpour quelque chose d'autre, nous pouvons répéter ce test une troisième fois et voir les effets qui umaskont sur le non préservé cp:

$ umask 037
$ rm somedir/afile 

$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-r-----. 1 saml saml 0 Feb 14 15:29 afile

Notez que les autorisations ne sont plus 664, mais 640? Cela a été dicté par le umask. Il disait à toutes les commandes qui créent un fichier de désactiver les 5 bits inférieurs dans les autorisations ... ces gars-là: ( ----wxrwx).

slm
la source
Le --no-preservedrapeau n'est pas standard, probablement un GNUisme.
vonbrand
Exact, merci je voulais dire que dans le A.
slm
dans l'esprit de la Saint Valentin je vous donne un bisou virtuel, ça marche! MERCI!
LUUUUUUUUUUUUUU