Я пытаюсь делать изменение команды удара паролями всего пользователя в x.
awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd
Я могу передать по каналу пользователей, к которым возвращаются passwd
? Я имею в виду, это собирающееся требовать некоторого цикла? Если это так, пример как сделать это?
passwd
не читает пароли нев интерактивном режиме, например, через STDIN, сгенерированный каналом, как альтернатива можно использовать chpasswd
, который читает пароль через STDIN, но имеет проблему безопасности.
проблема chpasswd
, ожидает, что пароли будут даны в открытом тексте, после формата:
username:password
Для создания нас несколько менее явными мы можем сохранить пароли последовательно в отдельных строках в файле, соответствующем выводу, данному эти awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd
команда. Помните, что необходимо поддержать последовательность вывода команды при сохранении паролей в файле.
Тогда мы можем использовать paste
для генерации формата chpasswd
, хочет на его STDIN.
, Например:
paste -d: <(awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd)\
/password/file | sudo chpasswd
Здесь /password/file
содержит соответствующие пароли.
Как меры по обеспечению безопасности, мы можем удалить /password/file
файл впоследствии.
Это возможно с usermod -p PASSWD USERNAME
и цикл с условием продолжения. Проблема состоит в том, что PASSWD не может быть в простом тексте, это должен быть зашифрованный пароль. С этой целью можно использовать mkpasswd
. Тот путь "newPassString" шифруется и остается тем же для всех пользователей. Вот пример того, в чем можно выполнить всего одна строка кода.
$ cat userlist | while read USERNAME; do echo "$USERNAME";sudo usermod -p "$(mkpasswd "newPassString")" "$USERNAME" ;done
tester
[sudo] password for xieerqi:
testuser
[sudo] password for xieerqi:
Уведомление, которое я должен ввести sudo
для каждого sudo
вызов - это - моя персональная установка. В регулярном, неизменном /etc/sudoers
файл, тайм-аут составляет 15 минут по умолчанию, таким образом, необходимо было бы ввести его только однажды.
А лучший подход должен поместить код в сценарий и вызов с параметрами 1$ как имя файла и 2$ как строка нового пароля:
xieerqi:$ cat passScript.sh
#!/bin/bash
while read USERNAME; do
echo "$USERNAME";
usermod -p "$(mkpasswd "$2")" "$USERNAME"
done < "$1"
xieerqi:$ chmod +x passScript.sh
xieerqi:$ sudo ./passScript.sh userlist myNewPass
[sudo] password for xieerqi:
tester
testuser
xieerqi:$ su testuser
Password:
testuser@eagle:/home/xieerqi$