OpenSSH มีอะไรเหมือน 'Internal-sftp' แต่สำหรับ SCP?


16

ฉันใช้ Debian เสถียรภาพและฉันต้องการสร้างสภาพแวดล้อมต่อไปนี้สำหรับผู้ใช้ในกลุ่ม 'sftponly' ของฉัน:

  • ตัดสินจำคุก
  • สามารถถ่ายโอนด้วย SFTP
  • สามารถถ่ายโอนกับ SCP
  • ไม่สามารถเข้าสู่ระบบแบบโต้ตอบกับ SSH

จากการทดลองและการวิจัยของฉันดูเหมือนว่าบทต่อไปนี้ใน sshd_config ทำให้ฉันอยู่ที่นั่น 90%:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

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

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

ดังนั้นฉันคิดว่าคำถามของฉันคือ: มีวิธีการที่จะบรรลุผลเช่นเดียวกับ 'sftp ภายใน' แต่สำหรับ SCP โดยไม่ต้องใช้เครื่องมือของบุคคลที่สามเช่น scponly และ rssh หรือไม่? สิ่งที่ดีจริงๆเกี่ยวกับ 'internal-sftp' คือมันไม่จำเป็นต้องติดตั้งคุกด้วยไฟล์สนับสนุนหรือจัดการกับ setuid binaries ของบุคคลที่สามที่มีช่องโหว่ (โดยเฉพาะมีประวัติของการหาประโยชน์)


1
ไคลเอ็นต์กำลังเชื่อมต่อโดยใช้ไฟล์คีย์ ssh หรือพวกเขาใช้รหัสผ่านอยู่หรือไม่? หากเป็นไฟล์คีย์เป็นไปได้ที่จะ จำกัด สิ่งที่พวกเขาสามารถทำได้
เจนนี่ดี

พวกเขากำลังเชื่อมต่อกับรหัสผ่าน
brianjcohen

คำตอบ:


3

ลองดูที่rsshซึ่งเป็นเชลล์ตัวเลือกที่อนุญาตให้มีการ จำกัด การเข้าถึงระบบ

rssh เป็นเชลล์ที่ถูก จำกัด สำหรับการให้สิทธิ์การเข้าถึงโฮสต์ผ่าน ssh (1) อย่าง จำกัด ซึ่งอนุญาตให้ผู้ใช้ที่เชลล์ถูกกำหนดค่าให้ rssh ใช้หนึ่งในคำสั่ง scp (1), sftp (1) cvs (1) อย่างน้อยหนึ่งรายการ ), rdist (1) และ rsync (1) และคำสั่งเหล่านั้นเท่านั้น

คุณสามารถกำหนดค่าคำสั่งที่สามารถใช้กับผู้ใช้หรือพื้นฐานของระบบโดยใช้ไฟล์rssh.conf

หรือคุณสามารถใช้ scponlyเพื่อทำสิ่งที่คุณต้องการ มันทำหน้าที่เป็น wrapper ไปที่ ssh suite และอนุญาตให้ถ่ายโอนไฟล์ แต่ไม่ใช่การเข้าถึงเชลล์


2

คุณต้องการทำสิ่งนี้ผ่าน ssh หรือไม่?

หากคุณสามารถลองตั้งค่าเชลล์เป็น:

/usr/libexec/openssh/sftp-server

และให้แน่ใจว่าคุณเพิ่มข้างต้นลงใน / etc / shells

หากคุณต้องการแยกการใช้งานบัญชีที่มีอยู่แล้วคุณสามารถติดตั้ง proftpd ได้

ฉันติดตั้ง SFTP ที่ปลอดภัยโดยใช้ proftpd รวบรวม proftpd เช่นนี้:

./configure --prefix = / usr --sysconfdir = / etc - with-modules = mod_sftp

สามารถใช้บทความนี้ด้านล่างและอีกมากมายบน Google เกี่ยวกับวิธีการตั้งค่า:

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html


2

ฉันกลัวว่าจะไม่มีอะไรที่คล้ายกันง่ายหรือเชื่อถือได้กับ OpenSSH เนื่องจากคุณสังเกตเห็นว่ามีเซิร์ฟเวอร์ SFTP ในตัว แต่ไม่มีเซิร์ฟเวอร์ SCP ในตัว

