เราพบวิธีแก้ไขปัญหาเมื่อเร็ว ๆ นี้ซึ่งมีลักษณะเช่นนี้:
/ 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? พวกเขาสามารถเข้าถึงได้หรือไม่