การใช้ rsync กับ sudo บนเครื่องปลายทาง


37

มีปัญหาที่ rsync ไม่ได้ตั้งค่า UID และ GID ตามที่คาดไว้ความรู้สึกของฉันคือว่าrsyncควรทำงานเหมือนrootบนเครื่องปลายทาง

ฉันไม่สามารถเข้าสู่ระบบrootผ่านทาง SSH ได้เนื่องจากมันถูกปิดใช้งานเพื่อความปลอดภัย ผู้ใช้บนเครื่องปลายทางสามารถใช้งานsudoได้

มันเป็นไปได้ที่จะใช้rsyncกับsudo?

คำตอบ:


68

บนเครื่องปลายทาง

  1. ค้นหาเส้นทางไปที่rsync:which rsync
  2. แก้ไข/etc/sudoersไฟล์: sudo visudo(ดูเพิ่มเติมที่: ฉันต้องใช้ visudo หรือไม่ )
  3. เพิ่มบรรทัด<username> ALL=NOPASSWD:<path to rsync>โดยที่ชื่อผู้ใช้เป็นชื่อเข้าสู่ระบบของผู้ใช้ที่ rsync จะใช้ในการเข้าสู่ระบบ ผู้ใช้นั้นจะต้องสามารถใช้งานได้sudo

จากนั้นบนเครื่องต้นทางระบุว่าsudo rsyncจะต้องใช้:

rsync ... --rsync-path="sudo rsync" ...

การใช้โดยไม่ใช้NOPASSWDบนเครื่องปลายทางจะส่งผลให้ข้อความ

sudo: ไม่มี tty present และไม่ได้ระบุโปรแกรม askpass


การปรับเปลี่ยนนี้จะช่วยให้ผู้ใช้ในกลุ่มใดสามารถทำได้ แทนที่จะเป็น <username> จะมีเวอร์ชั่นชื่อกลุ่มหรือไม่
Brian

3
ขอบคุณมีเพียงฉันเท่านั้นที่ใช้ pki ดังนั้นฉันจึงใช้-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
AT

1
แน่นอน <ชื่อผู้ใช้> ตอนนี้สามารถอ่าน / เขียนทุกอย่างในฐานะรูทโดยใช้ rsync, โลคัลและรีโมตดังนั้นส่วนที่เกี่ยวกับการไม่สามารถเข้าสู่ระบบได้ในฐานะรูทเนื่องจากความกังวลด้านความปลอดภัยเป็นเรื่องที่สงสัย ... .
อืม

1
ยังคงได้รับข้อผิดพลาด "ไม่มี tty ปัจจุบัน ... " หลังจากทำตามคำแนะนำเหล่านี้แล้วหรือยัง ฉันเคยเป็น. ตรวจสอบให้แน่ใจว่าบรรทัดที่ฉันเพิ่ม/etc/sudoersนั้นมาที่ท้ายไฟล์ (หรือหลังจากกฎกลุ่มใด ๆ ที่อาจส่งผลกระทบต่อผู้ใช้รายเดียวกัน) แก้ไขปัญหาให้ฉันได้
CPBL

1
ฉันใช้โซลูชันนี้ แต่ต้องการปรับปรุงความปลอดภัยโดยการ จำกัด args ที่ผู้ใช้สามารถส่งไปยัง rsync บนเซิร์ฟเวอร์ปลายทาง โดยทั่วไปแล้วฉันจะ จำกัด args ที่สามารถใช้ได้กับ<username> ALL=NOPASSWD:<path to rsync> <args>แต่ฉันไม่รู้ว่า args จะเป็นอย่างไรเมื่อถูกเรียกจากระยะไกลเช่นนี้ ความคิดใด ๆ
Pete Cornell

2

คุณสามารถใช้ sudo จากระยะไกลเพื่อขอรหัสผ่านผ่าน X-windows นี่คือวิธีในการทำเช่นนั้น:

  1. ตรวจสอบให้แน่ใจว่าssh-askpassได้ติดตั้งบนโฮสต์ระยะไกล (และคุณใช้ X-windows แน่นอน)
  2. ตรวจสอบให้แน่ใจว่าสิ่งนี้อยู่ใน/etc/sudo.conf:
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
  1. เพิ่มตัวเลือกเหล่านี้เพื่อ rsync: -e "ssh -X" --rsync-path="sudo -A rsync"

    • ssh -X จะส่งต่อข้อมูล X-windows และพอร์ตไปยังเซสชันระยะไกลของคุณ
    • sudo -A จะทำให้ sudo ใช้ ssh-askpass เพื่อขอรหัสผ่านของคุณ

0

โซลูชันของฉันคือใช้--rsync-path="sudo rsync"ถ้ามันถามรหัสผ่านคุณสามารถใช้วิธีแก้ปัญหาแบบนี้:

rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  user@192.168.1.2:/ .

แต่นี่ไม่ปลอดภัยที่จะใส่รหัสผ่านในบรรทัดคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.