Как создать пользователя и установить пароль без взаимодействия с пользователем? - PullRequest
2 голосов
/ 30 марта 2019

Я недавно работал над проектом с именем: arch loop , который является автоматическим установщиком для Arch Linux. Я видел несколько инсталляторов и сценариев, облегчающих установку Arch, но я тот, кто устанавливает Arch Linux чаще, чем три раза в день, поэтому следование Arch требует много времени и постоянно требует взаимодействия с пользователем.

Проблема:

Пароль: информация о пользователе без полномочий root берется перед собой, и когда придет подходящее время, мы будем использовать следующую команду:

arch-chroot /mnt useradd -m -g users -G wheel -s /usr/bin/bash archuser
arch-chroot /mnt bash -c "echo -e 'password\npassword\n' | passwd
arch-chroot /mnt bash -c "echo -e 'rootpassword\nrootpassword\n' | passwd root

для отправки пароля в двоичный файл passwd в системе chroot. Но я не знаю, почему это не работает. Когда пароль проверяется командой sudo после завершения установки. Пароль, кажется, отлично работает. Но при попытке войти в систему от пользователя без полномочий root из tty пароль кажется неверным.

Вещи, которые я уже пробовал:

  1. Ручное шифрование предоставленного пароля с помощью приведенного ниже кода и передача его в двоичный файл useradd с параметром -p:
perl -e 'print crypt("password", "\$6\$SALTsalt\$") . "\n"'"

Пожалуйста, объясните мне, как установить предоставленный пользователем пароль позже, не требуя вмешательства пользователя.

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Существует команда chpasswd . Это только для того, чтобы сделать passwd доступным в пакетных сценариях. Просто сделай:

echo "root:rootpassword" | arch-chroot /mnt chpasswd

или, может быть, лучше, без необходимости в mount -o bind каталогах sys proc и dev:

echo "root:rootpassword" | chpasswd -R /mnt

@ субъективно: извините за мнение, проект выглядит нормально, однако предстоит еще много работы. Я предполагаю, что цель состоит в том, чтобы приблизить Archlinux к «обычным» пользователям. Однако мне не нравится выбор python для проекта. Переход на простой POSIX sh сделает это доступным для всех. Мне не нравятся жестко закодированные разделы, mlocate (вы действительно используете mlocate?), Множественные вызовы arch-chroot, где вы могли бы просто сделать один большой скрипт, не обрабатывая os.system коды ошибок (!), Несколько pacman звонки даже без -Sy (!) (pacman может потерпеть неудачу, если апстрим обновит репозитории), и еще несколько вещей, которые мне не нравятся. Кроме этого, хорошая абстракция Python и классная цель. Я помню старые установочные скрипты archlinux несколько (или больше) лет назад, они были хороши, но я все равно сам использовал команды. Удачи.

0 голосов
/ 30 марта 2019

Способ, описанный ниже, работает для Ubuntu, я думаю, что он должен работать и для Arch.

Во-первых, у вас должна была быть машина, на которой установлена ​​Арка. Затем вы добавляете нужного пользователя с помощью двух команд: useradd и passwd. После этого вы можете cat /etc/shadow | grep [username] получить информацию о пароле добавленного вами пользователя, это должна быть строка, скажем, XXX.

Теперь в вашей целевой системе после arch-chroot /mnt useradd -m -g users -G wheel -s /usr/bin/bash archuser вы добавляете строку, идущую от cat /etc/shadow | grep [username], в /etc/shadow целевой системы. Команда должна быть похожа на arch-chroot /mnt sed -i "XXX" /etc/shadow.

Еще одна вещь, вы должны убедиться, что версия Arch, в которой вы получаете информацию о пароле и версии целевой системы, совпадают.

...