ある日を境にアカウントを無効化したい、ということなら、chage -E YYYY-MM-DD account
コマンドで期日を指定できる。
では、90日間ログインしていないアカウントを無効化したい場合はどうするか?
結論
lastlog -b 90 -u 1000-65533 | tail -n+2 | awk '{print $1}' | xargs -pI{} chage -E0 {}
上記をrootで実行するなり、rootのcrontabに書いておけばいい。
解説
lastlogコマンドは、全ユーザーの最終ログイン日時を表示してくれる。
[vagrant@localhost ~]$ lastlog
Username Port From Latest
root **Never logged in**
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
operator **Never logged in**
games **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
systemd-network **Never logged in**
dbus **Never logged in**
polkitd **Never logged in**
rpc **Never logged in**
tss **Never logged in**
rpcuser **Never logged in**
nfsnobody **Never logged in**
sshd **Never logged in**
postfix **Never logged in**
chrony **Never logged in**
vagrant pts/0 10.0.2.2 Wed Jul 29 20:03:24 +0900 2020
inactive1 pts/1 10.0.2.2 Tue Nov 12 20:03:24 +0900 2019
active1 pts/2 10.0.2.2 Wed Jul 29 19:03:24 +0900 2020
inactive2 pts/3 10.0.2.2 Tue Nov 12 19:03:24 +0900 2019
-bオプションで、ログイン日が90日以上前のアカウントに絞り、かつ、-uオプションでシステムアカウントを除外する
[vagrant@localhost ~]$ lastlog -b 90 -u 1000-65533
Username Port From Latest
inactive1 pts/1 10.0.2.2 Tue Nov 12 20:03:24 +0900 2019
inactive2 pts/3 10.0.2.2 Tue Nov 12 19:03:24 +0900 2019
先頭行をtailで落とす
[vagrant@localhost ~]$ lastlog -b 90 -u 1000-65533 | tail -n+2
inactive1 pts/1 10.0.2.2 Tue Nov 12 20:03:24 +0900 2019
inactive2 pts/3 10.0.2.2 Tue Nov 12 19:03:24 +0900 2019
awkでユーザー名だけ抽出する
[vagrant@localhost ~]$ lastlog -b 90 -u 1000-65533 | tail -n+2 | awk '{print $1}'
inactive1
inactive2
あとはxargsでchageに渡せば完成
dry runを試してみたければxargsに-pオプション
[vagrant@localhost ~]$ lastlog -b 90 -u 1000-65533 | tail -n+2 | awk '{print $1}' | xargs -pI{} chage -E0 {}
chage -E0 inactive1 ?...
chage -E0 inactive2 ?...
うっかり全員無効化した場合
chage -E0
コマンドは、/etc/shadowの8番目のフィールドを0に書き換えるので、なんらかの方法でこのフィールドを空にすればログインできるようになる。
AWSなら別のEC2インスタンスにボリュームをアタッチして書き換えればいい。