課題でpythonを使ってプログラムを書くように言われました。
syslog ファイルを受け取ったので、それについて調べなければなりません
root アカウントへのログイン試行回数を確認するにはどうすればよいですか?
私はPythonに非常に慣れておらず、完全に迷っているので、アドバイスをいただければ幸いです。
/var/log/auth.log
syslogではなく、必要です。
次のような行が含まれます。
Mar 20 10:47:24 Opus su[15918]: pam_unix(su:auth): authentication failure; logname=lfaraone uid=1000 euid=0 tty=/dev/pts/25 ruser=lfaraone rhost= user=root
問題を達成するための基本的で単純なコードは次のようになります。
loginattempts = {"root": 0,
"someuser": 0,} # Usernames you want to check
with open('/var/log/auth.log', 'r') as authlog:
for line in authlog:
if "authentication failure" in line:
username = line.split('=')[-1] # split the string into an array,
# using '=' as the delimiter
if username in loginattempts: # is the username one we care about?
loginattempts[username] += 1
ユーザーcalmhが示唆したように、正規表現で解析する方が長期的にはおそらく良いでしょうが、まだそれらを知らない場合、学ぶのは簡単ではありません.
おそらく、各行を解析してファイルを読み取る必要があります。関心のあるもの (たとえば、root ログインの失敗) に一致する行が見つかったら、カウンターをインクリメントします。
ファイルの読み取り方法と、場合によっては正規表現の使用方法を調べてください。
「ライブ」ログ ファイルに対してこのチェックを行う場合 (たとえば 5 分ごと)、毎回すべてを読み取らないように、既に処理したファイルの量を追跡する必要があります。実行間の状態 (ファイル サイズ) を覚えておく必要があるため、これは少し複雑です。その場合は、shelve
モジュールを見てください。
このようなもの
#open the file , can be /var/log/messages, /var/log/maillog etc as defined in your system
f=open("mysyslogfile")
count=0
#go through the file
for line in f:
if "<unique pattern for checking root account login>" in line:
count+=1
#close the file
f.close()
print "total count: " ,count