web-dev-qa-db-ja.com

日付を指定する代わりに、日数でパスワードの有効期限をリセットする

コマンドpasswdまたはchageのいずれかを使用して、コマンドの実行時から90日でパスワードを強制的に期限切れにする方法はありますか?

次のような日付までにできることはわかっています。

chage -E "2014-07-31" userid

しかし、私は特定の日付の代わりに数字でそれを行う方法を探しています。

ありがとうございました!

2
HEADLESS_0NE

chageはそれ自体では日付の違いを処理しませんが、シェルにそれを処理させ、YYYY-MM-の代わりに1970-01-01からの日数をchageに与えることができます。 DD日付表記:

chage -E $(( $(date +%s)/3600/24 + 90 )) userid

(90は任意の日数に置き換えてください。)


accountではなくpasswordの有効期限を変更するのは少し注意が必要です。実際、パスワードの実際の有効期限を設定することはできません。 chage -M)。

パスワードが今から90日で期限切れになるのに必要な最大経過時間を計算するには、さらにいくつかのフープをジャンプする必要があります。

userid=johndoe
pwd_age=$(grep "^$userid:" /etc/shadow | cut -d: -f 3)
now=$(( $(date +%s) / 3600 / 24 ))
age_at_expiry_date=$(( $now + 90 - $pwd_age ))
chage $userid -M $age_at_expiry_date

複雑であっても構わない場合は、1つのライナーにまとめることもできます。

userid=johndoe chage $userid -M $(( $(date +%s) / 3600 / 24 + 90 - $(grep "^$userid:" /etc/shadow | cut -d: -f 3) ))

パスワードが最後に変更された日付を上書きしてもかまわない場合は、

chage -M 90 -d $(date +%F) userid
8
n.st

RHEL 6.8

#set passwd max no days = 30
passwd username -x30
1
blank