web-dev-qa-db-ja.com

SSHユーザーがSSHトンネリングのみを許可するように制限するにはどうすればよいですか?

SSH TUNNELING の権限をonlyに許可するようにSSHサーバーのユーザーを制限するにはどうすればよいですか?つまり、SSH経由でログインしてもコマンドを実行できません。

私のLinuxサーバーはUbuntu 11.04とOpenWrtです。

34
LanceBaynes

サーバー側では、ユーザーのシェルを/bin/trueに設定することで、これを制限できます。これにより、認証は可能になりますが、シェルで実行できないため、実際には何も実行されません。つまり、SSHが提供できるもののサブセットに制限されます。それがポート転送を提供する場合、彼らはまだそれを行うことができます。

クライアント側では、おそらく-Nに接続する必要があります。これにより、クライアントはシェルなどのリモートコマンドを要求することを停止し、認証部分が完了した後に停止します。 これを指摘してくれたコメント者に感謝します。

37
Caleb

以下は、X11およびSSHエージェントのソケット転送も許可されないという利点があります。これは、Calebsの方法で許可される場合があります。別の利点は、ユーザーが他の方法でデフォルトのシェルを変更できる場合でも、SSHアクセスがTCP転送のみに制限されることです。

以下を/etc/ssh/sshd_config

Match User that-restricted-guy
  AllowTcpForwarding yes
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

ユーザーthat-restricted-guyすべてのTCP接続をSSH対応マシン経由で転送します(このマシンへの接続、localhostへの接続、さらにはこのマシンから他のマシンへの接続)。

これをさらに制限したい場合(これは良い考えです)、次の操作も実行できます。

Match User even-more-restricted-guy
  PermitOpen 127.0.0.1:12345
  X11Forwarding no
  AllowAgentForwarding no
  ForceCommand /bin/false

これにより、ユーザーeven-more-restricted-guy 127.0.0.1への接続のみを転送するTCPポート12345(SSH対応マシンから見えるため).

ユーザーが通常接続すると、/bin/falseコマンドがトリガーされ、コード1で即座に終了するだけです。これを回避し、転送接続を開いたままにしたい場合は、-Nフラグをsshコマンドに追加します。これはコマンドの実行を試みませんが、TCP転送をセットアップすることを許可します。

後者のセットアップで機能するフォワードコマンドの例:

ssh -L 12345:127.0.0.1:12345 -N even-more-restricted-guy@insert-your-machine
15
aef

Sshのバージョンがそれをサポートするのに十分新しい(openssh 5.x +)と想定してグループを照合することにより、人々がsshで実行できることを制御できます。

基本的には、sftpユーザーのように扱いますが、tcp転送を許可し、オプションで転送先を指定します。ユーザーにホームディレクトリを与えたが、その下にディレクトリを作成しないと、ファイルを転送する権限がないため、ファイルを転送できません。

Match Group                     nicepeople
    PubkeyAuthentication        yes
    PasswordAuthentication      yes
    PermitEmptyPasswords        no
    GatewayPorts                no
    ChrootDirectory             /opt/dummy_location/%u
    ForceCommand                internal-sftp
    AllowTcpForwarding          yes
        PermitOpen              192.168.0.8:22
        PermitOpen              192.168.0.5:8080
    # Or leave out the PermitOpen to allow forwarding to anywhere.
    HostbasedAuthentication     no
    RhostsRSAAuthentication     no
    AllowAgentForwarding        no
    Banner                      none

異なる動作または制限を提供するグループごとに、これらのMatch Groupブロックを繰り返すことができます。

Iptablesを使用して、この人物がネットワークのどこにアクセスできるかをさらに制御できます

/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -j REJECT
/sbin/iptables -I OUTPUT -m owner --gid-owner 500 -m tcp -p tcp -d 192.168.0.0/24 -j ACCEPT

これは、「nicepeople」グループのGIDが500であると想定しています。

上記のsshオプションの一部は、opensshの古いバージョンで使用できますが、[マッチグループ]セクション内では使用できません。 OpenSSH 4.x以前では、マッチグループは非常に制限されています。

2
Aaron