การอนุญาต rsync ปฏิเสธการสำรองข้อมูลไดเรกทอรีระยะไกลไปยังเครื่องท้องถิ่นของฉัน


11

ฉันพบข้อผิดพลาดในชื่อเรื่อง

ผมพบว่าคำถามที่คล้ายกันนี้เรียก rsync ที่มีสิทธิ์รากบนเครื่องระยะไกล ไม่ตอบคำถามของฉัน

ฉันเป็นผู้ดูแลระบบบนเซิร์ฟเวอร์ระยะไกลและฉันต้องการใช้rsyncในการสำรองไฟล์ไปยังกล่องในเครื่องของฉัน นี่คือคำสั่ง rsync ของฉัน:

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

มันใช้งานได้เป็นส่วนใหญ่ เข้าสู่ระบบผ่านทางคู่กุญแจ ฉันทำไม่ได้และไม่สามารถใช้รหัสผ่าน (แก้ไข: เพื่อเข้าสู่ระบบผ่าน SSH) ไฟล์เพียงไม่กี่ไฟล์จะไม่ถ่ายโอนเนื่องจากการอนุญาต ฉันไม่ต้องการเปลี่ยนการอนุญาตเหล่านั้น

นี่คือข้อผิดพลาด:

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

ฉันไม่ต้องการเปลี่ยนการอนุญาตในไฟล์นั้น มัน (และอื่น ๆ เช่นมัน) ไม่ควรอ่านได้ (ยกเว้นตามรูท)

สิ่งนี้ต้องทำงานใน cron และฉันชอบวิธีแก้ปัญหาแบบบรรทัดเดียวโดยใช้คำสั่ง rsync เท่านั้น ตัวเลือกถัดไปคือเชลล์สคริปต์ที่ฉันสามารถโทรได้จากงาน cron ไม่ว่าในกรณีใดฉันสามารถล็อกอินด้วยตนเองในเครื่องระยะไกลและกลายเป็นรูท (เพราะฉันจะนอนเมื่อทำงานนี้

ฉันจะใช้ rsync เพื่อสำรองข้อมูลในกล่องท้องถิ่นของฉันได้อย่างไร


คุณช่วยกรุณาแสดงให้เราเห็นบางสิ่งเช่น ssh me@myserver.com "cat /var/www/webapp/securestuff/install.php"> localfile?
Florenz Kley

@Florenz Kley: ฉันไม่เข้าใจความคิดเห็นของคุณ
MountainX

แสดงให้ฉันเห็นว่าคุณสามารถอ่านไฟล์และฉันจะแสดงคำสั่ง rsync ที่ใช้งานได้ :-) ตัวเลือก # 2 จาก grawity น่าจะเป็นทางออกที่ดีที่สุดของคุณ
Florenz Kley

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

rsync: send_files failed to open "/cygdrive/...": Permission denied (13)ผมได้ ดังนั้นคอมพิวเตอร์ต้นทางของฉันคือ Windows cygwin เล็กน้อยสถานการณ์ที่แตกต่างกัน แต่สำหรับลูกหลาน, การแก้ปัญหาของฉันคือการคลิกขวา cmd.exe และเรียกใช้ในฐานะผู้ดูแลระบบ
Bob Stein

คำตอบ:


8

คุณไม่สามารถสำรองไฟล์ที่คุณไม่สามารถอ่านเป็นอย่างอื่นได้ดังนั้นการอนุญาตจะต้องถูกเปลี่ยนหรือลบล้างโดยรู

ตัวเลือกของคุณในรายละเอียดเพิ่มเติม:

  • แทนที่สิทธิ์โดย rsync'ing root@myserver.comโดยตรง (

  • ... หรือโดยการกำหนดค่าsudoบนเซิร์ฟเวอร์เพื่ออนุญาตให้ใช้รหัสผ่านน้อยกว่าของrsyncองค์ประกอบฝั่งเซิร์ฟเวอร์

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

    และ

    rsync --rsh="ssh me@myserver.com sudo" -avz /var/www/ /backups/...
    
  • สร้างบัญชี "เว็บไซต์สำรอง" โดยเฉพาะบนเซิร์ฟเวอร์ เปลี่ยนการอนุญาตของไฟล์เพื่อให้สามารถอ่านได้ในบัญชี "website-backup" คุณสามารถใช้ ACL และsetfaclสำหรับสิ่งนั้น อย่าใช้บัญชีนี้เพื่อสิ่งอื่นใด

    rsync -avz website-backup@myserver.com:/var/www/ /backups/sites/mysite/
    
  • เขียนสคริปต์บนเซิร์ฟเวอร์ซึ่งจะถ่ายโอนข้อมูล / var / www / ลงใน tarball ที่เข้ารหัส อีกครั้งสิ่งนี้สามารถทำได้ในฐานะรูท (ผ่าน crontab) หรือโดยการกำหนดค่าsudoเพื่อไม่ต้องใช้รหัสผ่านสำหรับสคริปต์นั้น ตัวอย่างเช่น:

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

    การสำรองข้อมูลสามารถทำได้โดยดึง tarball ทั้งหมดทุกครั้งซึ่งอาจไม่มีประสิทธิภาพกับไซต์ขนาดใหญ่:

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

    ข้อกำหนดรหัสผ่านจะถูกลบออกโดยการแก้ไขsudoers :

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

