ฉันต้องการจำกัดผู้ใช้บางคนบนเซิร์ฟเวอร์ของฉันให้สามารถดำเนินการคำสั่งบางอย่างเท่านั้น ในการทำเช่นนี้ วิธีทั่วไปที่สุดที่ฉันสามารถหาได้คือการใช้ ทุบ
.
แม้ว่าฉันจะสามารถพบเว็บไซต์มากมายที่พูดถึง 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 ควรถูกจำกัดเช่นกัน