グローバルおよびユーザー/グループごとにSSHを有効にし、SFTPを無効にすることができます。
SSH経由でいくつかのgitリポジトリへのアクセスを許可したいので、個人的にこれが必要です。また、不要なシステムを無効にしたいのです。その場合、SFTPは必要ありません。
世界的に
いくつかの方法で、すべてのユーザーのSFTPを無効にできます。
不足しているサブシステム
SSHで使用されるSFTPデーモンは、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」のサブシステムを定義しないで十分であることを示唆しています。
偽りの嘘
SSHで使用されるSFTPデーモンを使用できないものに設定することにより、SFTPを無効にすることもできます。たとえば、「sftp」サブシステムを/bin/false
次のように構成します。
Subsystem sftp /bin/false
何かがSFTP経由でログインしようとすると、SSHデーモンは「sftpデーモン」を生成しようとします/bin/false
。/bin/false
プログラムは、一つのことを行い、それはエラーコードを返すことです。SFTP接続の試行は事実上拒否されます。
ユーザー/グループごと
ユーザー、グループ、またはその他のいくつかの基準ごとにSFTPを無効にすることもできます。
ユーザーに通常のシェルプロンプトを表示させたい場合、これは機能しません。また、シェルにアクセスできる場合はほとんどのものを回避できるため、意味がありません。
特定のプログラムへのアクセスのみを許可する場合にのみ機能します。
マッチング
一連のユーザーを一致させるには、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
「stephen」および「maria」ユーザーに一致
Match Group wheel,adams,simpsons
「wheel」、「adams」、「simpsons」グループに一致
さらに情報が必要な場合は、sshd_config(5)
マニュアルに多数の情報が記載されています。
強制コマンド
通常、SSH経由で接続するときにユーザーのログインシェルを取得しますが、特定のコマンドを強制するようにSSHを構成できます。このコマンドは、SFTPを含むすべてのSSH接続に対して強制されるため、必要なコマンドを強制するオプションがある場合があります。
強制するコマンドは、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