Geralmente, as permissões não são propagadas pelo diretório em que os arquivos estão sendo copiados, mas novas permissões são controladas pelo usuário umask
. No entanto, quando você copia um arquivo de um local para outro, é um caso especial, em que o usuário umask
é essencialmente ignorado e as permissões existentes no arquivo são preservadas. Compreender esse conceito é a chave para conseguir o que deseja.
Portanto, para copiar um arquivo, mas "largar" suas permissões atuais, você pode dizer cp
para "não preservar" usando o --no-preserve=all
comutador.
Exemplo
Digamos que tenho o seguinte arquivo como você.
$ mkdir -m 744 somedir
$ touch afile
$ chmod 400 afile
$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
E, como você confirmou, se apenas o copiarmos cegamente usando cp
, obtemos o seguinte:
$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Agora vamos repetir isso, mas desta vez diga cp
para "remover permissões":
$ 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
Portanto, o arquivo copiado agora tem suas permissões definidas para 664, onde as obteve?
$ umask
0002
Se eu mudei meu umask
para outra coisa, podemos repetir esse teste uma terceira vez e ver os efeitos que isso umask
tem sobre os não preservados 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 as permissões não são mais 664, mas são 640? Isso foi ditado pelo umask
. Estava dizendo a todos os comandos que criam um arquivo para desativar os 5 bits inferiores nas permissões ... esses caras: ( ----wxrwx
).
setfacl
comando você tentou? Qual foi a sua saída?