etc_security_lastlogの可視化

etc_security_lastlogの可視化

私は、非アクティブなユーザーIDを確認するためにetc_security_lastlogのデータを可視化する簡単な方法を探しています。 「非アクティブ」ユーザーは、time_last_loginが十分に古いかどうかによって決まります。どうすればいいですか?

lp:
time_last_unsuccessful_login = 1174162435
tty_last_unsuccessful_login = /dev/pts/7      
host_last_unsuccessful_login = 1x.xxx.xxx.x.x                                    
unsuccessful_login_count = 1         

smtsftp:
unsuccessful_login_count = 3         
time_last_login = 1382043613
tty_last_login = /dev/ssh-16842912
host_last_login = 1x.xxx.xxx.x.x.net.intra                       
time_last_unsuccessful_login = 1382083294
tty_last_unsuccessful_login = ssh
host_last_unsuccessful_login = 1x.xxx.xxx.x.x.net.intra

svcsinae:
unsuccessful_login_count = 0         

privil1:
unsuccessful_login_count = 0
time_last_login = 1567112152
tty_last_login = /dev/pts/1
host_last_login = 11x.xxx.xxx.x.x              
time_last_unsuccessful_login = 1507892677
tty_last_unsuccessful_login = ssh
host_last_unsuccessful_login = 1x.xxx.xxx.x.x 

答え1

単純な awk フィルタを使用してこの問題を解決できます。現在のタイムスタンプと関心のある締め切りを渡すだけです。入力を解析して、ユーザー名と time_last_login 値を見つけます。期限より早い値が見つかった場合は、そのユーザーに報告します。

次の例では、おおよその1年(31,536,000秒)を使用しています。

awk -v now=$(date +%s) -v cutoff=31536000 '
  /^[^-+@~ ][^:"#,=\\\/?` ]+:$/ { 
    user=$1
    sub(/:$/, "", user)
  }
  /time_last_login = [[:digit:]]+/ { 
    if (now - $3 > cutoff) print user " has not logged in within the cutoff"
  }
  ' /etc/security/lastlog

ユーザー名を検索するために使用する正規表現は、次のものに由来します。MKユーザー文書。ユーザー名(行)をキャプチャした後、ユーザー名から末尾のコロンを削除します。

関連情報