พยายามติดตั้ง chroot'd rsync


10

ฉันพยายามตั้งค่าเซิร์ฟเวอร์สำรอง ฉันต้องการchrootผู้ใช้แต่ละคน (ลูกค้า) ไปยังไดเรกทอรีบ้านและอนุญาตให้ใช้sftpและrsyncเท่านั้น

ฉันค้นพบอย่างรวดเร็วว่าฉันไม่ใช่คนเดียวที่พยายามทำสิ่งนี้และฉันพบแนวทางนี้และปฏิบัติตาม ดังนั้นตอนนี้ฉันมีผู้ใช้ chroot ที่มี sftp เท่านั้น

จากนั้นฉันก็พบว่า rsync ต้องการ ssh เพื่อวางไข่เองบนเครื่องอื่นและ sftp นั้นไม่เพียงพอ การให้ผู้ใช้แต่ละคนเข้าสู่ระบบ ssh เป็นสิ่งที่ฉันต้องการหลีกเลี่ยงตั้งแต่แรก

ทุกคนคิดวิธีแก้ปัญหาที่เป็นไปได้บ้างไหม?

ขอบคุณ,

เครื่องหมาย


ลองดูที่คำตอบนี้ฉันเขียนไปบ้างserverfault.com/questions/255084/ …
user9517

คำตอบ:


11

วิธีการแก้ปัญหา SFTP จะยังต้องมีการเข้าสู่ระบบ SSH สำหรับทุกคนเพื่อให้คุณไม่ได้หายไปจริงๆอะไรที่นี่ อนุญาตให้เข้าถึง SSH ไม่จำเป็นต้องหมายถึงการเข้าถึงเปลือกเต็มรูปแบบเช่นนี้แสดงให้เห็นถึงวิธีการใช้จุ๊authorized_keysไฟล์ที่จะช่วยให้การสำรองข้อมูลผ่าน rsync ขณะที่การ จำกัด คำสั่งที่สามารถใช้ได้เพียงแค่รับ rsync

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

บางอย่างเช่นนี้ในauthorized_keysไฟล์ของคุณ:

command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1
command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2

บางคนใช้user1จะสำรองคีย์ส่วนตัวลงไป/tmp/user1และคนที่ใช้สำรองประสงค์ส่วนตัวที่สำคัญในuser2 /tmp/user2และอื่น ๆ ...


ลิงก์หายไป 404
luckydonald

ฉันอัพเดทลิงค์แล้ว
larsks

6

ดำเนินการตามปกติrsyncจากลูกค้าไปยังเซิร์ฟเวอร์ระยะไกล แต่เพิ่มสวิตช์ละเอียดเพิ่มเติม: SSH -vแล้ว grep Sending commandสำหรับ คุณจะเห็นไคลเอนต์คำสั่งที่แน่นอนกำลังส่งไปยังเซิร์ฟเวอร์ระยะไกล:

rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command"

ในกรณีของฉันมันเป็น

rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path

เพิ่มสิ่งนี้เป็นไฟล์command="..."เซิร์ฟเวอร์ระยะไกล/home/USER/.ssh/authorized_keysตามที่ @larsks กล่าวถึง เพิ่มการตั้งค่าความปลอดภัย aditional หากจำเป็น:

no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

ทั้งหมดเข้าด้วยกัน:

command="rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /backup/path",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

