Linuxボックス(この場合はCentos 5.2)でユーザーを構成してscpを使用してファイルを取得できるが、実際にはSSHを使用してサーバーにログインできないようにする方法はありますか?
rsshシェル( http://pizzashack.org/rssh/ )は、まさにこの目的のために設計されています。
RHEL/CentOS 5.2にはrsshのパッケージが含まれていないため、RPMを取得するにはここを参照してください: http://dag.wieers.com/rpm/packages/rssh/
これを使用するには、次のように新しいユーザーのシェルとして設定します。
useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1
..または次のようにシェルを既存のものに変更します。
chsh -s /usr/bin/rssh scpuser1
..編集/etc/rssh.conf
rsshシェルを設定するには-特にallowscp
行のコメントを外して、すべてのrsshユーザーのSCPアクセスを有効にします。
(また、chrootを使用して、ユーザーを自宅に収容したままにすることもできますが、それは別の話です。)
私はこれにかなり遅れていますが、sshキーを使用して、許可されている正確なコマンドを〜/ .ssh/authorized_keysファイルで指定できます。
no-port-forwarding、no-pty、command = "scp source target" ssh-dss ...
ターゲットでps toを使用して、正しいコマンド設定を設定する必要がある場合があります。
PS:「-v」を指定してtest scpコマンドを実行すると、次のように表示されます。
debug1: Sending command: scp -v -t myfile.txt
「-t」は文書化されていないscpオプションであり、遠端のプログラムで使用されることに注意してください。これにより、authorized_keysに何を入力する必要があるかがわかります。
編集:このStackOverflowの質問 で(いくつかのリンクを使用して)詳細を確認できます。
サーバー側のbackup_user
という名前のユーザーの場合の、この作業例を次に示します。
サーバー側の~backup_user/.ssh/authorized_keys
コンテンツ(いくつかのセキュリティ制限あり):
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...
〜backup_user /に、コンテンツにアクセスできるディレクトリへのリンクを作成します。
$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT
これで、クライアント側から、次のコマンドが機能するはずです。
scp -v -r -P 2222 -i .ssh/id_rsa_key_file path/to/data backup_user@SERVER:~/CONTENT
このコマンドの機能:
-v
はコマンドとauthorized_keysファイルの両方から削除できます)-r
を削除できます)-P 2222
を削除できます)-i .ssh/id_rsa_key_file
を削除できますpath/to/data
のコンテンツが/path/to/directory/with/accessible/content/
にコピーされますサーバーからクライアントにファイル(または複数)のコピーを作成するには、これを処理するシェルスクリプトを作成する必要があります ここで説明
パーティーには少し遅れますが、OpenSSHのForceCommand
ディレクティブをご覧になることをお勧めします。
Subsystem sftp internal-sftp
Match group sftponly
ForceCommand internal-sftp
確かに、これはSCPではなくSFTPですが、制限付きシェルよりも安全に同じ目標を達成します。さらに、必要に応じてユーザーをchrootできます。
Scponlyの使用をお勧めします。
これは制限されたシェルであり、ユーザーは、サーバーと同じようにSCPファイルを実行できますが、実際にはログインできません。ソフトウェアの情報とソースコードのダウンロードを利用できます here およびpre-コンパイルされたRPMパッケージは EPEL YUMリポジトリ から入手できます。
インストールしたら、新しくインストールした制限付きシェルを使用するために、アクセスを制限する各ユーザーアカウントを構成する必要があります。これは、/ etc/passwdを使用して手動で行うか、次のコマンドを使用できます。usermod -s /usr/bin/scponly USERNAME
MySecureShellを使用してこれを行います。他の制限も設定できます。
https://github.com/mysecureshell/mysecureshell
接続をSFTP/SCPのみに制限します。シェルアクセスなし。
パーティーには非常に遅れていますが、gitユーザーのシェルを/ usr/bin/git-Shellに設定するだけです。対話型ログインを許可しない制限付きシェルです。 「su -s/bin/bash git」またはgitユーザー名が何であっても、ユーザーにsuを実行できます。
ファイルをscpするだけでログインはできないようにしたいユーザーのために、セキュアFTPサーバーで scponly と呼ばれる疑似シェルを使用します。
Authorized_keysファイルのcommand = "..."機能を使用するのが良い方法だと思いました。 ( このページ からの提案)
実行するコマンドは、scp(およびrsync)で始まる引数をテストするコマンドです。
次に、authorized_keysファイルを示します。
# authorized_keys
command="/usr/local/bin/remote-cmd.sh" ssh-rsa.....== user@pewpew
次に、remote-cmd.shの内容を示します。
#!/bin/bash
# /usr/local/bin/remote-cmd.sh
case $SSH_ORIGINAL_COMMAND in
'scp'*)
$SSH_ORIGINAL_COMMAND
;;
'rsync'*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Access Denied"
;;
esac
ユーザーのauthorized_keysファイルを保護する必要があると思いますが、私の目的は、まったく新しいユーザーを作成せずに、バックアップに使用できるパスワードなしのキーを用意し、キーにシェルを与えないようにすることでした(わかりました、簡単に)
ユーザーのログインシェルを制限的なものに変更します。これにより、ユーザーはscp、sftp-serverおよびrsyncのみであり、安全でない引数が許可されていないことも確認します(例scp -S ...およびrsync -e ...は安全ではありません。ここを参照してください http://exploit-db.com/exploits/24795 )。このような制限付きログインシェルの例:
これらのいずれかをchrootまたは別の制限された環境(Linuxでは nsjail など)で実行して、ネットワークアクセスを無効にし、読み取り可能なディレクトリを(ホワイトリストに)簡単に制御したり、書かれた。
command="..."
で~/.ssh/authorized_keys
を使用することはお勧めしません。慎重な追加の保護(ユーザーに対するchmod -R u-w ~
など)がないと、悪意のあるユーザーが新しいバージョンの~/.ssh/authorized_keys
をアップロードできるためです。 ~/.ssh/rc
または~/.bashrc
、したがって、任意のコマンドを含めて実行することができます。
これは最も優雅な解決策ではありませんが、このようなものをユーザーの.bashrcに投げることができます
if [ "$TERM" != "dumb" ]; then
exit
fi
SCPユーザーは「ダム」のTERMを取得し、他のユーザーは通常vt100を取得することがわかりました。
ユーザーがおそらく新しい.bashrcをscpする可能性があると思います。これにより、これは最良のソリューションではありませんが、迅速でダーティなソリューションの場合、これは機能します