ฉันต้องการจำกัดผู้ใช้บางคนบนเซิร์ฟเวอร์ของฉันให้สามารถดำเนินการคำสั่งบางอย่างเท่านั้น ในการทำเช่นนี้ วิธีทั่วไปที่สุดที่ฉันสามารถหาได้คือการใช้ ทุบ.
แม้ว่าฉันจะสามารถพบเว็บไซต์มากมายที่พูดถึง rbash แต่ฉันประสบปัญหาในการหาข้อมูลใดๆ เกี่ยวกับวิธีใช้อย่างถูกต้อง วิธีทั่วไปที่สุดที่ฉันพบคือการสร้าง symlink จาก /bin/rbash ถึง /ถัง/ทุบตีให้ตั้งค่าเชลล์การเข้าสู่ระบบของผู้ใช้ที่ถูกจำกัดเป็น /bin/rbash แล้วตั้งค่าเอง เส้นทาง ใน ~/.bash_profile ในโฮมไดเร็กทอรีของผู้ใช้
อย่างไรก็ตาม ฉันตกใจมากที่พบว่าด้วยการตั้งค่านี้ ผู้ใช้ยังคงสามารถคัดลอกไฟล์ไปยังเซิร์ฟเวอร์ได้โดยใช้ scp และพวกเขายังสามารถเปิดเชลล์ที่ไม่จำกัดได้ด้วยการใช้ ssh user@host -t ทุบตี! สิ่งที่ดูเหมือนจะเกิดขึ้นคือเซิร์ฟเวอร์ SSH กำลังส่งคำสั่งไปยังเชลล์ล็อกอินบนเซิร์ฟเวอร์โดยใช้ -ค, ดังนั้น ssh user@host -t ทุบตี ทำให้เซิร์ฟเวอร์ทำงาน /bin/rbash -c ทุบตีซึ่งใช้งานได้เพราะ .bash_profile ยังไม่ได้ดำเนินการเพื่อจำกัดเส้นทาง scp ในทำนองเดียวกันทำให้เซิร์ฟเวอร์ทำงาน /bin/rbash -c scp.
ตอนนี้ฉันได้พบกับ คำสั่งบังคับ คำสั่งของ sshd คำสั่งนี้โดยพื้นฐานแล้วจะทำให้คำสั่งที่กำหนดค่าถูกส่งผ่านเป็น -ค ไปยังเชลล์ล็อกอิน โดยไม่สนใจคำสั่งใดๆ ที่ไคลเอนต์ระบุ ดังนั้นหาก คำสั่งบังคับ ถูกตั้งค่าเป็น ทุบที่จะดำเนินการคำสั่งเสมอ /bin/rbash -c rbash บนเซิร์ฟเวอร์ โดยไม่คำนึงว่าไคลเอนต์ถูกเรียกใช้ด้วยหรือไม่ -t ทุบตี หรือเป็น scp หรืออะไรก็ตาม น่าเสียดาย, /bin/rbash -c rbash ทำให้เกิดการ .bash_profile ไม่ถูกดำเนินการ ดังนั้นเราจึงลงเอยด้วยเชลล์ที่ถูกจำกัดแต่เป็นแบบปกติ เส้นทางดังนั้นเราจึงสามารถโทร ทุบตี ที่นั่นเพื่อหลบหนี
สิ่งที่ฉันต้องการบรรลุ:
- ไม่ควรมีวิธีหลีกเลี่ยงเชลล์ที่ถูกจำกัดสำหรับผู้ใช้ที่เชื่อมต่อผ่าน SSH
- ตามหลักการแล้ว จะยังคงสามารถเรียกใช้คำสั่งที่อนุญาตในเชลล์ที่ถูกจำกัดได้โดยใช้
ssh user@server allow_command
- การกำหนดค่าไม่ควรเป็นแบบ SSH เท่านั้น ดังนั้นผู้ใช้ที่เข้าสู่ระบบ เช่น บน TTY ควรถูกจำกัดเช่นกัน