OpenSSH: ความแตกต่างระหว่าง Internal-sftp และ sftp-server


81

เหตุใดจึงมีสองวิธีในการตั้งค่า SFTP ด้วย OpenSSH และใช้เมื่อใด มีความแตกต่างระหว่างพวกเขาหรือไม่?

ฉันหมายถึงคนแรกที่ใช้ lib จาก OpenSSH และคนที่สองบอกว่า "ใช้ภายใน" ดังนั้นมันจึงเป็น OpenSSH เช่นกัน?

Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

คำตอบ:


94

ทั้งสองsftp-serverและinternal-sftpเป็นส่วนหนึ่งของ OpenSSH sftp-serverเป็นไบนารีแบบสแตนด์อโลน internal-sftpเป็นเพียงคำสำคัญการกำหนดค่าที่บอกsshdให้ใช้รหัสเซิร์ฟเวอร์ SFTP ในตัวsshdแทนที่จะเรียกใช้กระบวนการอื่น (โดยทั่วไปsftp-server)


จากมุมมองการทำงานsftp-serverและinternal-sftpเกือบจะเหมือนกัน พวกเขาสร้างขึ้นจากซอร์สโค้ดเดียวกัน

ประโยชน์หลักของการinternal-sftpเป็นที่จะต้องใช้ไฟล์ไม่สนับสนุนเมื่อใช้กับคำสั่งChrootDirectory

คำพูดจากsshd_config(5)หน้าคน :

  • สำหรับSubsystemคำสั่ง :

    คำสั่งsftp-serverใช้ระบบย่อยการถ่ายโอนไฟล์ SFTP

    อีกทางหนึ่งชื่อinternal-sftpใช้เซิร์ฟเวอร์ SFTP ในกระบวนการ สิ่งนี้อาจลดความซับซ้อนของการกำหนดค่าโดยใช้ChrootDirectoryเพื่อบังคับรูทระบบไฟล์ที่แตกต่างกันบนไคลเอนต์

  • สำหรับForceCommandคำสั่ง :

    ระบุคำสั่งของinternal-sftpจะบังคับใช้เซิร์ฟเวอร์ SFTP ChrootDirectoryในกระบวนการที่ต้องใช้ไฟล์ไม่สนับสนุนเมื่อใช้ร่วมกับ

  • สำหรับChrootDirectoryคำสั่ง :

    ChrootDirectoryต้องมีไฟล์ที่จำเป็นและไดเรกทอรีที่จะสนับสนุนเซสชั่นของผู้ใช้ สำหรับเซสชั่นแบบโต้ตอบนี้ต้องมีอย่างน้อยเปลือกโดยทั่วไปshและพื้นฐาน/devโหนดเช่นnull, zero, stdin, stdout, stderrและttyอุปกรณ์ สำหรับเซสชันการถ่ายโอนไฟล์โดยใช้ SFTP ไม่จำเป็นต้องกำหนดค่าเพิ่มเติมของสภาพแวดล้อมหากใช้กระบวนการ sftp-server แม้ว่าเซสชันที่ใช้การบันทึกอาจต้องการ/dev/logภายในไดเรกทอรี chroot ในระบบปฏิบัติการบางระบบ (ดูsftp-serverรายละเอียด)

ข้อดีอีกอย่างของinternal-sftpประสิทธิภาพคือไม่จำเป็นต้องเรียกใช้กระบวนการย่อยใหม่


มีการinternal-sftpเพิ่มมากขึ้นในภายหลัง (OpenSSH 4.9p1 ในปี 2008?) มากกว่าsftp-serverไบนารีแบบสแตนด์อโลนแต่ตอนนี้เป็นค่าเริ่มต้นแล้ว

ฉันเชื่อว่าไม่มีเหตุผลที่จะใช้sftp-serverสำหรับการติดตั้งใหม่


อาจดูเหมือนว่าsshdจะสามารถใช้งานได้โดยอัตโนมัติinternal-sftpเมื่อพบsftp-serverว่ามีฟังก์ชั่นการใช้งานเหมือนกันและinternal-sftpมีข้อได้เปรียบเหนือกว่า แต่มีบางกรณีที่มีความแตกต่าง

ตัวอย่างไม่กี่:

  • ผู้ดูแลระบบอาจอาศัยการกำหนดค่าล็อกอินเชลล์เพื่อป้องกันไม่ให้ผู้ใช้บางคนเข้าสู่ระบบการสลับไปยังinternal-sftpจะข้ามข้อ จำกัด เนื่องจากเชลล์ล็อกอินไม่เกี่ยวข้องอีกต่อไป

  • ใช้sftp-serverไบนารี (เป็นกระบวนการแบบสแตนด์อโลน) คุณสามารถใช้ hacks บางอย่างเช่นการทำงาน SFTP sudoภายใต้

  • สำหรับ SSH-1 (ถ้าใครยังใช้อยู่) Subsystemคำสั่งไม่เกี่ยวข้องเลย ไคลเอนต์ SFTP ที่ใช้ SSH-1 จะบอกเซิร์ฟเวอร์อย่างชัดเจนไบนารีใดที่เซิร์ฟเวอร์ควรรัน ดังนั้นไคลเอนต์ SSH-1 SFTP ดั้งเดิมจึงมีsftp-serverชื่อรหัสยาก



6

คุณสามารถล็อค authorized_key ไปยังเซิร์ฟเวอร์ภายนอก sftp

คำสั่ง = "/ usr / libexec / openssh / sftp-server" ssh-rsa AAAA … == user@host.com

เมื่อคุณทำผู้ใช้ของคุณสามารถ sftp แต่ไม่สามารถ scp หรือ ssh:

$ sftp host: / etc / group / tmp
กำลังเชื่อมต่อกับโฮสต์ ...
กำลังดึง / etc / group ไปที่ / tmp / group
/ etc / group 100% 870 0.9KB / s 00:00

ความพยายามที่จะทำอะไรก็จะแขวน:

$ scp host: / etc / group / tmp
ฆ่าโดยสัญญาณ 2

$ ssh สถานะการออนไลน์
ฆ่าโดยสัญญาณ 2

อนิจจาไม่มีวิธีที่ง่ายสำหรับคีย์ที่จะถูกล็อคไปยัง chroot เว้นแต่ว่า sshd_config จะถูกปรับเปลี่ยน นี่จะเจ๋งจริงๆสำหรับผู้ใช้ที่จะสามารถทำได้โดยปราศจากการแทรกแซงของผู้จัดการระบบ


3
ForceCommand internal-sftpควรบรรลุผลเหมือนกัน
ptman

สิ่งที่มีประโยชน์คือไม่มี chroot คุณสามารถใช้sshfs host:/home/user/.ssh ~/hackmeเพื่อแก้ไขการตั้งค่าทั้งหมดเหล่านั้นกลับเพื่อเปิดการเข้าถึงหากคุณเปลี่ยนใจในภายหลัง
sh1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.