web-dev-qa-db-ja.com

find / -perm -4000 -o -perm -2000> suid ..毎晩実行するbashスクリプトのヘルプ。

この問題で私を助けてください。これまでのところ、bashスクリプトとして記述したい「find/-perm -4000 -o -perm -2000 | xargs ls -l> suild.list」引数があります。

これをbashスクリプトとして記述し、毎日毎晩実行できるようにしたいと思います。しかし、私はunixスクリプト言語に精通していません。

crontabジョブの場合、* 24 * * *と書く必要がありますか?おもう?しかし、私はスクリプトとして書くのに苦労しています。

1
su

この場合、xargsを使用する必要はありません。 -lsfindと一緒に使用するだけです。

#!/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へのリダイレクトを削除できます。

0
Jon Lasser

!/ bin/bash

検索/ -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が作成されている場合は変更を比較します。セキュリティ上の理由から。

0
su

スクリプトを実行するたびに完全なリストが必要なのではなく、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を構成します。

0
CarpeNoctem