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 me@myserver.com:/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?


dapatkah Anda menunjukkan kepada kami sesuatu seperti ssh me@myserver.com "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 me@myserver.com "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 root@myserver.comsecara 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 me@myserver.com 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 website-backup@myserver.com:/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 mountainx@example.com
    

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

    ssh me@myserver.com "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
    

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


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.