เราพบวิธีแก้ไขปัญหาเมื่อเร็ว ๆ นี้ซึ่งมีลักษณะเช่นนี้:
/ etc / SSH / sshd_config:
...
Subsystem sftp internal-sftp
Match Group sftponly
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
สิทธิ์ไดเรกทอรี:
root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*
ตอนนี้/home
ตอบสนองความต้องการสำหรับการChrootDirectory
และไม่สามารถจดทะเบียนโดยผู้ใช้ที่ จำกัด แต่sftponly
ผู้ใช้จะไม่สามารถเข้าสู่ระบบถ้าไดเรกทอรีบ้านของพวกเขามีการตั้งค่าได้ตามปกติ ( /home/$LOGNAME
): ภายใต้สภาพแวดล้อม chrooted ไดเรกทอรีบ้านของพวกเขาไม่ได้อยู่ภายใน/home
แต่โดยตรงภายใต้ รูต ( /
)
วิธีแก้ปัญหา 1
กำหนดที่อยู่อาศัยของผู้ใช้ที่ถูก จำกัด เป็นลักษณะที่ปรากฏภายใต้ chroot:
root@server:~ # usermod -d /username username
คำเตือน 1
หากผู้ใช้ที่ไม่ จำกัด หรือสคริปต์การดูแลระบบบางรายใช้การขยายตัวหนอนของ bash เช่น~username
นั้นจะขยายเป็น/username
ตอนนี้ซึ่งไม่ใช่สิ่งที่ตั้งใจ
ผู้ดูแลระบบที่สร้างsftponly
ผู้ใช้จะต้องจำไว้ว่าให้ใช้บ้านที่ไม่ใช่ค่าเริ่มต้น แก้ไขได้ด้วยสคริปต์ ซึ่งผู้ดูแลระบบต้องจำไว้ว่าให้ใช้
วิธีแก้ปัญหา 2
นี่เป็นทางเลือกแทนอันก่อนหน้านี้ที่เราใช้:
root@server:~ # ln -s . /home/home
นั่นคือการสร้าง symlink ภายใน/home
เพื่อชื่อของตัวเอง ตอนนี้ภายใต้ chroot /home/username
ชี้ไปที่ไดเรกทอรีเดียวกันโดยไม่ต้อง chroot สำหรับผู้ใช้ที่ถูก จำกัด เข้าสู่ระบบด้วย SFTP /username
มันจะปรากฏเป็น ไดเรกทอรีนี้เขียนได้สำหรับเจ้าของ (ผู้ใช้ที่ จำกัด ) ผู้ใช้ที่ถูก จำกัด ไม่สามารถแสดงรายการพาเรนต์หรือโฮมไดเร็กทอรีของพี่น้องใด ๆ ตามชื่อ
สิ่งเดียวที่พิเศษเกี่ยวกับsftponly
ผู้ใช้คือการมีส่วนร่วมในsftponly
กลุ่ม เราพบว่าจัดการได้ง่ายกว่าวิธีแก้ปัญหา 1
ถ้ำ 2
- คุณไม่สามารถมีชื่อผู้ใช้ 'บ้าน' กับไดเรกทอรีบ้าน
/home/home
- คุณต้องระวังด้วยสคริปต์ที่สำรวจ
/home
ลำดับชั้นและติดตาม symlinks
chroot
เอ็ดผู้ใช้ของตัวเองChrootDirectory
? พวกเขาสามารถเข้าถึงได้หรือไม่