rsync İzni uzaktaki bir dizini yerel makineme yedekledi


11

Başlıkta belirtilen hatayı alıyorum.

Benzer soruyu buldum: Uzak makinede root izniyle rsync'i çalıştırın . Bu sorumu cevaplamıyor.

Uzak sunucudaki yöneticiyim ve rsyncdosyaları yerel kutuma yedeklemek için kullanmak istiyorum . İşte benim rsync komutu:

$ rsync -avz me@myserver.com:/var/www/ /backups/Sites/MySite/

Çoğunlukla çalışır. Giriş bir anahtar çifti ile yapılır. Parola kullanmıyorum ve kullanamıyorum (EDIT: SSH üzerinden oturum açmak için). Yalnızca birkaç dosya izinler nedeniyle aktarılmaz. Bu izinleri değiştirmek istemiyorum.

İşte hata:

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

Ben do not o dosya izinlerini değiştirmek istiyorum. O (ve bunun gibi diğerleri) okunamaz (kök hariç).

Bu bir cron iş çalıştırmak gerekir ve ben sadece rsync komutunu kullanarak basit bir tek satırlık çözüm tercih ederim. Bir sonraki seçim, cron işinden arayabileceğim bir kabuk betiği olurdu. Hiçbir durumda uzak makineye manuel olarak giriş yapıp root olabilirim (çünkü bu çalıştığında uyuyacağım.

Yerel kutuma yedeklemek için rsync'i nasıl kullanabilirim?


Bize ssh me@myserver.com "cat /var/www/webapp/securestuff/install.php"> localfile gibi bir şey gösterebilir misiniz?
Florenz Kley

@Florenz Kley: Yorumunuzu anlamıyorum
MountainX

bana dosyayı okuyabildiğini göster ve sana çalışan bir rsync komutu göstereceğim :-). Grawity'den Seçenek # 2 muhtemelen en iyi bahistir.
Florenz Kley

@Florenz Kley: ssh me@myserver.com "echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php"> yerel dosya
MountainX

Anladım rsync: send_files failed to open "/cygdrive/...": Permission denied (13). Yani kaynak bilgisayarım Windows cygwin'di. Biraz farklı bir durum, ancak gelecek nesiller için benim çözümüm cmd.exe'ye sağ tıklayıp Yönetici olarak çalıştır .
Bob Stein

Yanıtlar:


8

İzinler, böylece aksi takdirde okuyamaz bir dosya yedeklemek olamaz edecek ya lazım değişti ya root ile değiştirileceğini .

Seçenekleriniz daha ayrıntılı:

  • root@myserver.comDoğrudan rsync'ing yaparak izinleri geçersiz kılın . (

  • ... veya sunucu tarafında sudo'yu , rsyncsunucu tarafı bileşeninin şifresiz çalışmasına izin verecek şekilde yapılandırarak .

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

    ve

    rsync --rsh="ssh me@myserver.com sudo" -avz /var/www/ /backups/...
    
  • Sunucuda özel bir "web sitesi yedekleme" hesabı oluşturun. Dosyaların izinlerini "website-backup" hesabına okunacak şekilde değiştirin; ACL'ler kullanabilirsiniz ve bunun setfacliçin. Bu hesabı başka hiçbir şey için kullanmayın.

    rsync -avz website-backup@myserver.com:/var/www/ /backups/sites/mysite/
    
  • Sunucuya, / var / www / komutunu şifreli bir tarball'a dökecek bir komut dosyası yazın. Yine, bu root (crontab aracılığıyla) olarak veya sudo'nun bu komut dosyası için bir şifre gerektirmeyecek şekilde yapılandırılmasıyla yapılabilir . Örneğin:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r mountainx@example.com
    

    Yedekleme, her seferinde tüm tarball'ı çekerek yapılır, bu da büyük sitelerle verimsiz olabilir:

    ssh me@myserver.com "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    Parola gereksinimi sudoers düzenleyerek kaldırılır :

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    

Teşekkürler. İyi öneriler. İkisi de muhtemelen benim için çalışacak. Ayrıca , potansiyel yan etkilerini bulabilirsem bu çözümü superuser.com/questions/270911/… adresinden kullanmayı düşünüyorum .
MountainX

BTW, son 2 seçimlerden birini kastetmiştim. Sunucuda SSH üzerinden root olarak oturum açmaya izin verilmiyor.
MountainX

@MountainX: Ayrı bir seçenek olarak "rudo sudo üzerinden sudo" yu ayırdım. Aynı zamanda işe yarayabilir.
user1686 7:12

Teşekkürler! "rsync via sudo" benim tercih ettiğim tercih. Önerinizi deneyeceğim. Bu sunucuda Ubuntu üzerinde visudo kullanarak uygulamak gerekiyor gibi görünüyor. Visudo ile fazla uğraşmadım, ama bana başlamak için yeterince şey verdin. Tekrar teşekkürler.
MountainX

5

Uzak ana bilgisayarda rsync arka plan programı ile

uid kökü

içinde /etc/rsyncd.confdosyaya.

Bu, arka plan programının CAP_DAC_OVERRIDEizinleri kullanmasına ve izinleri / sahipliği değiştirmeden yerel dosya sistemini okumasına izin verir.

Sadece bir yedekleme yapmanız gerekiyorsa, rsync'i salt okunur moda ayarlamak iyi bir uygulamadır:

salt okunur = doğru


0

Dosyalar yalnızca okunabilirse , dosya sisteminden okuyarak dosyayı yedekleme erişimine rootsahip olmanız gerekir root. rsyncdosyaları ham cihazdan değil dosya sisteminden okuyor.

Hariç olmak üzere dump, ddve dosyalar, yedekleme programları dosya sisteminden dosyalarını okumak yerine o bölümü kopyalamak benzer yedeklemeler. Yedekleme yardımcı programları, onları çalıştırmak için kullanılan kullanıcı kimliğinin izinlerinin erişimi engellediği dosyaları okuyamaz ve yedekleyemez. Bu, karşılaştığınız durumdur.

Çoğu durumda yedekleme yazılımınıza tüm verilerinizi okuyabilmesi için yeterince güvenmeniz gerekir. Bu ayrıca yedekleme ortamınıza tüm verilerinizle güvenmeniz gerektiği anlamına gelir. Bazı durumlarda, bazı dosyaları yedeklemenin dışında bırakmak ve içeriğini yedeklemek için alternatif bir yöntem kullanmak isteyebilirsiniz.

EDIT: Verileri arşivlerken (tüm izinleri kopyalarken) her iki sunucuda da kök erişimine ihtiyacınız olacaktır. Bunu yedekleme olarak yapıyorsanız , dosyaları okumak için rsync kullanan ancak dosyaları kendi dizin ağacında saklayan BackupPC gibi bir çözüme bakmak isteyebilirsiniz .


Rsync root erişimi vermenin yolları vardır. Onları tanımıyorum. Sorduğum şey, bu dosyaları yedeklemek için rsync root erişimine nasıl izin vereceğim. Belki de "Uzak makinede root izniyle rsync'i çalıştır" cevabını tekrar gözden geçirmem ve çözebileceğimi görmem gerek ...
MountainX
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.