LINUX.ORG.RU
ФорумAdmin

Передача пароля из переменной в useradd

 


0

1

всем доброй ночи! Просьба помочь разобраться нубским вопросом. Учебная задача, Нужно создать на Ubuntu server пользователя с заданным именем и паролем.

Как работает useradd в таком случае? Выполняю команду вида

sudo useradd -m -p $(openssl passwd 123) test

ожидаю получить пользователя test с паролем 123 команда выполняется без ошибок, но после этого я не могу попасть в этого пользователя с этим паролем!

нагуглил https://ru.stackoverflow.com/questions/1022068/ и https://rus-linux.net/MyLDP/BOOKS/Linux_Foundations/27/ch27.html где подтверждается, что так оно должно работать, но у меня почему то не работает.

пробовал и так:

sudo useradd -m -p `openssl passwd 123` test05

аналогично, вход с 123 - не работает:

 su test05
Password:
$ 123
sh: 1: 123: not found

Ещё можно так:

#!/bin/bash
useradd -s /bin/bash -m test
echo -e "12345\n12345" | passwd user3
apt install pwgen

Или так:

#!/bin/bash
user=test1
pw=`pwgen 10 1`
useradd -s /bin/bash -m ${user}
echo -e "${pw}\n${pw}" | passwd ${user}
echo -e "User: ${user}\nPassword: ${pw}"
kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от anc

В чём сложность?

Делать либо в одну команду, с передачей хэшированного пароля.

Либо в две команды и там уже либо пароль в открытом виде, либо хэшированный.

Не вижу особой разницы между:

echo -e "123456\n123456" | passwd test

и

echo "test:123456" | chpasswd
kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Не то, чтобы определенный. Но не все. md5 ($1$) уже устарел и многие дистрибутивы такие хэши блокируют. sha512 ($6$) ещё годится (и sha256 ($5$) вроде бы пока тоже), но лучше, как уже сказали, yescrypt ($y$)

router ★★★★★
()

sudo useradd -m -p $(openssl passwd 123) test

Кстати, это очень НЕ удачный вариант, т.к. пароль останется в истории.

лучше

  • либо сначала создать учетку, а потом назначить пароль интерактивно, через passwd
  • либо создать хэш пароля на своем рабочем месте (опять же, не оставляя пароль в истории), а утилите useradd передавать уже хэш
  • либо вообще создавать через ansible. опять же, не оставляя пароль в открытом виде
router ★★★★★
()
Ответ на: комментарий от router

Кстати, это очень НЕ удачный вариант, т.к. пароль останется в истории.

«Историю» всегда можно запихнуть в скрипт который потом удалить.

anc ★★★★★
()
Ответ на: комментарий от anc

Тут нет -e и echo не будет интерпретировать пароль как эскейп последовательность. Так что проблем с наличием эскейп последовательности \n, а в частности интерпретации набора символов в пароле как эскейп последовательность нет.

Это была единственная возможная проблема.

А наличие символа переноса в echo проблем не вызовет.

Не путай.

kostik87 ★★★★★
()
Ответ на: комментарий от anc

Потому что -e и \n

Я тебе и ответил, что тут нет \n, т.е. эскейп последовательности и их обработки.

Передача пароля из переменной в useradd (комментарий) - и тут не было \n, так что твой комментарий, что есть \n не оправдан ;).

kostik87 ★★★★★
()