web-dev-qa-db-ja.com

Debian:SSH:「PermitRootLogin = forced-commands-only」が機能しなくなりました

DebianLennyを実行しているサーバーがいくつかあります。

つい最近、sshのPermitRootLogin = forced-commands-onlyディレクティブを発見しました。これにより、より一般化されたroot sshアクセスを有効にすることなく、スクリプト化されたrsyncをsslキーを使用してrootとして実行できます。

ただし、先週、これは機能しなくなりました-すべてのサーバーに表示されます-理由がわかりません。

PermitRootLogin = yesですべてが正常に機能し続けますが、特にパスワードを使用して、ルートログインをブロックしたいと思います。

それが機能しなくなった日、スイッチの1つでいくつかのポートを再構成しました(後で元に戻しました)が、PermitRootLoginをyesに設定しても機能するため、これに影響することはわかりません。

forced-commands-onlyディレクティブが明らかに機能しなくなった理由を診断するにはどうすればよいですか?

5
Brent

「PermitRootLoginforced-commands-only」では、rootとしてSSHを介するすべての接続で公開鍵認証を使用する必要があり、コマンドをその鍵に関連付ける必要があります(「validate-rsync」など)。

Rootとしてログインしたいが、キーのみを使用する場合は、次を使用します。

PermitRootLogin = without-password

Rsyncを定義済みのssh-keyに制限するには、authorized_keysで指定できます。

from="<ip>",command="/usr/local/sbin/validate-rsync" ssh-dss AAAAZ5Hbl......

そして、このラッパーを/ usr/local/sbin/validate-rsyncに保存します

#!/bin/sh 

case "$SSH_ORIGINAL_COMMAND" in 
*\&*) 
echo "Rejected" 
;; 
*\(*) 
echo "Rejected" 
;; 
*\{*) 
echo "Rejected" 
;; 
*\;*) 
echo "Rejected" 
;; 
*\<*) 
echo "Rejected" 
;; 
*\`*) 
echo "Rejected" 
;; 
*\|*) 
echo "Rejected" 
;; 
rsync\ --server*) 
$SSH_ORIGINAL_COMMAND 
;; 
*) 
echo "Rejected" 
;; 
esac 

同じことを行うためにrsyncに付属しているもう少し複雑なスクリプトがあります http://www.samba.org/ftp/unpacked/rsync/support/rrsync

9
rkthkr

Rsyncがrootとしてログインできる場合、誰でもできます。サーバーがノックしているものに違いはありません。私はそれが実験的/ハッキーだったか、あるいは彼らはそれが「はい」より安全ではないことに気づいたと信じています。

Rootのパスワード認証を無効にし(たとえば、パスワードを完全に削除し、必要に応じてSudoを使用する)、キー認証方法に依存することをお勧めします。

0
kolypto