查找所有没有密码的账户并锁定
出于安全原因,有必要禁用所有没有密码的帐户并将其锁定。Solaris、Linux 和 FreeBSD 提供帐户锁定(解锁)功能。
使用以下命令锁定Linux用户帐户:
passwd -l {用户名}
要解锁帐户,请使用:
passwd -u {user-name}
-l:此选项通过将密码更改为与任何可能的加密值都不匹配的值来禁用帐户。
使用以下命令锁定 FreeBSD 用户帐户:
pw lock {username}
FreeBSD解锁账户使用:
pw unlock {username}
使用以下命令锁定 Solaris UNIX 用户帐户:
passwd -l {username}
使用以下命令锁定 HP-UX 用户帐户:
passwd -l {username}
要解锁 HP-UX 帐户,您需要使用文本编辑器编辑 /etc/passwd 文件(或使用 SAM):
vi /etc/passwd
但是,如何找出没有密码的账户呢?同样,借助“passwd -s”(状态)命令,您可以找出所有没有密码的账户。
Linux 显示密码状态
passwd -S {user-name}
其中,
-S :显示账户状态信息。状态信息总共由七个字段组成。第二个字段表示密码状态,格式如下:
- L :如果用户帐户被锁定(L)
- NP:账户没有密码(NP)
- P:账户有可用的密码(P)
# passwd -S radmin
radmin P 2005 年 10 月 8 日 0 99999 7 -1
Solaris UNIX 显示密码状态
passwd -s {user-name}
其中,
-s:使用以下格式显示帐户状态信息:
- PS:账户有可用的密码
- LK:用户账户已被锁定
- NP :账户没有密码
FreeBSD
中我已经写过关于使用小awk 一行方法找出所有不含密码的账户的方法。
自动脚本解决方案
然而,在现实生活中,你会编写一个脚本并从 cron 作业中执行它。以下是 Linux 的小脚本:
#!/bin/sh USERS="$(cut -d: -f 1 /etc/passwd)" for u in $USERS do passwd -S $u | grep -Ew "NP" >/dev/null if [ $? -eq 0 ]; then passwd -l $u fi done
FreeBSD 脚本:
#!/bin/bash USERS="$(awk -F: 'NF > 1 && $1 !~ /^[#+-]/ && $2=="" {print $0}' /etc/master.passwd | cut -d: -f1)" for u in $USERS do pw lock $u done
Sun Solaris 脚本:
#!/bin/sh USERS=`passwd -sa | grep -w NP | awk '{ print $1 }'` for u in $USERS do passwd -l $u done
您可以轻松地为脚本添加电子邮件警报支持,这样当脚本发现无密码帐户时,它就会发送电子邮件警报。请在此处查看完整的脚本工作示例。