Bagaimana cara menyalin direktori yang root tidak dapat mengakses ke direktori yang hanya diakses oleh root?

11

Saya memiliki direktori pada mount nfs, yang pada servernya ada di /home/myname/.rubies

Root tidak dapat mengakses direktori ini:

[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

Saya mencoba menyalin sesuatu dari dalam direktori /optyang hanya dapat diakses oleh root:

[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

Jelas saya dapat melakukan hal berikut (dan apa yang telah saya lakukan untuk saat ini):

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

Apakah ada cara untuk melakukan ini yang tidak melibatkan menyalinnya sebagai langkah perantara atau mengubah izin?

Mitch
sumber
cp -Rp /home/mitchell.usher/.rubies /tmp/templocation; sudo mv /tmp/templocation/ruby-2.1.3 /optApakah ini tidak akan berhasil? Jika tidak, mengapa?
MelBurslan
@MelBurslan itulah yang saya lakukan, sebagaimana dinyatakan dalam pertanyaan. Tapi katakanlah itu adalah file 50 GB yang tidak akan muat di tempat lain di sistem file, maka saya tidak akan bisacp <file> /tmp/tmpfile
Mitch

Jawaban:

29

Anda dapat menggunakannya tarsebagai proses buffer

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

Yang pertama tarberjalan saat Anda dan dapat membaca direktori home Anda; yang kedua tarberjalan di bawah sudodan bisa menulis /opt.

Stephen Harris
sumber
1
Bagaimana ini di memori? Jika saya memiliki file 10 GB, apakah itu akan mengisi 10 GB memori sebelum di-pipe dan un-tars, atau akankah un-tar seperti ini di tars?
Mitch
5
Mereka berjalan secara paralel; pipa khas memiliki buffer 64Kbyte. Tidak ada yang perlu dikhawatirkan :-) unix.stackexchange.com/questions/11946/… untuk detail ukuran pipa.
Stephen Harris
cpiodapat digunakan dengan cara yang hampir sama.
Toby Speight
Jika Anda memiliki tar GNU, Anda dapat menyimpan subkulit dengan menggunakan -Cargumennya untuk mengubah direktori (yaitu tar cf - ruby-2.1.3 | sudo tar -C /opt xpf -). Mungkin perlu disebutkan bahwa Anda ingin memastikan bahwa sudotidak akan menanyakan kata sandi Anda (misalnya melalui sudoersentri atau kredensial yang di-cache).
Toby Speight
6

Anda dapat menggunakan rsyncatau scpmenyalin dari user@localhostke direktori lokal.

Contoh untuk rsync:

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

Anda bisa juga

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

jika Anda membiarkan akses root localhost secara langsung (tidak disarankan; kami biasanya lebih memilih akses root via sudo).

Toby Speight
sumber
-4

Anda dapat membuat entri kedua di FAT (atau apa pun).
Saya melakukan ini untuk HOSTSfile saya . Saya memiliki tautan dalam direktori yang dapat ditulisi yang merujuk ke file dan memiliki izin yang berbeda, jadi saya memiliki /Hosts/HOSTSyang dapat saya modifikasi dengan mudah, dan perubahannya dimasukkan dalam file (yaitu "satu"). Ini 2 entri untuk 1 file. Saya tidak ingat perintahnya, maaf.

Untuk Anda, Anda membuat tautan ke /optsemua file di dalamnya .rubies, dan ketika Anda mengubah apa pun di /optdalamnya, itu adalah file yang sama dengan di .rubies.

Insinyur
sumber
4
Ini salah dan menyesatkan, selain tidak menjawab pertanyaan.
Wildcard
Itu hanya salah karena kita berurusan dengan sistem file yang berbeda. Penjawabnya jelas mengacu pada tautan keras yang beroperasi seperti yang disebutkan, meskipun tidak berlaku untuk pertanyaan ini.
Julie Pelletier
Terima kasih Wildcard, saya punya garis dalam jawaban saya tentang mendapatkan sekelompok kesalahan tetapi diedit ketika Michael memperbaikinya. : p
Engineer