rsync Izin ditolak mencadangkan direktori jarak jauh ke mesin lokal saya

11

Saya mendapatkan kesalahan yang disebutkan dalam judul.

Saya menemukan pertanyaan serupa: Jalankan rsync dengan izin root pada mesin jarak jauh . Itu tidak menjawab pertanyaan saya.

Saya adalah admin di server jarak jauh dan saya ingin menggunakan rsyncuntuk membuat cadangan file ke kotak lokal saya. Ini perintah rsync saya:

$ rsync -avz [email protected]:/var/www/ /backups/Sites/MySite/

Sebagian besar berhasil. Login adalah melalui keypair. Saya tidak dan tidak bisa menggunakan kata sandi (EDIT: untuk masuk melalui SSH). Hanya beberapa file tidak akan ditransfer karena izin. Saya tidak ingin mengubah izin itu.

Inilah kesalahannya:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

Saya tidak ingin mengubah izin pada file itu. Itu (dan yang lainnya menyukainya) tidak boleh dibaca (kecuali oleh root).

Ini harus dijalankan dalam pekerjaan cron dan saya lebih suka solusi satu-line sederhana hanya menggunakan perintah rsync. Pilihan berikutnya adalah skrip shell yang dapat saya hubungi dari pekerjaan cron. Dalam kasus apa pun saya tidak bisa login secara manual ke mesin remote dan menjadi root (karena saya akan tidur ketika ini berjalan.

Bagaimana saya bisa menggunakan rsync untuk mencadangkannya ke kotak lokal saya?

MountainX
sumber
dapatkah Anda menunjukkan kepada kami sesuatu seperti ssh [email protected] "cat /var/www/webapp/securestuff/install.php"> localfile?
Florenz Kley
@Florenz Kley: Saya tidak mengerti komentar Anda
MountainX
tunjukkan kepada saya bahwa Anda dapat membaca file dan saya tunjukkan perintah rsync yang bekerja :-). Opsi # 2 dari grawity mungkin adalah taruhan terbaik Anda.
Florenz Kley
@Florenz Kley: ssh [email protected] "echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php"> localfile
MountainX
Saya punya rsync: send_files failed to open "/cygdrive/...": Permission denied (13). Jadi komputer sumber saya adalah Windows cygwin. Situasi yang sedikit berbeda, tetapi untuk anak cucu, solusi saya adalah klik kanan cmd.exe dan Jalankan sebagai administrator .
Bob Stein

Jawaban:

8

Anda tidak dapat membuat cadangan file yang Anda tidak bisa membaca sebaliknya, sehingga hak akses akan harus baik diubah atau ditimpa oleh root .

Pilihan Anda lebih terinci:

  • Ganti izin dengan rsync'ing [email protected]secara langsung. (

  • ... atau dengan mengkonfigurasi sudo di server untuk memungkinkan berjalan tanpa rsynckomponen dari komponen sisi server.

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    dan

    rsync --rsh="ssh [email protected] sudo" -avz /var/www/ /backups/...
    
  • Buat akun "cadangan situs web" khusus di server. Ubah izin file agar dapat dibaca ke akun "cadangan situs web"; Anda dapat menggunakan ACL dan setfacluntuk itu. Jangan gunakan akun ini untuk hal lain.

    rsync -avz [email protected]:/var/www/ /backups/sites/mysite/
    
  • Tulis skrip di server yang akan membuang / var / www / ke tarball terenkripsi. Sekali lagi, ini dapat dilakukan sebagai root (via crontab) atau dengan mengkonfigurasi sudo untuk tidak memerlukan kata sandi untuk skrip itu. Sebagai contoh:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r [email protected]
    

    Pencadangan akan dilakukan dengan menarik seluruh tarball setiap waktu, yang mungkin tidak efisien dengan situs besar:

    ssh [email protected] "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    Persyaratan kata sandi akan dihapus dengan mengedit sudoers :

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    
pengguna1686
sumber
Terima kasih. Saran yang bagus Salah satu mungkin akan bekerja untuk saya. Saya juga mempertimbangkan untuk menggunakan solusi di superuser.com/questions/270911/... jika saya bisa mengetahui potensi efek sampingnya.
MountainX
BTW, maksud saya salah satu dari 2 pilihan terakhir. Masuk sebagai root melalui SSH tidak diizinkan di server.
MountainX
@MountainX: Saya memisahkan "rsync via sudo" sebagai pilihan terpisah. Mungkin berhasil juga.
user1686
Terima kasih! "rsync via sudo" akan menjadi pilihan saya. Saya akan mencoba saran Anda. Sepertinya saya perlu menerapkan ini menggunakan visudo di Ubuntu di server. Saya belum banyak mengotak-atik visudo, tapi Anda sudah memberi saya cukup untuk memulai. Terima kasih lagi.
MountainX
5

Di host jarak jauh Anda dapat menjalankan daemon rsync

root uid

dalam /etc/rsyncd.conffile.

Ini akan memungkinkan daemon untuk menggunakan CAP_DAC_OVERRIDEkapabilitas dan membaca sistem file lokal tanpa mengubah izin / kepemilikan.

Jika Anda hanya perlu membuat cadangan, praktik yang baik adalah mengatur rsync menjadi mode hanya baca:

read only = true

altmas5
sumber
0

Jika file hanya dapat dibaca oleh rootAnda harus memiliki rootakses untuk membuat cadangan file dengan membacanya dari sistem file. rsyncsedang membaca file dari sistem file bukan dari perangkat mentah.

Dengan pengecualian dump, dddan cadangan serupa yang menyalin partisi daripada file, program cadangan membaca file dari sistem file. Utilitas cadangan akan gagal membaca dan membuat cadangan file yang izinnya digunakan oleh pengguna untuk menjalankannya mencegah akses. Ini adalah kasus yang Anda temui.

Dalam kebanyakan kasus, Anda perlu cukup memercayai perangkat lunak cadangan agar dapat membaca semua data Anda. Ini juga berarti Anda harus mempercayai media cadangan Anda dengan semua data Anda. Dalam beberapa kasus, Anda mungkin ingin mengecualikan beberapa file dari cadangan dan menggunakan metode alternatif untuk membuat cadangan kontennya.

EDIT: Saat Anda mengarsipkan data (menyalin semua izin), Anda akan memerlukan akses root di kedua server. Jika Anda melakukan ini sebagai cadangan, Anda mungkin ingin melihat solusi seperti BackupPC yang menggunakan rsync untuk membaca file, tetapi menyimpan file di pohon direktori sendiri.

BillThor
sumber
Ada beberapa cara untuk memberikan akses root rsync. Aku hanya tidak kenal mereka. Yang saya minta adalah bagaimana memberikan akses root rsync untuk membuat cadangan file-file ini. Mungkin saya perlu meninjau kembali jawaban untuk "Jalankan rsync dengan izin root pada mesin jarak jauh" dan lihat apakah saya dapat mengetahuinya ...
MountainX