Ansible 2.9.27とPython 2.7.5がインストールされているRHEL 7.9環境で知りたいです。
- ローカルルートアカウントのパスワードは何日ですか?
- 最後のパスワード変更後数日経過しましたか?
ここでは、次のように最後のパスワード変更日を確認できます。
sudo chage -l root
Last password change : Jan 01, 1970
...
- Ansibleで最後の変更日と今日の違いを計算する方法は?
答え1
RHELには利用可能なものが1つあるため、getent
そこからパスワード使用期間データを取得できます。 3番目のフィールドは1970年以降の日数です。今日の日数は、エポック以降の現在時刻(秒)を86400で割って切り取れば分かります。 (まあ、おそらくタイムゾーンオフセットを与えたり減算したりすることもできます。シャドウツールがベースかどうかはわかりません。地元のタイムゾーンまたはUTCベースです。 )
# user=ilkkachu
# age=$(( $(date +%s) / 86400 - $(getent -- shadow "$user" |cut -d: -f3) ))
# printf "age of user %s's password is %d days\n" "$user" "$age"
age of user ilkkachu's password is 1444 days
getent
ただし、必要な情報を取得するにはroot権限が必要な場合があります。 (これはのデータに対応しますが、/etc/shadow
データがたとえばLDAPにある場合、構成によって異なります。)
もちろん、誰かがgetent
rootとして実行することを許可した場合(例えばsudoを介して)、不要なパスワードハッシュを見ることができますchage -l
。これが発生しないようにしたり、少なくとも困難にするには、getent | cut
スクリプトパイプラインを実行して実行のみを許可するスクリプトを作成できます。それ。
答え2
いくつかの調査の終わりに2つの違いを見つけました。現在時刻(秒)そして日付以降の秒下図のように減算できます。次に、秒を仕事に分けて変換します。
- name: Gather root password age in days
shell:
cmd: echo $(( ($(date +%s) - $(date +%s -d "$(chage -l root | head -1 | cut -d ':' -f 2)")) / 86400 ))
check_mode: false
changed_when: false
failed_when: false
register: result
- name: Show result
debug:
msg: "{{ result.stdout | int }}"
ありがとう
追加ステップ
LDAP の非ローカルアカウントが関連している場合は、追加の作業が必要です。