Если вы рассматриваете свой файл как с разделителями , вы можете сопоставлять и выводить любые строки, второе поле которых состоит не более чем из пробелов:
awk -F= '$2 ~ /^[ \t]*$/' file
man adduser
показывает опцию --disabled-password
.
Или используйте традиционный useradd
, который вообще не запрашивает пароль.
Если вы имеете в виду «системных пользователей», пользователей для какой-либо конкретной службы, например sshd
, postfix
или www-data
(, просто чтобы выбрать ), для них обычно устанавливается пароль, например, *
в /etc/shadow
. Он не пуст, но также не является допустимым хэшем пароля, поэтому его нельзя использовать для аутентификации.
(Способ работы аутентификации на основе пароля -заключается в том, что пароль, заданный пользователем, хешируется так же, как сохраненный пароль, а затем хэши сравниваются, чтобы увидеть, равны ли они. Недопустимый хэш не может быть создан любым паролем, указанным при входе в систему, поэтому вход в систему никогда не будет успешным.)
Если бы поле пароля было на самом деле пустым, все было бы по-другому, так как пустое поле означает, что пароль не требуется. (Конечно, пустая строка также не является допустимым хэшем, а является особым случаем. )Однако, по крайней мере, sshd в любом случае запрещает вход с пустым паролем (по умолчанию, это настраивается с помощьюPermitEmptyPasswords
).
Тем не менее, все, что находится в поле пароля, обычно имеет значение только для аутентификации по паролю. Ключи SSH, в частности, обычно полностью игнорируют то, что находится в поле пароля. (Как и такие вещи, как su
и sudo
, если они используются пользователем с достаточными привилегиями.)
Тень справочной страницы Linux (5)описывает это поведение.