Blu*_*Fox 3 linux shell-script
我想检查所有没有设置密码的用户。
例如,具有以下条目的用户 /etc/passwd
test01::15164: ...*
Run Code Online (Sandbox Code Playgroud)
没有设置密码。我想列出所有此类用户。
declare -a liste=(test 01 test02)
for a in `echo ${liste[@]}`
do
for b in `cat /etc/shadow`
do
if [[ "$a" == "$b" ]]
then
echo $a
fi
done
done
Run Code Online (Sandbox Code Playgroud)
代码没有给出任何输出或错误
解决方案
没有密码的影子文件中的条目是 usertest01 和 tecusertest01
declare -a liste=(usertest01 usertest 02 tecusertest01 tecusertest02)
for sdw in `awk -F: '$2 == ""' /etc/shadow`
do
user=`echo "$sdw" | awk -F: '{print $1}'`
echo "$user"
echo "${liste[@]}" | grep "$user" > /dev/null
if [ $? -eq 0 ]
then
echo "Human user"
echo "$user" | passwd "$user" --stdin
else
echo "Technical User"
fi
done
Run Code Online (Sandbox Code Playgroud)
输出
usertest01
Human user
usertest01
Changing password for user usertest01.
passwd: all authentication tokens updated successfully.
tecusertest01
Technical User
Run Code Online (Sandbox Code Playgroud)
您可以简单地检查使用:
注意:- 使用 运行以下命令sudo
,因为/etc/shadow
只有 root 用户和组的读取权限。
awk -F: '$2 == ""' /etc/shadow
Run Code Online (Sandbox Code Playgroud)
或者
awk -F: 'length($2) == 0' /etc/shadow
Run Code Online (Sandbox Code Playgroud)
使用 Bash
#!/usr/bin/env bash
set -f # do not expand *
while IFS=":" read -a user
do
[[ -z ${user[1]} ]] &&
echo "User : ${user[0]} has no password"
done < /etc/shadow
Run Code Online (Sandbox Code Playgroud)
更新 1:
我可以输出用户或给他们一个临时密码吗?
上面的 Bash 脚本已经给出了输出用户名。
您可以使用以下方法为用户设置临时密码:
echo "username:password" | chpasswd
Run Code Online (Sandbox Code Playgroud)
然后你可以强行告诉你的用户在第一次登录时更改密码:
chage -d 0 username
Run Code Online (Sandbox Code Playgroud)
更新 2: 基于检查第二个文件的一些信息,因为 OP 提到第二个文件是空白的,但这是不可能的,除非它是手动编辑的。
/etc/passwd
文件第二个字段表示x
密码在/etc/shadow
文件中,在
/etc/shadow
第二个字段有:
!{ecrypted passwd}
==用户被锁定 *
或!
==*
主要用于系统/守护程序帐户。用户将无法使用unix密码登录(但用户可以通过其他方式登录系统)。