Сравните пользователей с массивом с файлом / etc / shadow

Я хочу проверить всех пользователей, у которых нет пароля.

Например, пользователь со следующей записью в /etc/passwd

 test01::15164: ...* 

не установлен пароль. Я хотел бы перечислить всех таких пользователей.

 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 

Код не дает никаких результатов или ошибок

Решение

Запись в теневом файле без пароля: 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 

Вывод

 usertest01 Human user usertest01 Changing password for user usertest01. passwd: all authentication tokens updated successfully. tecusertest01 Technical User 

One Solution collect form web for “Сравните пользователей с массивом с файлом / etc / shadow”

Вы можете просто проверить, используя:

Примечание. – Запустите следующую команду с помощью sudo , потому что /etc/shadow имеет доступ только для чтения к root user & group.

 awk -F: '$2 == ""' /etc/shadow 

ИЛИ

 awk -F: 'length($2) == 0' /etc/shadow 

Использование 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 

Обновление 1:

Могу ли я вывести пользователей или предоставить им временный пароль?

Над сценарием Bash уже выдаются имена пользователей.

вы можете установить временный пароль для пользователя, используя:

 echo "username:password" | chpasswd 

Затем вы можете решительно указать свои использования для смены пароля при первом входе в систему:

 chage -d 0 username 

Обновление 2: Некоторая информация для проверки 2-й подачи на основе, потому что OP упоминает, что вторая подана, но это невозможно, если она не отредактирована вручную.

/etc/passwd file 2-е поле обозначает x означает, что пароль находится в /etc/shadow , а в

/etc/shadow Второе поле:

  • !{ecrypted passwd} == пользователь заблокирован
  • * или ! == * в основном для учетной записи system / daemon. пользователь не сможет использовать пароль unix для входа (но пользователь может войти в систему другими способами).
  • Как я могу использовать цикл внутри команды?
  • Считать количество вхождений регулярного выражения в круглых скобках
  • трубопровод с недетерминированным выходом
  • Найти файл, проверить размер и перезаписать, когда размер файла отличается
  • Поиск файлов, содержащих символы, отличные от ASCII
  • Выполнить скрипт оболочки после успешного соединения с сервером
  • bash читает новую строку, printf сообщает символ 0
  • Функция, вызывающая другую функцию со списком аргументов, не работает
  • Как удалить символ новой строки в конце файла?
  • bash scripting добавить аргументы
  • Что такое код возврата 1 для git-rebase? Какие другие ценности он мог бы вернуть?
  • Linux и Unix - лучшая ОС в мире.