回答:
一般に、これを行うことは、他の人がリストした理由のために悪いセキュリティ慣行です。ただし、割り当てのポイントは、さまざまな条件に基づいて条件付き構成セクションを作成できることを教えることだと思います。
これを行う方法は、Match
条件付きブロック* を使用することです。
Match User bob
Subsystem sftp /bin/false
詳細についてsshd_config(5)
は、Match
セクションの下を参照してくださいGroup
。
*それを行うには複数の方法があります。
これは意味がありません、それは無用のあいまいさによるセキュリティです。SSHを使用できるユーザーは、SSHセッションを介して読み取ることができるファイルを転送できます。権限がある場合は、書くこともできます。
例として、次の方法(scp / sftpセッションは不要)を使用して、ssh経由で/ etc / passwdをダウンロードできます。ssh foo@bar.com "cat / etc / passwd"> passwdcopy
SSHを介して画面に表示できる場合は、ファイルとして簡単にコピーできます。
これが理にかなっている唯一の方法は、セキュリティポリシーを実施するカスタム制限付きシェルがある場合です。
ただし、sshシェルを介して実行できる任意のコマンドをsftp / scpを介して実行することはできないため、これの逆は理にかなっています(sshシェルを無効にし、scp / sftpを有効のままにします)。
PS:付与しているSSHシェルは、任意の実行を許可する標準シェルであると想定しています。そうでない場合は、次を参照してください:特定のユーザーまたはグループのsftpサブシステムを無効にする方法は?sshd_configのSubsystem configオプションを見てください。
Match Group nosft
Subsystem sftp /bin/false
このためにグループを使用することを好みます。
シェルが制限されているユーザーとの組み合わせで便利です。シェルにデータをダンプするスクリプトを設定することで、データベースのsql-dumpにアクセスできるように、クライアントにsshアクセスを許可することがあります。SCPからそれらを切り離すことも賢明なアイデアのようです。cat
sshを介してファイルを転送するための実行にアクセスできません。
Directive 'Subsystem' is not allowed within a Match block
SFTPをグローバルに有効にし、一部のユーザーに対してのみSFTPを無効にすることができます。
ユーザーに通常のシェルプロンプトを表示させたい場合、これは機能しません。また、シェルにアクセスできる場合はほとんどのものを回避できるため、意味がありません。 特定のプログラムへのアクセスのみを許可する場合にのみ機能します。
SSH経由でいくつかのgitリポジトリへのアクセスを許可したいので、個人的にこれが必要です。また、不要なシステムを無効にしたいのです。その場合、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
owner
アウトバウンドアクセス用のモジュール。これは、あなたがレッドチームによってペンテストされることを前提としています。システムにアクセスするすべての人が常にルールに従い、悪意を持たない場合、私のアプローチは手荒く、過度に複雑になります。