คำเตือน: ข้อเสนอแนะโดย Vince Berk ไม่ดีด้วยเหตุผลหลายประการ:

  1. พฤติกรรมของเชลล์เกี่ยวกับไฟล์เริ่มต้นสามารถได้รับอิทธิพลจากตัวแปรสภาพแวดล้อมซึ่ง SSH สามารถตั้งค่าจากระยะไกลขึ้นอยู่กับการกำหนดค่าเซิร์ฟเวอร์
  2. ผู้ใช้สามารถเรียกใช้ssh / bin / bashและรับเชลล์ มันจะไม่มี tty และดังนั้นจะไม่สะดวกในการใช้ แต่สิ่งที่ ... ไม่ต้องพูดถึงโปรแกรมอื่น ๆ ทั้งหมดที่เขาสามารถเรียกใช้ที่คุณคงไม่ต้องการให้เขา
  3. การเปลี่ยนการอนุญาตของ. bash_profile ทำได้ดีเพียงเล็กน้อยถ้าผู้ใช้สามารถทำได้ "ssh host rm -f .bash_profile"; ไม่มีการพูดถึงเกี่ยวกับการอนุญาตไดเรกทอรีบ้าน

... และต่อไป วิธีการแบบนี้เปราะบางเกินไป


0

นี่เป็นเครื่องมือของบุคคลที่สามซึ่งไม่ได้อยู่ในขอบเขตของคำถาม แต่ฉันคิดว่ามันสมควรได้รับการกล่าวถึงอย่างไรก็ตาม

Jailkit: https://olivier.sessink.nl/jailkit/

มีชุดเครื่องมือที่ช่วยให้การตั้งค่าคุกผู้ใช้ง่ายขึ้น - การคัดลอกไบนารีและไลบรารีไปยังคุกและตั้งค่าการบันทึกจากภายในคุกไปยังระบบปฏิบัติการ ฉันใช้มันสร้าง chroots sftp / scp / rsync-only เท่านั้น

นอกจากนี้ยังมาพร้อมกับjk_lsh(jailkit limited shell) ซึ่งสามารถใช้นอกคุกเพื่อ จำกัด คำสั่งที่ผู้ใช้สามารถเรียกใช้เช่นถ้าคุณต้องการอนุญาต scp / sftp / rsync เท่านั้นโดยไม่มี chroot


-1

นี่คือเคล็ดลับเกี่ยวกับวิธีการใช้เซิร์ฟเวอร์นี้ ตั้งค่าเปลือกของผู้ใช้เป็นพูดทุบตี:

usermod -S /bin/bash [username]

ตอนนี้สร้าง homedir ของพวกเขาเป็น '.bash_profile' ด้วยบรรทัดต่อไปนี้:

[ -n "$PS1" ] && exit

ทำให้เซสชันที่ไม่โต้ตอบ (เช่น 'scp') เพื่อดำเนินการต่อ อย่างไรก็ตามหากพวกเขาพยายามเข้าสู่ระบบ 'ssh' ระบบจะเรียก 'exit' และการเชื่อมต่อจะถูกปิด

ตรวจสอบให้แน่ใจว่าพวกเขาไม่สามารถ 'sftp' ใหม่ '.bash_profile' ในไดเรกทอรีบ้านของพวกเขา!

chown root:root .bash_profile

หวังว่าจะช่วย!


วิธีนี้ดูเหมือนจะไม่คำนึงถึงความต้องการของผู้ต้องขัง
brianjcohen

ใช่น่าเสียดายที่คุณต้องสร้างสภาพแวดล้อม chroot แบบแมนนวลสำหรับด้าน 'scp' ซ้อนทับกับไดเรกทอรี chroot ที่กำหนดใน sshd_config และดำเนินการกับผู้ใช้แต่ละรายที่คุณต้องการ จำกัด 'scp' ไม่ทำงานกับเซิร์ฟเวอร์ sftp ภายใน
Vince Berk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.