web-dev-qa-db-ja.com

一部のユーザーのsftpを無効にし、sshを有効にしておく方法

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

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

12
Shaobo Wang

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

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

_Match User bob
Subsystem   sftp  /bin/false
_

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

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

7
bahamat

これは意味をなさず、無用のあいまいさによるセキュリティです。 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のサブシステム構成オプションを確認します。

6
Nathan

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
_
4
aude
Match Group nosft
Subsystem   sftp  /bin/false

これにはグループを使用することを好みます。

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

4
singlow
Match User bob
MaxSessions 0

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

1
Jeff

scponly を見て、逆を行うことができます。scp/ sftpのみを許可し、Shellアクセスは許可しません。

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

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

0
dmourati

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

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。

0
Yusufmm