แทนที่จะใช้ ...
ssh://user@mysite.net:1234/mnt/thing/usr/prj
ฉันต้องการใช้
ssh://user@mysite.net:1234/prj
ฉันจะทำสิ่งนี้ได้อย่างไร มันจะดีหากผู้ใช้ไม่สามารถเข้าถึง/home
, /var
และเช่น ฉันต้องการเพียงสิ่งนี้สำหรับการถ่ายโอนข้อมูล
แทนที่จะใช้ ...
ssh://user@mysite.net:1234/mnt/thing/usr/prj
ฉันต้องการใช้
ssh://user@mysite.net:1234/prj
ฉันจะทำสิ่งนี้ได้อย่างไร มันจะดีหากผู้ใช้ไม่สามารถเข้าถึง/home
, /var
และเช่น ฉันต้องการเพียงสิ่งนี้สำหรับการถ่ายโอนข้อมูล
คำตอบ:
มองเข้าไปใน'เชลล์' scponlyและตั้งค่า chroot
/prj
สร้างผู้ใช้ไดเรกทอรีบ้านซึ่งเป็น
สร้าง~/.ssh/authorized_keys
ไฟล์สำหรับผู้ใช้ที่มีกุญแจสาธารณะของผู้ใช้รีโมตรวมถึงข้อ จำกัด บางประการเกี่ยวกับคำสั่งและตัวเลือก ssh ที่มีให้เช่น:
command="/usr/bin/scp-wrapper",no-port-forwarding,no-X11-forwar
ding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQA
BAAABAQCblahblahblahblahblahblahblahblahblahblahblahblahblahbla
hblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahbl
ahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahb
lahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah
blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahbla
hblahblahblahblahblahblahblahblahB user@site.com
ทำให้เข้มงวดมากที่สุด
จากนั้นคุณจะต้องสร้าง wrapper นั้นสำหรับ SCP บางอย่างเรียบง่ายดังต่อไปนี้จะใช้งานได้ แต่คุณจะต้องเพิ่มการตรวจสอบและทดสอบด้านความปลอดภัยที่ใส่ใจมากขึ้นก่อนที่จะใช้ในการผลิต
#!/usr/bin/env bash
$SSH_ORIGINAL_COMMAND
นี่เป็นเพียงตัวอย่างของสิ่งที่เป็นไปได้ ในกรณีนี้คำสั่ง scp แบบเต็มจะถูกบันทึกในตัวแปรสภาพแวดล้อม$SSH_ORIGINAL_COMMAND
แต่เนื่องจากคุณไม่สามารถระบุคำสั่งที่มีอาร์กิวเมนต์ในcommand=
ส่วนของ.authorized_keys
ไฟล์ได้คุณจำเป็นต้องใช้ wrapper
ผู้ใช้อาจยังคงสามารถเข้าถึงไดเรกทอรีสาธารณะเหนียวเช่น / tmp แต่พวกเขาจะไม่สามารถท่องไปรอบ ๆ / var หรือ / home
และพวกเขาอาจจะสามารถดึงไฟล์ออกจากเซิร์ฟเวอร์ของคุณ แต่คุณสามารถสรุปได้ทั้งหมดนี้chroot
และรักษาความปลอดภัยของระบบได้อีกเล็กน้อยโดยใช้ความพยายามเพียงเล็กน้อย
ln -s /mnt/thing/usr/prj /prj