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 umask
est 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 cp
de "ne pas conserver" en utilisant le --no-preserve=all
commutateur.
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, cp
nous 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 cp
de "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 umask
pour quelque chose d'autre, nous pouvons répéter ce test une troisième fois et voir les effets qui umask
ont 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
).
setfacl
commande avez-vous essayé? Quelle a été sa sortie?