SSH TUNNELING の権限をonlyに許可するようにSSHサーバーのユーザーを制限するにはどうすればよいですか?つまり、SSH経由でログインしてもコマンドを実行できません。
私のLinuxサーバーはUbuntu 11.04とOpenWrtです。
サーバー側では、ユーザーのシェルを/bin/true
に設定することで、これを制限できます。これにより、認証は可能になりますが、シェルで実行できないため、実際には何も実行されません。つまり、SSHが提供できるもののサブセットに制限されます。それがポート転送を提供する場合、彼らはまだそれを行うことができます。
クライアント側では、おそらく-N
に接続する必要があります。これにより、クライアントはシェルなどのリモートコマンドを要求することを停止し、認証部分が完了した後に停止します。 これを指摘してくれたコメント者に感謝します。
以下は、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
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以前では、マッチグループは非常に制限されています。