可以全局和每个用户/组启用SSH并禁用SFTP。
我个人需要这样做,因为我想允许通过SSH访问某些git存储库,而且我想禁用不需要的系统。在这种情况下,不需要SFTP。
全球范围
您可以通过两种方法为所有用户禁用SFTP。
缺少的子系统
可以通过Subsystem
关键字配置SSH使用的SFTP守护程序。从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”定义任何子系统就足够了。
虚假的谎言
您还可以通过将SSH使用的SFTP守护程序设置为不可用的方式来禁用SFTP。例如,将“ sftp”子系统配置为/bin/false
:
Subsystem sftp /bin/false
当某些东西尝试通过SFTP登录时,SSH守护程序将尝试生成“ sftp守护程序” /bin/false
。该/bin/false
程序只做一件事,那就是返回一个错误代码。SFTP连接尝试实际上被拒绝。
每个用户/组
也可以按用户,组或其他几个条件禁用SFTP。
如果您希望用户获得常规的shell提示,则此方法不起作用。这也没有意义,因为如果您具有Shell访问权限,则可以绕开大多数内容。
仅当您只想授予对特定程序的访问权限时,它才起作用。
匹配
要匹配一组用户,可以使用Match
关键字配置SSH 。从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
匹配“斯蒂芬”和“玛丽亚”用户
Match Group wheel,adams,simpsons
与“ wheel”,“ adams”,“ simpsons”组匹配
如果需要更多信息,请在sshd_config(5)
手册中进行加载。
强制命令
通常,通过SSH连接时,您会获得用户的登录Shell,但可以将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访问权限的情况下,我只需要用户有权访问git-shell
。这是为我的git用户禁用SFTP的部分,以及一些安全选项:
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