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 rsync
untuk 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?
sumber
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 .Jawaban:
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
rsync
komponen dari komponen sisi server.dan
Buat akun "cadangan situs web" khusus di server. Ubah izin file agar dapat dibaca ke akun "cadangan situs web"; Anda dapat menggunakan ACL dan
setfacl
untuk itu. Jangan gunakan akun ini untuk hal lain.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:
Pencadangan akan dilakukan dengan menarik seluruh tarball setiap waktu, yang mungkin tidak efisien dengan situs besar:
Persyaratan kata sandi akan dihapus dengan mengedit sudoers :
sumber
Di host jarak jauh Anda dapat menjalankan daemon rsync
dalam
/etc/rsyncd.conf
file.Ini akan memungkinkan daemon untuk menggunakan
CAP_DAC_OVERRIDE
kapabilitas 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:
sumber
Jika file hanya dapat dibaca oleh
root
Anda harus memilikiroot
akses untuk membuat cadangan file dengan membacanya dari sistem file.rsync
sedang membaca file dari sistem file bukan dari perangkat mentah.Dengan pengecualian
dump
,dd
dan 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.
sumber