私のプロジェクトでは、一部のユーザーのsftpを無効にする必要がありますが、それらのユーザーは引き続きssh経由で接続する必要があります。これを実装する方法を知っている人はいますか?
/etc/ssh/sshd_config
でファイルを変更する提案を確認しましたが、何を変更すればよいかわかりません。
一般的に、これを行うことは、他の人が挙げている理由から、セキュリティの悪い習慣です。ただし、割り当てのポイントは、さまざまな基準に基づいて条件付き構成セクションを持つことができることを教えることだと思います。
これを行う方法はMatch
条件付きブロック*を使用することです。
_Match User bob
Subsystem sftp /bin/false
_
詳細およびMatch
の照合については、Group
セクションのsshd_config(5)
を参照してください。
*それを行うには複数の方法があります。
これは意味をなさず、無用のあいまいさによるセキュリティです。 SSHを使用できるすべてのユーザーは、SSHセッションを介して読み取ることができるすべてのファイルを転送できます。書き込み権限がある場合は、書き込みもできます。
例として、次の方法を使用してssh経由で/ etc/passwdをダウンロードできます(scp/sftpセッションは必要ありません)。ssh [email protected] "cat/etc/passwd"> passwdcopy
SSH経由で画面に表示される場合は、簡単にファイルとしてコピーできます。
これが意味を持つ唯一の方法は、セキュリティポリシーを適用するカスタムの制限付きシェルがある場合です。
ただし、sshシェルを介して実行できるsftp/scpを介して任意のコマンドを実行することはできないため、これの逆は意味があります(sshシェルを無効にし、scp/sftpを有効のままにします)。
PS:付与するSSHシェルは、任意の実行を許可する標準シェルであると想定しています。そうでない場合は、次を参照してください: 特定のユーザーまたはグループのsftpサブシステムを無効にする方法? で、sshd_configのサブシステム構成オプションを確認します。
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
_
Match Group nosft
Subsystem sftp /bin/false
これにはグループを使用することを好みます。
シェルが制限されているユーザーと組み合わせると便利です。シェルにデータをダンプするスクリプトを設定して、データベースのsql-dumpにアクセスできるように、sshアクセスをクライアントに与えることもあります。 scpからそれらを切り離すことも賢い考えのようです。 ssh経由でファイルを転送するためにcat
を実行するためのアクセス権がありません。
Match User bob
MaxSessions 0
CentOS 6.6でテストされ、動作しています。少なくとも新しいCentOSバージョンでは、Matchでサブシステムを使用できないことに注意してください。 sshd_configのマンページには、一致条件で許可される制限されたキーワードがリストされています。
scponly を見て、逆を行うことができます。scp/ sftpのみを許可し、Shellアクセスは許可しません。
上記の@Nathanに同意しますが、これはあまり意味がありません。うまくいかない場合は、/ etc/ssh/sshd_configファイルを編集して、次の行を削除/コメントアウトしてみてください。
サブシステムsftp/usr/libexec/openssh/sftp-server
ユーザーにホームディレクトリを与えない
usermod username -d /bin/false
ファイル/ etc/ssh/sshd_configのサブシステムsftp/usr/libexec/openssh/sftp-serverをサブシステムsftp/dev/null/usr/libexec/openssh/sftp-serverに変更します。
次にsshを再起動します
service ssh restart
それは私には有効です、debian。