2017-08-08 5 views
1

私は現在、単純なセキュリティ監査スクリプトを作成しています。これは、構成の不一致ごとにOK/Errorを出力します。 シナリオは次である - 例えば、場合場合sshd_configファイルのために、私は次の置かれている:SSHD構成チェックbashスクリプト

if [ "`grep -E ^Protocol /etc/ssh/sshd_config`" == "Protocol 1" ]; then 
    echo "Protocol should be set to 2"; 
fi 

問題がある - いくつかの変数とその値の間に複数のスペースがある場合は何? (プロトコル2または例のPermitRootLogin No)。 /*s/sなどのトリックは役に立たなかった。

誰かがここにケースを投稿するためのbashスクリプトでSSHD Configをチェックするサンプルを持っていますか? ありがとうございます!

答えて

3

grepの-Eオプションは拡張正規表現モードにします。だから、あなたは(^Protocol +1が1つの以上のスペースが続くProtocolで始まる行を意味し、次に文字1)拡張正規表現を使用することができます。

if grep -Eq '^Protocol +1' /etc/ssh/sshd_config; then 
    echo "Protocol should be set to 2"; 
fi 

[yY]は文字yまたはYを意味します

if grep -Eq '^PermitEmptyPasswords +[yY][eE][sS]' /etc/ssh/sshd_config; then 
    echo "PermitEmptyPasswords should be set to no"; 
elif grep -Eq '^PermitEmptyPasswords +[nN][oO]' /etc/ssh/sshd_config; then 
    echo "PermitEmptyPasswords meets requirements"; 
fi 

その他多くの興味深い機能。メモ:

  • sshd_configファイルに一致する行が複数ある場合が考えられます。
  • -q grepオプションは、一致する行の印刷を抑制します。 grepは一致する行が見つかった場合はステータス0で終了し、ステータス1(見つからない)または2(エラー)で終了します。
  • ifステートメントの直後に、実行するコマンドのリストを続けることができます。リストの終了ステータスが0の場合は、thenブランチが使用されます。私たちの場合、リストはちょうどgrepです。
+0

どのようにしてはいといいえ(例えばPermitEmptyPasswords)用のケースを置くためにケース非感受性のためにはgrepで-iを追加しましたか? 例: の場合grep -Eq '^ PermitEmptyPasswords + yes'/etc/ssh/sshd_config; echo "値が要件を満たしていません"; else "値は要件を満たしています" <<< - "no"の値を持つ場合は、この場所、1つまたは複数のものに何を入力しますか? –

+0

@Kristianこれを私の答えに加えました。拡張された正規表現についてのドキュメントを見つけることを試みてください。これは非常に有用な知識です。 –

+0

ヒントをお寄せいただきありがとうございます。私はスクリプト作成の新機能ですので、現在の手順の1/1は明らかではありません。 –

0


このお試しください:プロトコル2行を取得するために

if [[ $(cat /etc/ssh/sshd_config | awk '/^Protocol/{print $2}') != 2 ]]; then 
    echo "Protocol should be set to 2" 
fi 
0

使用はgrepを。

次にハッシュが除外されるべき最後に、このようなプロトコル2,1

として2を含むことができるプロトコル1行を削除します。最後に必要な文字列をエコーし​​ます。グレップで

grep -i "Protocol 2" /etc/ssh/sshd_config | grep -v "#"|grep -v "Protocol 1"|| echo "Protocol 2 is needed" 
関連する問題