(นำมาจากบทช่วยสอนที่ดีมากhttp://en.positon.org/post/Rsync-command-restriction-over-SSH )


คำตอบที่ดี 1
slm

2

คุณจะต้องให้การเข้าถึงเชลล์บางรูปแบบเพื่อให้สามารถใช้ rsync ได้เว้นแต่ว่าคุณกำลังเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ rsync - พอร์ตเริ่มต้นคือ 873 (TCP)

จากหน้าrysnc :

มีสองวิธีที่แตกต่างกันสำหรับ rsync ในการติดต่อกับระบบรีโมต: ใช้โปรแกรม remote-shell เป็น transport (เช่น ssh หรือ rsh) หรือติดต่อ rsync daemon โดยตรงผ่าน TCP การส่งผ่านรีโมตเชลล์ถูกใช้เมื่อใดก็ตามที่พา ธ ต้นทางหรือปลายทางมีโคลอนเดียว (:) ตัวคั่นหลังข้อกำหนดคุณสมบัติของโฮสต์ การติดต่อ rsync daemon เกิดขึ้นโดยตรงเมื่อเส้นทางต้นทางหรือปลายทางประกอบด้วยตัวคั่นคู่ (: :) ตัวแยกหลังจากข้อกำหนดของโฮสต์หรือเมื่อมีการระบุ rsync: // URL (ดูที่ lqUSING RSYNC-DAEMON FEATURES VIA A SHOT REMOTE ส่วน CONNECTIONrq สำหรับข้อยกเว้นสำหรับกฎหลังนี้)

เพื่อให้การเข้าถึงเปลือก จำกัด พิจารณาต่อไปนี้คู่มือ (หมายเหตุ: ลิงค์เดิมตายไปแล้ว) สรุป:

การตั้งค่านี้รวมคุณสมบัติที่ดีที่สุดจาก rsync, SSH และ chroot Rsync ให้ความยืดหยุ่นและประสิทธิภาพในการถ่ายโอนไฟล์ SSH ปกป้องข้อมูลที่ถูกถ่ายโอนและ chroot ปกป้องข้อมูลบนเซิร์ฟเวอร์จากการเข้าถึงที่ไม่ได้รับอนุญาต Dummysh จำกัด การเข้าถึง rsync เท่านั้น

ในขณะที่เซิร์ฟเวอร์ rsync ใช้ chroot มันขาดการป้องกัน SSH ที่จำเป็นบ่อยครั้ง นอกจากนี้การเปิดพอร์ตเซิร์ฟเวอร์ rsync เพิ่มเติมแสดงถึงความเสี่ยงด้านความปลอดภัยและบางครั้งไม่สามารถทำได้ทั้งในด้านเทคนิคหรือด้านการเมือง Sftp และ scp ขาดความยืดหยุ่นและประสิทธิภาพที่มีให้โดย rsync โดยเฉพาะอย่างยิ่งเมื่อมีการเชื่อมโยงกับแผนผังไดเรกทอรีเช่นเว็บไซต์

หรือดูที่การใช้rssh (มีคำแนะนำในการตั้งค่า rssh ที่นี่ ):

rssh เป็นเชลล์แบบ จำกัด สำหรับใช้กับ OpenSSH ซึ่งอนุญาตเฉพาะ scp และ / หรือ sftp ตอนนี้ยังรวมถึงการสนับสนุน rdist, rsync และ cvs ตัวอย่างเช่นหากคุณมีเซิร์ฟเวอร์ที่คุณต้องการอนุญาตให้ผู้ใช้คัดลอกไฟล์ออกจากผ่าน scp โดยไม่ต้องให้สิทธิ์การเข้าถึงเชลล์คุณสามารถใช้ rssh เพื่อทำเช่นนั้น


1
ข่าวปัจจุบันคือ rssh ไม่ได้รับการดูแลรักษาและมีช่องโหว่ด้านความปลอดภัย ตรวจสอบสถานะปัจจุบันก่อนลงทุน
chutz

2
คุณสามารถใช้สคริปต์ perl rrsyncแทน rssh ที่รวมอยู่ในแพ็คเกจ rsync อย่างเป็นทางการ ดูderek.simkowiak.net/backing-up-multiple-servers-with-rsnapshot
unhammer

0

คุณสามารถเขียนเชลล์ที่ล้อม rsync

ดูแนวคิดทั่วไปที่นี่: https://sixohthree.com/1458/locking-down-rsync-using-ssh

ในเปลือกของคุณคุณสามารถทำสิ่งที่คุณต้องการและอาจ chroot ผู้ใช้

ในกรณีของฉันฉันต้องเปิดบัญชีเสมือนโดยใช้ผู้ใช้ * nix คนเดียวกัน ฉันจัดการโดยใช้เชลล์ชนิดนี้บวกหลายบรรทัดในไฟล์ authorized_keys ฉันยังไม่ได้ chrooted ผู้ใช้ แต่ฉันได้เพิ่มระดับโฟลเดอร์ผู้ใช้ในคำสั่งเซิร์ฟเวอร์ rsync

ดูที่กระบวนการของผู้ใช้ต่างกันโดยใช้คีย์ ssh


0

SFTP พร้อมความสามารถ Rsync โดยไม่มีเชลล์

คุณสามารถใช้LFTP + SFTP ในสภาพแวดล้อม chrootและบรรลุผลลัพธ์เช่นเดียวกับการใช้ rsync โดยไม่ต้องให้เชลล์แก่ผู้ใช้หรือทำการปรับแต่งอย่างหนักใน ssh พร้อมกับ wrappers

นี่คือความปลอดภัยมากขึ้นและสามารถเร็วขึ้นอย่างมาก


0

Rsync เป็น chroot นั้นยุ่งยาก :) คุณจะต้องตั้งค่าสภาพแวดล้อมที่น้อยที่สุดสำหรับ / bin / sh และ / usr / bin / rsync ภายในไดเรกทอรี chrooted (ฝั่งปลายทาง) เพื่อให้มันทำงานได้

ดูบทความทั้งหมดที่นี่การตั้งค่าสภาพแวดล้อม rsync นั้นอยู่ท้าย
https://medium.com/@deltazero/linux-remote-backup-rsync-chroot-d797ba6babe5

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