Передайте пользователей по каналу для изменения их паролей

Я пытаюсь делать изменение команды удара паролями всего пользователя в x.

awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd

Я могу передать по каналу пользователей, к которым возвращаются passwd? Я имею в виду, это собирающееся требовать некоторого цикла? Если это так, пример как сделать это?

1
задан 23 November 2015 в 07:40

2 ответа

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 файл впоследствии.

3
ответ дан 7 December 2019 в 12:42

Это возможно с 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$ 
0
ответ дан 7 December 2019 в 12:42

Другие вопросы по тегам:

Похожие вопросы: