Có thể kích hoạt SSH và vô hiệu hóa SFTP trên toàn cầu và cho mỗi người dùng / nhóm.
Cá nhân tôi cần điều này bởi vì tôi muốn cấp quyền truy cập vào một số kho git qua SSH và tôi muốn vô hiệu hóa các hệ thống không cần thiết. Trong trường hợp đó SFTP là không cần thiết.
Toàn cầu
Bạn có thể tắt SFTP cho tất cả người dùng theo một số cách.
Hệ thống con bị thiếu
Trình nền SFTP được sử dụng bởi SSH có thể được cấu hình thông qua Subsystem
từ khóa. Từ sshd_config(5)
hướng dẫn:
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.
Dòng cuối cùng cho thấy rằng nó là đủ để không xác định bất kỳ hệ thống con nào cho "sftp".
Một lời nói dối sai lầm
Bạn cũng có thể vô hiệu hóa SFTP bằng cách đặt trình nền SFTP được SSH sử dụng thành thứ gì đó không sử dụng được. Ví dụ: định cấu hình hệ thống con "sftp" thành /bin/false
:
Subsystem sftp /bin/false
Khi một cái gì đó sẽ cố gắng đăng nhập thông qua SFTP, trình nền SSH sẽ cố gắng sinh ra "sftp daemon" /bin/false
. Các /bin/false
chương trình không chỉ có một điều, và đó là để trả lại một mã lỗi. Nỗ lực kết nối SFTP bị từ chối một cách hiệu quả.
Mỗi người dùng / nhóm
Cũng có thể vô hiệu hóa SFTP cho mỗi người dùng, nhóm hoặc một vài tiêu chí khác.
Điều này không hoạt động nếu bạn muốn người dùng của mình nhận được một dấu nhắc shell thông thường. Cũng không có nghĩa gì, vì bạn có thể phá vỡ hầu hết mọi thứ nếu bạn có quyền truy cập shell.
Nó sẽ chỉ hoạt động nếu bạn chỉ muốn cấp quyền truy cập vào một chương trình cụ thể.
Phù hợp
Để khớp với nhóm người dùng, bạn có thể định cấu hình SSH với Match
từ khóa. Từ sshd_config(5)
hướng dẫn:
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).
...
Một vài ví dụ:
Match User eva
phù hợp với người dùng "eva"
Match User stephen,maria
phù hợp với người dùng "stephen" và "maria"
Match Group wheel,adams,simpsons
phù hợp với các nhóm "bánh xe", "adams", "simpsons"
Nếu bạn muốn biết thêm thông tin, có tải trong sshd_config(5)
hướng dẫn.
Lệnh cưỡng bức
Thông thường, bạn nhận được vỏ đăng nhập của người dùng khi bạn kết nối qua SSH, nhưng SSH có thể được cấu hình để buộc một lệnh nhất định. Lệnh được buộc cho bất kỳ kết nối SSH nào, bao gồm SFTP, và do đó bạn có thể có tùy chọn để buộc lệnh bạn muốn.
Lệnh bắt buộc có thể được cấu hình với ForceCommand
từ khóa. Từ
sshd_config(5)
hướng dẫn:
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”.
Vì vậy, bạn có thể buộc lệnh bị ràng buộc mà bạn muốn sử dụng ForceCommand <your command>
. Ví dụ:
Match User kim
ForceCommand echo 'successful login man, congrats'
Thí dụ
Trong trường hợp tôi muốn cấp quyền truy cập git, tôi chỉ cần người dùng có quyền truy cập git-shell
. Đây là phần vô hiệu hóa SFTP cho người dùng git của tôi, cùng với một số tùy chọn bảo mật:
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