Los permisos generalmente no se propagan por el directorio en el que se copian los archivos, sino que los permisos nuevos son controlados por el usuario umask
. Sin embargo, cuando copia un archivo de una ubicación a otra, se trata de un caso especial en el que umask
se ignora esencialmente al usuario y se conservan los permisos existentes en el archivo. Comprender este concepto es la clave para obtener lo que quieres.
Por lo tanto, para copiar un archivo pero "quitar" sus permisos actuales, puede indicar cp
que "no conservar" con el --no-preserve=all
interruptor.
Ejemplo
Digamos que tengo el siguiente archivo como tú.
$ mkdir -m 744 somedir
$ touch afile
$ chmod 400 afile
$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Y como has confirmado si solo lo copiamos ciegamente usando cp
, obtenemos esto:
$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Ahora repitamos esto, pero esta vez le pedimos cp
que "quite los permisos":
$ 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
Entonces, el archivo copiado ahora tiene sus permisos establecidos en 664, ¿de dónde los obtuvo?
$ umask
0002
Si cambié mi umask
a otra cosa, podemos repetir esta prueba por tercera vez y ver los efectos que umask
tiene sobre los no conservados 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
Observe que los permisos ya no son 664, ¿pero son 640? Eso fue dictado por el umask
. Le estaba diciendo a cualquier comando que creara un archivo que deshabilitara los 5 bits inferiores en los permisos ... estos chicos: ( ----wxrwx
).
setfacl
comando intentaste? ¿Cuál fue su salida?