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.