Arquivo que herda a permissão do diretório em que é copiado?

9

Eu tenho arquivos criados no meu diretório pessoal com apenas permissão de leitura do usuário ( r-- --- ---). Quero copiar este arquivo para outro diretório /etc/test/que possua a permissão de pasta 744 ( rwx r-- r--). Preciso permitir que o arquivo que estou copiando herde a permissão da pasta na qual ele é copiado, porque até agora, quando eu o copio, as permissões dos arquivos ainda são as mesmas ( r-- --- ---). Eu tentei o comando setfacl, mas não funcionou? Por favor ajude.

PS. Não posso apenas chmod -r /etc/test/porque existem muitos arquivos que serão copiados para esta pasta ao longo do tempo e não quero executar o comando chmod toda vez que um arquivo for copiado.

LUUUUUUUUUUUUU
fonte
Que setfaclcomando você tentou? Qual foi a sua saída?
Mikel
setfacl -Rm d: u :: rwx, d: g :: r, d: o :: r / etc / test. Não houve saída, apenas aceitou o comando.
LUUUUUUUUUUUUU 14/02
Como você está copiando o arquivo? O que acontece se você usar /bin/cpsem opções?
Mikel
O comando que eu uso é sudo cp / home / file / etc / test / file. Eu tentei usar o / bin / cp agora também sem resultado diferente
Luuuuuuuuuuuuu

Respostas:

14

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 cppara "não preservar" usando o --no-preserve=allcomutador.

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 cppara "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 umaskpara outra coisa, podemos repetir esse teste uma terceira vez e ver os efeitos que isso umasktem 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).

slm
fonte
A --no-preservebandeira não é padrão, presumivelmente um GNUism.
21414 vonbrand
Correto, obrigado, eu quis dizer que no A.
slm
no espírito do dia dos namorados eu te dou um beijo virtual, funciona! OBRIGADO!
LUUUUUUUUUUUUU 14/02