Назад | Перейти на главную страницу

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 в однопользовательском режиме.

Убедитесь, что у вас есть shadow и passalgo = sha512 на машине, установите корневой проход на любой пароль, который вы хотите на этой машине, возьмите его из / 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 и Давуд):

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

Другой альтернативой на 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$ расширение не существует в OSX crypt

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

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

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

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()))'