Anaconda кикстарт и опция rootpw

Я пробовал несколько разных способов генерации зашифрованного пароля на SL 6.5, но мне кажется, что ничего не работает. Я не нахожу никаких ошибок в различных файлах / var / log / anaconda *, но не могу войти в систему, так что, очевидно, это не работает.

Оригинальный автоматически созданный файл в /root/anaconda-ks.cfg Я использовал, чтобы шаблон выглядел так:

rootpw  --iscrypted $6$...(about 100 characters)
authconfig --enableshadow --passalgo=sha512

Далее я попробовал openssl passwd -1 который дал мне:

rootpw  --iscrypted $1$...(about 30 characters)
authconfig --enableshadow --passalgo=sha512

Я понял, что это не SHA-512, поэтому я попробовал однострочную версию Python, которую я нашел в нескольких местах:

rootpw  --iscrypted $6...(about 10 characters)
authconfig --enableshadow --passalgo=sha512

Ничего не работает; Я не могу войти в систему, и мне приходится сбрасывать пароль root в однопользовательском режиме.

4 ответа

Решение

Убедитесь, что у вас есть shadow и passalgo=sha512 на машине, установите root-пароль на любой пароль, который вы хотите использовать на этой машине, и возьмите его из / etc / shadow и поместите в кикстарт. Это не рекомендуется для производственного использования.

Чтобы сделать это программно, используйте библиотеку crypt на выбранном вами языке, которая генерирует файл кикстарта:

РУБИН:

'password'.crypt('$6$' + (Base64.encode64(6.times.map{ Random.rand(256).chr }.join)).strip)

PHP:

crypt ('password', '$6$' . base64_encode (openssl_random_pseudo_bytes(6)));

Perl:

crypt ('password', '$6$' . encode_base64 (join '' => map chr (rand (256)), 0..5))

Python:

crypt.crypt('password', '$6$' + base64.b64encode(os.urandom(6)))

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

РЕДАКТИРОВАТЬ:Python 3:

crypt.crypt("password", crypt.mksalt())

Заменяет звонок на os.random с конкретным склепа mksalt,

Смотрите стандартную библиотеку Python: crypt: crypt.mksalt(): "Вернуть случайно сгенерированную соль указанного метода. Если метод не указан, используется самый сильный метод, доступный, как возвращено методами ()"

РЕДАКТИРОВАТЬ:

1) "$6$" для SHA512. Вам нужно будет заменить его на тип шифрования по вашему выбору.

2) Вы можете преобразовать любой из них в один лайнер, чтобы сделать это из Bash.

РЕДАКТИРОВАТЬ (чтобы получить полный ответ, благодаря miken32 и dawud):

3) BSD crypt - это другая реализация по сравнению с GNU, поэтому они несовместимы. Если вы хотите использовать это в системах BSD (например, OSX), вы можете использовать версию PHP (с версией PHP> 5.3.0), так как она реализует свою собственную функцию crypt().

Другая альтернатива на Mac - использовать passlib:

python -c 'import getpass; import passlib.hash; h=passlib.hash.sha512_crypt.hash(getpass.getpass()); print(h if (passlib.hash.sha512_crypt.verify(getpass.getpass("Confirm:"), h)) else "")'

или, по умолчанию в glibc нет. раундов (5000):

python -c 'import getpass; import passlib.hash; h=passlib.hash.sha512_crypt.using(rounds=5000).hash(getpass.getpass()); print(h if (passlib.hash.sha512_crypt.verify(getpass.getpass("Confirm:"), h)) else "")'

Способ создания хешированного пароля задокументирован здесь.

$ python -c 'import crypt; print(crypt.crypt("My Password", "$6$My salt"))'

Причина, по которой он не работает для вас, заключается в том, что вы используете Mac для генерации хэша. crypt реализация отличается от GNU/Linux.

От crypt(3) страница руководства:

   Glibc notes
   The glibc2 version of  this  function  supports  additional  encryption
   algorithms.

   If  salt is a character string starting with the characters "$id$" fol-
   lowed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine,  id  identifies  the  encryption
   method  used  and  this  then  determines  how the rest of the password
   string is interpreted.  The following values of id are supported:

          ID  | Method
          ---------------------------------------------------------
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So   $5$salt$encrypted   is   an   SHA-256   encoded    password    and
   $6$salt$encrypted is an SHA-512 encoded one.

   "salt" stands for the up to 16 characters following "$id$" in the salt.
   The encrypted part of the password string is the actual computed  pass-
   word.  The size of this string is fixed:

   MD5     | 22 characters
   SHA-256 | 43 characters
   SHA-512 | 86 characters

   The  characters  in  "salt"  and  "encrypted"  are  drawn  from the set
   [a-zA-Z0-9./].  In the MD5 and SHA implementations the  entire  key  is
   significant (instead of only the first 8 bytes in DES).

$id$ расширение не существует в OSXcrypt

Для SHA512 вам нужно сгенерировать хеш на машине GNU/Linux.

Новое место в документации, где можно узнать больше о создании хэшированного пароля для опции кикстарта: --iscrypted:

http://pykickstart.readthedocs.io/en/latest/kickstart-docs.html

python -c 'import crypt; print(crypt.crypt("My Password", "$6$My Salt"))

Это сгенерирует крипту вашего пароля sha512, используя предоставленную вами соль.

Приведенный выше пример Python неполный:

crypt.crypt('password', '$6$' + base64.b64encode(os.urandom(6)))

Работающий однострочник будет:

python -c 'import crypt,base64,os; print(crypt.crypt("password", "$6$" + base64.b64encode(os.urandom(6))))'

Под Python 3

python -c 'import crypt; print(crypt.crypt("password", crypt.mksalt()))'
Другие вопросы по тегам