Score:0

ข้อผิดพลาด Chroot ของ SFTP: ท่อแตก

ธง at

อัปเดต: โค้ดด้านล่างได้รับการอัปเดตเพื่อแสดงถึงการเปลี่ยนแปลงที่ระบุในคำตอบที่ทำเครื่องหมายไว้ ดังนั้นจึงทำงานได้ตามที่คาดไว้

ฉันกำลังพยายามสร้างผู้ใช้ SFTP เท่านั้นบนเซิร์ฟเวอร์ของฉัน ซึ่งถูกจำคุกในโฮมไดเร็กตอรี่ของพวกเขา เมื่อพยายามเชื่อมต่อกับเซิร์ฟเวอร์ ฉันได้รับข้อผิดพลาดไปป์เสีย:

debug1: การรับรองความถูกต้องสำเร็จ (รหัสผ่าน)
xxxx.xxxxxxxxx.com ([XX.XX.XX.XX]:22)
debug2: fd 5 ตั้งค่า O_NONBLOCK
debug3: fd 6 คือ O_NONBLOCK
debug1: ช่อง 0: ใหม่ [ไคลเอ็นต์เซสชัน]
debug3: ssh_session2_open: channel_new: 0
debug2: ช่อง 0: ส่งเปิด
debug3: ส่งแพ็คเก็ต: ประเภท 90
debug1: ขอ [email protected]
debug3: ส่งแพ็คเก็ต: ประเภท 80
debug1: กำลังเข้าสู่เซสชันแบบโต้ตอบ
debug1: คำมั่นสัญญา: เครือข่าย
debug3: ส่งแพ็คเก็ต: ประเภท 1
packet_write_wait: การเชื่อมต่อกับพอร์ต XX.XX.XX.XX 22: ท่อแตก
ไม่สามารถอ่านแพ็คเก็ต: การเชื่อมต่อถูกรีเซ็ตโดยเพียร์

ฉันได้พิจารณาแล้วว่าสิ่งนี้เกี่ยวข้องกับความพยายามของฉันที่จะจำคุกผู้ใช้ ของฉัน sshd_config รวมถึง:

ระบบย่อย sftp ภายใน-sftp
จับคู่กลุ่ม sftponly
        ForceCommand ภายใน-sftp -d /%u
        การตรวจสอบรหัสผ่านใช่
        ChrootDirectory /home/sftp
        ใบอนุญาตอุโมงค์เลขที่
        AllowAgent หมายเลขการส่งต่อ
        อนุญาตให้ Tcp ส่งต่อหมายเลข
        X11หมายเลขการส่งต่อ

sftponly เป็นชื่อของกลุ่มที่ฉันสร้างขึ้นสำหรับผู้ใช้ SFTP เจ้าของและกลุ่มของ /home/sftp เป็น ราก โดยได้รับอนุญาตเป็นลายลักษณ์อักษรสำหรับเจ้าของเท่านั้น (0711).

$ chown root:root /home/sftp
$ chmod 0711 /home/sftp

นี่คือวิธีที่ฉันสร้างผู้ใช้ (ในตัวอย่างนี้ แบทแมน) -- โปรดทราบว่าฉันทำสิ่งนี้ผ่านสคริปต์ Perl ดังนั้นฉันจึงใช้ รหัสผ่าน:

$ adduser --quiet --disabled-password --shell /bin/false --no-create-home --gecos "ผู้ใช้" แบทแมน
$ echo "แบทแมน:แบทแมน123" | รหัสผ่าน
$ usermod -a -G sftponly แบทแมน
$ ติดตั้ง -d -m 0755 /home/sftp/batman -o แบทแมน -g sftponly

หมายเหตุ: ฉันกำลังสร้างโฮมไดเร็กทอรีของผู้ใช้ด้วยตนเองแทนที่จะส่ง --ระบบ หาเรื่อง ผู้ใช้ที่เพิ่มเนื่องจากฉันได้รับข้อผิดพลาดเมื่อฉันพยายามเปลี่ยนความเป็นเจ้าของไดเร็กทอรีในภายหลัง:

chown: กลุ่มไม่ถูกต้อง: âbatman:batmanâ

ถ้าฉันปรับปรุงของฉัน sshd_configและเปลี่ยนไดเร็กทอรี chroot เป็น:

ChrootDirectory /home/sftp

ฉันสามารถเข้าถึงเซิร์ฟเวอร์ได้สำเร็จและไม่ได้รับข้อผิดพลาดไปป์เสียอีกต่อไป อย่างไรก็ตามฉันลงจอด /home/sftp เมื่อเข้าสู่ระบบ ฉันเห็นรายการไดเร็กทอรีผู้ใช้อื่นๆ ทั้งหมด แทนที่จะเข้าไปอยู่ในนั้น /home/sftp/แบทแมน อย่างที่ฉันคาดว่าจะเกิดขึ้น

ฉันจะปรับปรุง/แก้ไขปัญหานี้ได้อย่างไร เพื่อให้ผู้ใช้:

  • มีสิทธิ์เข้าถึงไดเร็กทอรีของตนเองเท่านั้น (/home/sftp/แบทแมน)
  • เมื่อเข้าสู่ระบบจะปรากฏเป็นภายใน / (ซึ่งจริงๆแล้ว /home/sftp/แบทแมน)
  • ไม่สามารถนำทางไปยัง /home/sftp (เพื่อไม่ให้เห็นรายชื่อผู้ใช้รายอื่น)
Score:0
ธง at

ฉันสามารถทำสิ่งนี้ให้สำเร็จได้โดยใช้การอนุญาตเหล่านี้:

$chown แบทแมน:sftponly /home/sftp/batman
$ chmod 0755 /home/sftp/แบทแมน
$ chmod 0711 /home/sftp

แล้วเปลี่ยน ChrootDirectory จาก /home/sftp/%u ถึง /home/sftp,

และสุดท้ายย้ายผู้ใช้ไปยังโฮมไดเร็กทอรีเมื่อเข้าสู่ระบบ:

ForceCommand ภายใน-sftp -d /%u

ตอนนี้เมื่อไหร่ แบทแมน เข้าสู่ระบบ พวกเขาลงจอด /home/sftp/แบทแมนซึ่งปรากฏเป็น /แบทแมน ให้กับผู้ใช้ ที่สำคัญกว่านั้นหากพวกเขาพยายามที่จะกลับออกไป /home/sftpพวกเขาได้รับข้อผิดพลาด (ซึ่งป้องกันไม่ให้เห็นไดเร็กทอรีผู้ใช้อื่น):

ไดเร็กทอรี /: สิทธิ์ถูกปฏิเสธ - ไม่สามารถเรียกข้อมูลรายชื่อไดเร็กทอรีได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา