この問題で私を助けてください。これまでのところ、bashスクリプトとして記述したい「find/-perm -4000 -o -perm -2000 | xargs ls -l> suild.list」引数があります。
これをbashスクリプトとして記述し、毎日毎晩実行できるようにしたいと思います。しかし、私はunixスクリプト言語に精通していません。
crontabジョブの場合、* 24 * * *と書く必要がありますか?おもう?しかし、私はスクリプトとして書くのに苦労しています。
この場合、xargs
を使用する必要はありません。 -ls
をfind
と一緒に使用するだけです。
#!/bin/bash
find / -perm -4000 -o -perm -2000 -ls > suild.list
メールを送信し、ファイルに追加してログに記録する場合:
#!/bin/bash
find / -perm -4000 -o -perm -2000 -ls | tee -a suild.list
あなたのコマンドはすでにbashスクリプトです。
ヘッダーを追加する必要があります。
#!/usr/bin/env bash
また、スクリプトに実行可能(+ x)ビットを設定する必要があります。
結果を管理者にメールで送信したい場合は、最後にsuild.listへのリダイレクトを削除できます。
検索/ -perm -4000 -o -perm -2000 -ls | tee -a suild.list
完全なスクリプトを作成したい場合、これでif/elseステートメントを使用するにはどうすればよいですか。例えばこのsuild.listファイルが存在しない場合は、findコマンドを使用して新しいsuidを生成するか、find/-perm -4000 -o -perm -2000 -ls |を使用します。 tee -a suild.list引数を指定し、新しいsuidが作成されている場合は変更を比較します。セキュリティ上の理由から。
スクリプトを実行するたびに完全なリストが必要なのではなく、suid/guidに設定されている新しい/不明なファイルのリストが必要なようです。もしそうなら:
現在の結果のリストを取得します。
# find / -path '/proc' -Prune -perm -4000 -o -perm -2000
/usr/bin/write
/usr/bin/wall
/usr/bin/crontab
/usr/bin/locate
/usr/bin/ssh-agent
結果を見つけて前のリストと比較するシェルスクリプトを作成します。リストはスクリプト内の単なる変数です。あなたはそれがそれ自身のファイルであるかもしれません。
#!/bin/bash
approved="
/usr/bin/write
/usr/bin/wall
/usr/bin/crontab
/usr/bin/locate
/usr/bin/ssh-agent
"
results=$(/usr/bin/find / -path '/proc' -Prune -perm -4000 -o -perm -2000)
for line in $results; do
if ! echo -n $approved | /bin/grep -q $line; then
ls -a $line
fi
done
新しいファイルが表示されたときの結果:
# ./suid_check.sh
/sbin/netreport
それをcronでスローし、STDOUTに電子メールを送信するようにcronを構成します。