一部のユーザーに対してsftpを無効にし、sshを有効のままにする方法


12

私のプロジェクトでは、一部のユーザーに対してsftpを無効にする必要がありますが、それらのユーザーはまだsshで接続する必要があります。誰もこれを実装する方法を知っていますか?

でファイルを変更する提案を見てきました/etc/ssh/sshd_configが、何を変更すればよいかわかりません。


私がこれを想像できる唯一の方法は、SELinuxでMLSポリシーを使用し、ユーザーがアクセス、実行できるファイル、ディレクトリ、ソケットなどを厳密に制限することです。ownerアウトバウンドアクセス用のモジュール。これは、あなたがレッドチームによってペンテストされることを前提としています。システムにアクセスするすべての人が常にルールに従い、悪意を持たない場合、私のアプローチは手荒く、過度に複雑になります。
アーロン

回答:


7

一般に、これを行うことは、他の人がリストした理由のために悪いセキュリティ慣行です。ただし、割り当てのポイントは、さまざまな条件に基づいて条件付き構成セクションを作成できることを教えることだと思います。

これを行う方法は、Match条件付きブロック* を使用することです。

Match User bob
Subsystem   sftp  /bin/false

詳細についてsshd_config(5)は、Matchセクションの下を参照してくださいGroup

*それを行うには複数の方法があります。


7
それは私のために働いていません。エラー:指令「サブシステム」がマッチブロック内で許可されていません
chrw

サブシステムはMatchブロックで許可されていないため、間違った回答
mikep

6

これは意味がありません、それは無用のあいまいさによるセキュリティです。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オプションを見てください。


4
Match Group nosft
Subsystem   sftp  /bin/false

このためにグループを使用することを好みます。

シェルが制限されているユーザーとの組み合わせで便利です。シェルにデータをダンプするスクリプトを設定することで、データベースのsql-dumpにアクセスできるように、クライアントにsshアクセスを許可することがあります。SCPからそれらを切り離すことも賢明なアイデアのようです。catsshを介してファイルを転送するための実行にアクセスできません。


3
Directive 'Subsystem' is not allowed within a Match block
Patryk 14

サブシステムはMatchブロックで許可されていないため、間違った回答
mikep

4

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

1
これはOPの質問に答えていないが、それはだった私が、私は私自身のユースケースには達成したいものを達成するために非常に有用
Kidburla

同意しません。OPの質問は「一部のユーザーに対してsftpを無効にするが、sshを有効のままにする方法は?」であり、この回答はその方法の1つを説明しています。とにかくそれが有用であるとわかってうれしい!
オード

独自の承認により、「ユーザーに通常のシェルプロンプトを表示させたい場合は機能しません」。これは、「キープのSSHが有効になって」のOPの要件満たしていません
Kidburla

それは良い点です。「シェルアクセスがあればほとんどのものを回避できるので、それは理にかなっています」という理由で、このソリューションに同意したと思います。しかし、私はOPが正確に求めるものへの道を見つけられませんでした、私は今同意します。
オード

ここでは、この答えのより完全なバージョンです:serverfault.com/a/817482は
オード

1
Match User bob
MaxSessions 0

CentOS 6.6でテストおよび動作中。サブシステムは、少なくとも新しいCentOSバージョンではMatchを使用できないことに注意してください。sshd_configのマンページには、Match条件で許可される制限されたキーワードがリストされています。


0

scponlyを見ると逆のことができ、scp / sftpのみを許可し、シェルアクセスは許可しません。

上記の@Nathanに同意しますが、これはあまり意味がありません。設定が完了していない場合は、/ etc / ssh / sshd_configファイルを編集して、次の行を削除/コメントアウトしてみてください。

サブシステムsftp / usr / libexec / openssh / sftp-server


0

ユーザーにホームディレクトリを与えない

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で動作します。


-2

~/authorized_keyconfigure次のようにユーザーキー:

command="/bin/bash" ssh-rsa AAAAB3Nz.........
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.