การ จำกัด ผู้ใช้ SSH / SCP / SFTP ไปยังไดเรกทอรี


36

มีวิธีง่ายๆในการ จำกัด ผู้ใช้ SCP / SFTP ไปยังไดเรกทอรีหรือไม่? วิธีการทั้งหมดที่ฉันเจอนั้นกำหนดให้ฉันต้องจำคุก chroot โดยการคัดลอกไบนารี แต่ฉันไม่คิดว่ามันจำเป็น

คำตอบ:


29

SSH รองรับการ chrooting ผู้ใช้ SFTP คุณเพียงแค่ต้องจัดหา

ChrootDirectory

ในไฟล์ sshd config ของคุณแล้วรีสตาร์ท sshd

หากคุณเพิ่งทำ SFTP คุณก็ไม่ต้องทำอะไรอีกแล้ว ขออภัยนี่ใช้ไม่ได้กับ scp สำหรับเชลล์เชิงโต้ตอบคุณจะต้องคัดลอกไบนารีและ / dev โหนดใน chroot

ตัวอย่างการกำหนดค่าสำหรับผู้ใช้เพียงคนเดียว testuser:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

บางสิ่งที่ต้องระวังจากหน้า sshd_config:

    ส่วนประกอบทั้งหมดของชื่อพา ธ ต้องเป็นไดเรกทอรีที่เป็นเจ้าของรูท
    สามารถเขียนได้โดยผู้ใช้หรือกลุ่มอื่น หลังจาก chroot, sshd (8) จะเปลี่ยน
    ไดเรกทอรีทำงานไปยังไดเรกทอรีบ้านของผู้ใช้

ค้นหา ChrootDirectory ใน man sshd_config สำหรับข้อมูลเพิ่มเติม


2
โปรดทราบว่าส่วนที่ขึ้นต้นด้วย "Match User testuser" จะต้องอยู่ที่ส่วนท้ายของไฟล์เนื่องจากจะมีบรรทัดการกำหนดค่าเฉพาะเมื่อผู้ใช้เป็น "testuser" จากจุดนั้น
แมกนัส

1
เป็นไปได้ไหมที่ Chroot สำหรับโปรโตคอล SFTP แต่ยังอนุญาตการเชื่อมต่อ SCP ปกติได้?
lanoxx

1
บนเครื่อง Ubuntu 14.04 ของฉันก็จำเป็นต้องเปลี่ยนSubsystem sftp /usr/lib/openssh/sftp-serverบรรทัดเป็นSubsystem sftp internal-sftp -f AUTH -l VERBOSE
บางสิ่งบางอย่าง

@ Magnagnus หรือจนกว่าจะมีMatchส่วนอื่น
roaima

12

chroot เป็นวิธีการที่เรียบง่ายพอสมควร เนื่องจากระบบปฏิบัติการมีฟีเจอร์ความปลอดภัยนี้อยู่แล้วผู้เขียน daemon จึงไม่พยายามนำมาใช้อีก

Rsshมาพร้อมกับคู่มือในการตั้งค่าคุก chroot มันอยู่ในCHROOTไฟล์ในการแจกแจงต้นฉบับ สรุปคุณจะต้องมี:

  • ไม่กี่ไบนารีคัดลอกมาจากราก: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • ไลบรารี่ ( {/usr,}/lib/lib*.so.[0-9]) ที่ใช้งานก็จะถูกคัดลอกเช่นเดียวกัน
  • A /etc/passwd(อาจจะไม่ใช่สำเนา แต่ได้มาจากต้นแบบ)
  • อุปกรณ์สองสามอย่าง: /dev/null, /dev/ttyและ/dev/logซ็อกเก็ตสำหรับการบันทึก (และคุณต้องแจ้งให้ syslog daemon ของคุณฟังซ็อกเก็ตนั้น)

เคล็ดลับพิเศษที่ไม่ได้อยู่ในเอกสาร rssh: หากคุณต้องการให้ไฟล์บางไฟล์สามารถเข้าถึงได้ในคุก chroot คุณสามารถใช้bindfsหรือ Linux mount --bindเพื่อสร้างลำดับชั้นไดเรกทอรีเพิ่มเติมจากนอกคุก bindfsอนุญาตให้ไดเร็กทอรีที่เมาท์ใหม่มีสิทธิ์ จำกัด มากขึ้นเช่นอ่านอย่างเดียว ( mount --bindไม่เว้นแต่คุณจะใช้เคอร์เนลแพทช์เดเบียนรวมแพทช์นี้มาตั้งแต่ตอนตะวันออกเลนนี่ แต่การกระจายอื่น ๆ ส่วนใหญ่ยังไม่เป็นของปี 2011)


7

คุณอาจต้องการดูscponly (หรือเร็ว ๆ นี้rssh ); มันเป็นหลักเปลือกเข้าสู่ระบบที่สามารถเพียง แต่นำมาใช้เพื่อการเปิดตัว SCP หรือระบบย่อย sftpd ในscponlycตัวแปรจะดำเนินการ chroot ก่อนเปิดใช้งานระบบย่อยที่เป็นปัญหา


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