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).
setfaclcommande avez-vous essayé? Quelle a été sa sortie?