Comment copier un répertoire auquel root ne peut pas accéder dans un répertoire auquel seul root peut accéder?

11

J'ai un répertoire sur une monture nfs, qui est sur le serveur /home/myname/.rubies

Root ne peut pas accéder à ce répertoire:

[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

J'essaie de copier quelque chose à partir de ce répertoire /optauquel seul root a accès:

[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

Évidemment, je peux faire ce qui suit (et c'est ce que j'ai fait pour le moment):

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

Y a-t-il un moyen de le faire qui n'impliquerait pas de le copier en tant qu'étape intermédiaire ou de modifier les autorisations?

Mitch
la source
cp -Rp /home/mitchell.usher/.rubies /tmp/templocation; sudo mv /tmp/templocation/ruby-2.1.3 /optcela ne fonctionnera-t-il pas? Si non, pourquoi?
MelBurslan
@MelBurslan, c'est ce que j'ai fait, comme indiqué dans la question. Mais disons que c'est un fichier de 50 Go qui ne rentrera nulle part ailleurs sur le système de fichiers, alors je ne pourrais pascp <file> /tmp/tmpfile
Mitch

Réponses:

29

Vous pouvez utiliser tarcomme processus tampon

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

Le premier tars'exécute comme vous et peut donc lire votre répertoire personnel; le second tarcourt sous sudoet peut donc écrire /opt.

Stephen Harris
la source
1
Comment est-ce sur la mémoire? Si j'ai un fichier de 10 Go, cela va-t-il remplir 10 Go de mémoire avant de canaliser et de dé-tarer, ou va-t-il se tarir comme il goudronne?
Mitch
5
Ils fonctionnent en parallèle; un tuyau typique a un tampon de 64 Ko. Rien à craindre :-) unix.stackexchange.com/questions/11946/… pour les détails sur la taille des tuyaux.
Stephen Harris
cpiopeut être utilisé de la même manière.
Toby Speight
Si vous avez GNU tar, vous pouvez enregistrer le sous-shell en utilisant son -Cargument pour changer de répertoire (ie tar cf - ruby-2.1.3 | sudo tar -C /opt xpf -). Il peut être utile de mentionner que vous souhaitez vous assurer que sudovotre mot de passe ne vous sera pas demandé (par exemple via une sudoersentrée ou des informations d'identification mises en cache).
Toby Speight
6

Vous pouvez utiliser rsyncou scppour copier à partir user@localhostdu répertoire local.

Exemple pour rsync:

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

Vous pourriez alternativement

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

si vous laissez directement root accéder à localhost (non recommandé; nous préférons normalement que l'accès root soit via sudo).

Toby Speight
la source
-4

Vous pouvez faire une deuxième entrée dans le FAT (ou autre).
Je fais cela pour mon HOSTSdossier. J'ai un lien dans un répertoire accessible en écriture qui fait référence au fichier et il a des autorisations différentes, donc je /Hosts/HOSTSpeux le modifier facilement, et les changements sont mis dans les deux (c'est-à-dire "l'un") fichier (s). C'est 2 entrées pour 1 fichier. Je ne me souviens pas de la commande, désolé.

Pour vous, vous créez un lien vers /opttous les fichiers de .rubies, et lorsque vous modifiez quelque chose dans /opt, c'est le même fichier que dans .rubies.

Ingénieur
la source
4
C'est faux et trompeur, en plus de ne pas répondre à la question.
Wildcard
C'est faux car nous avons affaire à un système de fichiers différent. Le répondeur faisait évidemment référence à des liaisons matérielles qui fonctionnent comme indiqué, bien qu'elles ne s'appliquent pas à cette question.
Julie Pelletier
Merci Wildcard, j'avais une réplique dans ma réponse concernant l'obtention d'un tas de flack mais il a été édité lorsque Michael l'a amélioré. : p
Ingénieur