LINUX.ORG.RU
решено ФорумAdmin

Win10/VB/Ubuntu server/lxc: как автоматизировать изменение пароля root в lxc

 


0

1

Добрый день!

Есть необходимость автоматизировать изменение пароля root в lxc. Создал скрипт со следующим содержимым:

'''

#!/usr/bin/expect -f

set timeout 2

spawn sudo passwd root

expect «New password:» {send «2\n»; exp_continue}

expect «Retype new password:» {send «2\n»}

exit

'''

Скрипт выполняется без ругани, но пароль не меняется. Я делал попытку на свежесозданном lxc, у него изначально нет пароля, поэтому надо автоматизировать его создание. Или предложите свой вариант автоматизации.



Последнее исправление: paa66 (всего исправлений: 6)

Можно посмотреть, какой алгоритм хэширования используется/поддерживается в контейнере, и вручную писать в /etc/shadow хэш нужного пароля. Уверен, что это в разы более простой способ, чем автоматизировать passwd.

emorozov
()
Ответ на: комментарий от pfg

Только более надежный, т.к. положение и формат shadow всегда одинаковые на любой системе. Не надо порождать новые процессы, не надо анализировать их вывод и статус завершения. Открыл файл, записал, все ошибки легко будет перехватить и проанализировать.

Для надежности реализовать схему блокировки, как в vipw.

emorozov
()
Последнее исправление: emorozov (всего исправлений: 1)
Ответ на: комментарий от emorozov

аккурат наобормот - дефолтная утилита более надежно.
пройдет время - изменят параметры хеша паролей. в твой самописный костыль никто и не заглянет, в отличии от широкоприменяемой утилиты, которую исправят и протестируют на возможные ошибки…
плюс смотри описание содержимого поля хеша пароля в shadow - там не все так просто и тупо.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 3)
Ответ на: комментарий от mky

когда-то линукс и х86 поддерживал :) и андроид был удобной телефонной ос без задроченностей…
минус всех самописных скриптов что они очень быстро тухнут.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от futurama

Да не важно. До shadow, допустим, в 1995 году, команда passwd входила в пакет util-linux, и позволяла задать пароль своим аргументом. Да, как-бы не безопастно, но это было и работало. А потом раз, shadow, pam и всё. В RH ″passwd --stdin″, в Deb команда ″chpasswd″ (кстати не знаю, была ли она в самых первых shadow-utils года 1997-98). То есть раз и самопальный скрипт перестал работать.

Моя мысль была, что неважно как скрипт смены пароля, про который эта тема, работет, хоть запись в shadow, хоть вызов chpasswd. Завтра он внезапно может перестать работать.

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

т.к. положение и формат shadow всегда одинаковые на любой системе.

Мсье никогда не ставил ALT Linux? Мсье многое пропустил! Там /etc/tcb/username/shadow. Сюрприз.

Aceler ★★★★★
()
Последнее исправление: Aceler (всего исправлений: 1)
Ответ на: комментарий от paa66

Это, что, взаимный троллинг тупостью? Даже если ″passwd″ понимает опцию ″--stdin″, то пароль должен был идти со стандартного ввода, а не через аргумент командной строки. Как-бы:

echo "passd" | passwd --stdin vova
только это слишком открыто, так как обычно список процессов доступен всем пользователям, и можно увидить пароль в списке процессов. Поэтому на STDIN перенаправляли содержимое файла.

А про ″chpasswd″ можно было и man прочитать, или что-нибудь ещё: http://rus-linux.net/MyLDP/consol/chpasswd_tutorial.html

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

Это, что, взаимный троллинг тупостью?

Если человек в чём-то не разбирается, он не обязательно тупой. Не считаю себя тупым, со временем со всем разберусь.

пароль должен был идти со стандартного ввода

Тогда такой вариант не подойдёт, т.к. нужна автоматизация изменения пароля: написал, например, скрипт, запустил и он сам без интерактивного вмешательства всё сделает.

paa66
() автор топика
Ответ на: комментарий от paa66

«Стандартный ввод процесса» != «терминал».

«Палка» или «меньше» — это перенаправление стандартного ввода. Лучше с этим разобраться до написания скриптов, используемых в продакшн.

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

А ваш скрипт должен в конце строку ″password updated successfully″…

Сделал в скрипте так:

'''

#!/usr/bin/expect -f

set timeout 2

spawn sudo passwd root

expect «New password:» {send «2\n»; exp_continue}

expect «Retype new password:» {send «2\n»}

expect «passwd: password updated successfully» {send ""}

exit

'''

Теперь всё работает.

paa66
() автор топика
Ответ на: комментарий от mky

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

На самом деле мне ещё во многом надо разобраться, т.к. новичок в этом деле.

paa66
() автор топика