Como copiar um diretório cujo root não pode acessar um diretório que somente o root pode acessar?

11

Eu tenho um diretório em uma montagem nfs, que no servidor está em /home/myname/.rubies

A raiz não pode acessar este diretório:

[mitchell.usher@server ~]$ stat /home/mitchell.usher/.rubies
  File: '/home/mitchell.usher/.rubies'
  Size: 4096            Blocks: 8          IO Block: 32768  directory
Device: 15h/21d Inode: 245910      Links: 3
Access: (0755/drwxr-xr-x)  Uid: (  970/mitchell.usher)   Gid: (  100/   users)
Access: 2016-08-22 15:06:15.000000000 +0000
Modify: 2016-08-22 14:55:00.000000000 +0000
Change: 2016-08-22 14:55:00.000000000 +0000

[mitchell.usher@server ~]$ sudo !!
sudo stat /home/mitchell.usher/.rubies
stat: cannot stat '/home/mitchell.usher/.rubies': Permission denied

Estou tentando copiar algo desse diretório para /opt , ao qual somente o root tem acesso:

[mitchell.usher@server ~]$ cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot create directory '/opt/ruby-2.1.3': Permission denied

[mitchell.usher@server ~]$ sudo !!
sudo cp .rubies/ruby-2.1.3/ -r /opt
cp: cannot stat '.rubies/ruby-2.1.3/': Permission denied

Obviamente eu posso fazer o seguinte (e é o que eu fiz por enquanto):

[mitchell.usher@server ~]$ cp -r .rubies/ruby-2.1.3/ /tmp/
[mitchell.usher@server ~]$ sudo cp -r /tmp/ruby-2.1.3/ /opt/

Existe alguma maneira de fazer isso que não envolva copiá-lo como uma etapa intermediária ou alterar permissões?

    
por Mitch 22.08.2016 / 17:21

3 respostas

29

Você pode usar tar como um processo de buffer

cd .rubies
tar cf - ruby-2.1.3 | ( cd /opt && sudo tar xvfp - )

O primeiro tar é executado como você e, portanto, pode ler seu diretório pessoal; o segundo tar é executado em sudo e, portanto, pode gravar em /opt .

    
por 22.08.2016 / 17:39
6

Você pode usar rsync ou scp para copiar de user@localhost para o diretório local.

Exemplo para rsync :

# rsync "$real_user@localhost:$PWD/.rubies/ruby-2.1.3" /opt

Você poderia alternativamente

$ rsync .rubies/ruby-2.1.3 "root@localhost:/opt"

se você permitir roothost localhost diretamente (não recomendado; normalmente preferimos que o acesso root seja via sudo ).

    
por 22.08.2016 / 18:04
-4

Você pode fazer uma segunda entrada no FAT (ou qualquer outro).
Eu faço isso para o meu arquivo HOSTS . Eu tenho um link em um diretório gravável que se refere ao arquivo e tem permissões diferentes, então eu tenho /Hosts/HOSTS que eu posso modificar facilmente, e as alterações são colocadas em ambos (ou seja, "o um") arquivo (s). São 2 entradas para 1 arquivo. Não me lembro do comando, desculpe.

Para você, você cria um link para /opt para todos os arquivos em .rubies e, quando altera algo em /opt , é o mesmo arquivo de .rubies .

    
por 22.08.2016 / 21:44