เป็นไปได้ที่จะเปิดใช้งาน SSH และปิดการใช้งาน SFTP ทั้งแบบโกลบอลและต่อผู้ใช้ / กลุ่ม
ฉันต้องการสิ่งนี้เป็นการส่วนตัวเพราะฉันต้องการให้สิทธิ์การเข้าถึงที่เก็บ git บน SSH และฉันต้องการปิดการใช้งานระบบที่ไม่ต้องการ ในกรณีนั้นไม่จำเป็นต้องใช้ SFTP
ทั่วโลก
คุณสามารถปิดการใช้งาน SFTP สำหรับผู้ใช้ทั้งหมดได้สองวิธี
ระบบย่อยที่หายไป
SFTP daemon ที่ใช้โดย SSH สามารถกำหนดค่าผ่านSubsystem
คีย์เวิร์ด จากsshd_config(5)
คู่มือ:
Subsystem
Configures an external subsystem (e.g. file transfer daemon).
Arguments should be a subsystem name and a command (with optional
arguments) to execute upon subsystem request.
The command sftp-server(8) implements the “sftp” file transfer
subsystem.
Alternately the name “internal-sftp” implements an in-process
“sftp” server. This may simplify configurations using
ChrootDirectory to force a different filesystem root on clients.
By default no subsystems are defined.
บรรทัดสุดท้ายแสดงว่ามันควรจะเพียงพอที่จะไม่กำหนดระบบย่อยใด ๆ สำหรับ "sftp"
การโกหกที่ผิด ๆ
คุณสามารถปิดการใช้งาน SFTP โดยการตั้งค่า SFTP daemon ที่ใช้โดย SSH เป็นสิ่งที่ใช้ไม่ได้ ตัวอย่างเช่นกำหนดค่าระบบย่อย "sftp" เป็น/bin/false
:
Subsystem sftp /bin/false
เมื่อสิ่งที่จะพยายามที่จะเข้าสู่ระบบผ่าน SFTP, SSH ภูตจะพยายามที่จะวางไข่ "ภูต /bin/false
SFTP" /bin/false
โปรแกรมไม่เพียงสิ่งเดียวเท่านั้นและนั่นคือการกลับรหัสข้อผิดพลาด ความพยายามในการเชื่อมต่อ SFTP ถูกปฏิเสธอย่างมีประสิทธิภาพ
ต่อผู้ใช้ / กลุ่ม
นอกจากนี้ยังสามารถปิดการใช้งาน SFTP ต่อผู้ใช้กลุ่มหรือเกณฑ์อื่น ๆ สองสามข้อ
สิ่งนี้ใช้ไม่ได้หากคุณต้องการให้ผู้ใช้ของคุณได้รับพรอมต์เชลล์ปกติ และมันก็ไม่สมเหตุสมผลเพราะคุณสามารถหลีกเลี่ยงเนื้อหาส่วนใหญ่ได้หากคุณมีสิทธิ์เข้าถึงเชลล์
มันจะทำงานเฉพาะในกรณีที่คุณต้องการให้การเข้าถึงโปรแกรมเฉพาะ
การจับคู่
เพื่อให้ตรงกับชุดของผู้ใช้คุณสามารถกำหนดค่า SSH กับMatch
คำหลัก จากsshd_config(5)
คู่มือ:
Match
...
The arguments to Match are one or more criteria-pattern pairs or the
single token All which matches all criteria. The available criteria
are User, Group, Host, LocalAddress, LocalPort, and Address. The
match patterns may consist of single entries or comma-separated
lists and may use the wildcard and negation operators described in
the PATTERNS section of ssh_config(5).
...
ตัวอย่างสองตัวอย่าง:
Match User eva
ตรงกับผู้ใช้ "eva"
Match User stephen,maria
ตรงกับผู้ใช้ "stephen" และ "maria"
Match Group wheel,adams,simpsons
ตรงกับกลุ่ม "wheel", "adams", "simpsons"
หากคุณต้องการข้อมูลเพิ่มเติมมีโหลดอยู่ในsshd_config(5)
คู่มือ
คำสั่งบังคับ
โดยปกติคุณจะได้รับเชลล์ล็อกอินของผู้ใช้เมื่อคุณเชื่อมต่อผ่าน SSH แต่ SSH สามารถกำหนดค่าให้บังคับคำสั่งบางอย่างได้ คำสั่งถูกบังคับสำหรับการเชื่อมต่อ SSH ใด ๆ รวมถึง SFTP และดังนั้นคุณอาจมีตัวเลือกในการบังคับใช้คำสั่งที่คุณต้องการ
คำสั่งเพื่อบังคับสามารถกำหนดค่าด้วยForceCommand
คำสำคัญ จาก
sshd_config(5)
คู่มือ:
ForceCommand
Forces the execution of the command specified by ForceCommand,
ignoring any command supplied by the client and ~/.ssh/rc if
present. The command is invoked by using the user's login shell
with the -c option. This applies to shell, command, or subsystem
execution. It is most useful inside a Match block. The command
originally supplied by the client is available in the
SSH_ORIGINAL_COMMAND environment variable. Specifying a command of
“internal-sftp” will force the use of an in-process sftp server that
requires no support files when used with ChrootDirectory. The
default is “none”.
ดังนั้นคุณสามารถบังคับคำสั่ง จำกัด ForceCommand <your command>
ที่คุณต้องการใช้ ตัวอย่างเช่น:
Match User kim
ForceCommand echo 'successful login man, congrats'
ตัวอย่าง
git-shell
ในกรณีของฉันที่ฉันต้องการที่จะให้การเข้าถึงคอมไพล์ผมจะต้องให้ผู้ใช้มีการเข้าถึง นี่คือส่วนที่ปิดใช้งาน SFTP สำหรับผู้ใช้ git ของฉันพร้อมกับตัวเลือกความปลอดภัยบางส่วน:
Match Group git
# have to do this instead of setting the login shell to `git-shell`,
# to disable SFTP
ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"
# disable stuff we don't need
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
PermitOpen none
PermitTunnel no
PermitTTY no
X11Forwarding no