![使 login.defs 处于活动状态](https://linux22.com/image/1097986/%E4%BD%BF%20login.defs%20%E5%A4%84%E4%BA%8E%E6%B4%BB%E5%8A%A8%E7%8A%B6%E6%80%81.png)
我正在尝试在我的 Ubuntu Server 12.04.1 上应用新的密码策略。我已编辑MAX_PASS_DAYS 30
了中MIN_PASS_DAYS 2
的。PASS_WARN_AGE 7
/etc/login.defs
新规则确实适用于我创建的任何新用户,但我如何将其强制应用于所有当前用户?我使用 3 个月内未更改密码的用户对其进行测试。chage -l
仍然显示99999
。MAX_PASS_DAYS
我宁愿不对chage
所有当前用户使用。
提前致谢
答案1
两年了还没找到答案?很遗憾,我想到的唯一解决方案就是这个脚本。我在 Ubuntu 14 上测试过它。请注意,如果您输入错误,则不会进行错误处理。
chage_update.sh
:
#!/bin/bash
usage() {
cat <<EOF
Usage: $0 [ YYYY-MM-DD ]
Update chage information for all regular users to the values present in
/etc/login.defs, and set the date of the last password change to YYYY-MM-DD
(defaults to current date). Must be run as root.
EOF
exit;
}
get_val() {
ARR=(`grep ^$1 /etc/login.defs`)
echo ${ARR[1]}
}
UID_MIN=`get_val UID_MIN`
PASS_MAX_DAYS=`get_val PASS_MAX_DAYS`
PASS_WARN_AGE=`get_val PASS_WARN_AGE`
if [ "$1" = "-h" -o "$1" = "--help" ]; then
usage
elif [ -z "$1" ]; then
DATE=`date +%Y-%m-%d`
else
DATE=$1
fi
cat /etc/passwd | while read line; do
ARR=($(echo "$line" | cut -d\: -f1-3 | tr : \ ))
USER=${ARR[0]}
USERID=${ARR[2]}
if [ -z "$USERID" ]; then
continue
elif [ "$USERID" -ge $UID_MIN ]; then
chage -d $DATE -M $PASS_MAX_DAYS -W $PASS_WARN_AGE $USER
fi
done