itunes.sh
:
#!/bin/sh
set -f
set -- $SSH_ORIGINAL_COMMAND
case "$1" in
/home/dimm0k/progs/scripts/*)
;;
*)
exit 1
esac
command="${1#/home/dimm0k/progs/scripts/}"
shift
case "$command" in
*/*)
# Simplest is to reject anything with a slash...
;;
.*)
# ...and anything starting with dot.
# If you need to whitelist subdirectories of /home/dimm0k/progs/scripts
# then you need much more sophisticated pathname parsing and care.
;;
*)
;;
esac
exec "/home/dimm0k/progs/scripts/$command" "$@"
rsync.sh
:
#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected 1"
;;
*\;*)
echo "Rejected 2"
;;
rsync*)
$SSH_ORIGINAL_COMMAND
;;
*true*)
echo $SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected 3"
;;
esac
ベストアンサー1
セキュリティ目標を定義していないため、ご質問は意味がありません。 「安全」とは意味がありません。セキュリティは何のためですか?セキュリティ目標は、「秘密鍵を知らない攻撃者はシステム上のすべてのファイルにアクセスできません」(あなたのスキームが明らかに満足しています)、または「キーを除いてシステムにアクセスできない攻撃者はシステムにアクセスできません。 」のようなものです。以下のファイルにのみアクセスし/home/dimm0k
てランダムコマンドを実行しないでください。」(あなたのシナリオが満たされていません)
しかし、ここにあなたが考えていなかったかもしれないいくつかの点があります。
itunes.sh
スクリプトには何かが拒否されたと主張するコメントがありますが、ステートメントにはコードが含まれていないため、コマンド全体は機能case
しませcase
ん/home/dimm0k/progs/scripts/
。rsync.sh
スクリプトは、独自のコマンドrsync
だけでなく、で始まるすべてのコマンドを受け入れますrsync
。rsync.sh
台本での拒絶は奇妙なこと&
だ;
。文字列はシェルで評価されないため、&
シェル構文の意味とシェル構文を考慮すると関係ありません。;
この文字列がシェルによって実行される場合、他の多くの文字、特に`$|<>
。- どのスクリプトでも、呼び出し側が最終的に実行されるコマンドに任意のオプションを渡すことができます。これが
itunes.sh
許可するのは、何があるかによって異なりますが、それは/home/dimm0k/progs/scripts/
悪いかもしれません。rsync.sh
たとえば、オプションを渡して任意のコマンドを実行できるようにするには、これを使用します-e
。 - ユーザーがアクセスできるファイルを制限することはありません。特に、ユーザーが
~/.ssh/authorized_keys
その中のファイルに書き込むことができる場合は、コマンド/home/dimm0k/progs/scripts/
で上書きしてから再度ログインしてアップロードした内容を実行できます。
全体的に、このスクリプトは私が見たセキュリティ対策を実際には実行しません。セキュリティを確保するために、ユーザーが任意のコマンドを実行できるようにするものとして扱います。機能的には、コマンドの変更は奇妙であり、協力ユーザーがスクリプトを使用すると、追加のエスケープエラーが発生する可能性があります。
ユーザーにいくつかの制限を適用したい場合は、役に立つことはできません。自分で行うことを忘れて、次の強力なツールを使用してください。RSSHまたはスポリ。 chrootingも見てください。可能であれば、最小限の権限を持つ専用アカウントを使用してください。より分離するために、ユーザーがコンテナまたは仮想マシン内でのみログインできるようにします。