Come copiare una directory a cui root non può accedere a una directory a cui solo root può accedere?


11

Ho una directory su un mount nfs, che sul server è su /home/myname/.rubies

La radice non può accedere a questa directory:

[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

Sto tentando di copiare qualcosa dall'interno di quella directory a /optcui solo root ha accesso a:

[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

Ovviamente posso fare quanto segue (ed è quello che ho fatto per il momento):

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

C'è un modo per farlo che non implicherebbe la sua copia come passaggio intermedio o la modifica delle autorizzazioni?


cp -Rp /home/mitchell.usher/.rubies /tmp/templocation; sudo mv /tmp/templocation/ruby-2.1.3 /optquesto non funzionerà? Se no, perché?
MelBurslan,

@MelBurslan è quello che ho fatto, come indicato nella domanda. Ma supponiamo che sia un file da 50 GB che non si adatta a nessun altro file system, quindi non sarei in grado di farlocp <file> /tmp/tmpfile
Mitch

Risposte:


29

È possibile utilizzare tarcome processo buffer

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

Il primo tarfunziona come te e così puoi leggere la tua home directory; il secondo tarscorre sotto sudoe quindi può scrivere a /opt.


1
Come va in memoria? Se ho un file da 10 GB, riempirà 10 GB di memoria prima che venga convogliata e non tara, oppure verrà decompressa mentre si tara?
Mitch,

5
Corrono in parallelo; una pipe tipica ha un buffer di 64 KB. Niente di cui preoccuparsi :-) unix.stackexchange.com/questions/11946/… per i dettagli sulla dimensione del tubo.
Stephen Harris,


cpiopuò essere usato più o meno allo stesso modo.
Toby Speight,

Se si dispone di tar GNU, è possibile salvare la subshell usando il suo -Cargomento per cambiare directory (es tar cf - ruby-2.1.3 | sudo tar -C /opt xpf -.). Vale la pena ricordare che si desidera garantire che sudonon verrà richiesta la password (ad esempio tramite una sudoersvoce o le credenziali memorizzate nella cache).
Toby Speight,

6

È possibile utilizzare rsynco scpcopiare dalla user@localhostdirectory locale.

Esempio per rsync:

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

Puoi alternativamente

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

se si consente l'accesso root localhost direttamente (non consigliato; normalmente si preferisce l'accesso root tramite sudo).


-4

È possibile effettuare una seconda voce nel FAT (o qualsiasi altra cosa).
Lo faccio per il mio HOSTSfile. Ho un collegamento in una directory scrivibile che fa riferimento al file e ha autorizzazioni diverse, quindi /Hosts/HOSTSposso modificarlo facilmente e le modifiche vengono inserite in entrambi i file (ovvero "l'uno"). Sono 2 voci per 1 file. Non ricordo il comando, scusa.

Per te, fai un link /optper tutti i file in .rubies, e quando cambi qualcosa in /opt, è lo stesso file di in .rubies.


4
Questo è falso e fuorviante, oltre a non rispondere alla domanda.
Wildcard il

È falso solo perché abbiamo a che fare con un file system diverso. Il risponditore si riferiva ovviamente ai collegamenti reali che funzionano come indicato, sebbene non applicabile per questa domanda.
Julie Pelletier,

Grazie Wildcard, ho avuto una linea nella mia risposta su come ottenere un sacco di flack ma è stato eliminato quando Michael lo ha migliorato. : p
Ingegnere
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.