ขอบคุณ คำแนะนำที่ดี อย่างใดอย่างหนึ่งอาจจะทำงานให้ฉัน ฉันกำลังพิจารณาใช้โซลูชันที่superuser.com/questions/270911/ …ถ้าฉันสามารถหาผลข้างเคียงที่อาจเกิดขึ้นได้
MountainX

BTW ฉันหมายถึงตัวเลือก 2 ข้อสุดท้าย การเข้าสู่ระบบในฐานะ root ผ่านทาง SSH ไม่ได้รับอนุญาตบนเซิร์ฟเวอร์
MountainX

@ MountainX: ฉันแยก "rsync ผ่าน sudo" เป็นตัวเลือกแยกต่างหาก มันอาจทำงานได้เช่นกัน
user1686

ขอบคุณ! "rsync ผ่าน sudo" เป็นตัวเลือกที่ฉันต้องการ ฉันจะลองคำแนะนำของคุณ ดูเหมือนว่าฉันจะต้องติดตั้ง visudo บน Ubuntu บนเซิร์ฟเวอร์ ฉันไม่ได้ยุ่งกับ visudo มาก แต่คุณให้ฉันพอที่จะให้ฉันเริ่มต้น ขอบคุณอีกครั้ง.
MountainX

5

ในรีโมตโฮสต์คุณสามารถรัน rsync daemon ด้วย

uid root

ใน/etc/rsyncd.confไฟล์

สิ่งนี้จะทำให้ daemon ใช้CAP_DAC_OVERRIDEความสามารถและอ่านระบบไฟล์โลคัลโดยไม่เปลี่ยนสิทธิ์ / ความเป็นเจ้าของ

หากคุณต้องการเพียงสำรองข้อมูลคุณควรตั้งค่า rsync ให้เป็นโหมดอ่านอย่างเดียว:

อ่านอย่างเดียว = จริง


0

หากไฟล์สามารถอ่านได้โดยrootคุณจำเป็นต้องมีrootสิทธิ์ในการสำรองไฟล์โดยอ่านจากระบบไฟล์ rsyncกำลังอ่านไฟล์จากระบบไฟล์ไม่ใช่จากอุปกรณ์ raw

มีข้อยกเว้นของdump, ddและการสำรองข้อมูลที่คล้ายกันที่คัดลอกพาร์ทิชันค่อนข้างแฟ้มที่โปรแกรมสำรองข้อมูลอ่านไฟล์จากระบบแฟ้ม อรรถประโยชน์การสำรองข้อมูลจะล้มเหลวในการอ่านและสำรองไฟล์ซึ่งสิทธิ์ของรหัสผู้ใช้ที่ใช้ในการเรียกใช้ป้องกันการเข้าถึง นี่คือกรณีที่คุณกำลังทำงาน

ในกรณีส่วนใหญ่คุณต้องเชื่อถือซอฟต์แวร์สำรองข้อมูลของคุณเพียงพอที่จะอนุญาตให้อ่านข้อมูลทั้งหมดของคุณ นอกจากนี้ยังหมายความว่าคุณต้องเชื่อถือสื่อสำรองข้อมูลด้วยข้อมูลทั้งหมดของคุณ ในบางกรณีคุณอาจต้องการแยกไฟล์บางไฟล์ออกจากการสำรองข้อมูลและใช้วิธีสำรองเพื่อสำรองเนื้อหา

แก้ไข: ในขณะที่คุณกำลังเก็บข้อมูล (คัดลอกสิทธิ์ทั้งหมด) คุณจะต้องเข้าถึงรากบนเซิร์ฟเวอร์ทั้งสอง หากคุณทำสิ่งนี้เป็นการสำรองข้อมูลคุณอาจต้องการดูโซลูชันเช่นBackupPCซึ่งใช้ rsync เพื่ออ่านไฟล์ แต่เก็บไฟล์ไว้ในแผนผังไดเรกทอรีของตัวเอง


มีวิธีให้สิทธิ์รูท rsync ฉันแค่ไม่รู้จักพวกเขา สิ่งที่ฉันขอคือวิธีให้ rsync เข้าถึงรากสำรองไฟล์เหล่านี้ บางทีฉันอาจจะต้องทบทวนคำตอบ "Run rsync ที่มีสิทธิ์รากบนเครื่องระยะไกล" และดูว่าฉันสามารถคิดออก ...
MountainX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.