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

8

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

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

    
por LUUUUUUUUUUUUU 14.02.2014 / 19:49

1 resposta

13

As permissões geralmente não são propagadas pelo diretório no qual os arquivos estão sendo copiados, em vez disso, as 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. Entender este conceito é a chave para conseguir o que você quer.

Portanto, para copiar um arquivo, mas "descartar" suas permissões atuais, você pode informar cp para "não preservar" usando a opção --no-preserve=all .

Exemplo

Digamos que eu tenha 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, copiando-a cegamente usando cp , recebemos 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 informe cp para "eliminar 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 configuradas para 664, onde elas foram obtidas?

$ umask
0002

Se eu alterei meu umask para outra coisa, podemos repetir esse teste pela terceira vez e ver os efeitos que o umask tem sobre o cp :

não preservado
$ 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 . Foi dizendo a todos os comandos que criam um arquivo para desabilitar os 5 bits inferiores nas permissões ... esses caras: ( ----wxrwx ).

    
por 14.02.2014 / 21:33