Можете ли вы установить количество раундов, которое использует фильтр password_hash jinja2 в ansible?

В недоступном ' довольно удобно использовать что-то вроде этого:

- name: Make sure user password is set 
  user:
    name: my_user
    password: "{{ user_password|password_hash('sha512', 'SomeSalt') }}"

где user_password - пароль в виде открытого текста, хранящийся в доступном файле хранилища.

В моем ansible 2.5.0, работающем на MacOS, это генерирует хэш пароля, который выглядит примерно так:

$6$rounds=656000$SomeSalt$PlupV2TAHwwc520gHp0dL4padL5EHa50G6hdYm.JLuy4pnP5u2F.HRAHZrGY77BwdRv5UbUGqIAbuhehS00ZD0

Проблема, с которой я столкнулся, заключается в том, что устройство, которое я пытаюсь настроить, является Raspberry Pi, и, как видно из сгенерированного хэша, раундов = 656000 . Для генерации хэша требуется довольно много вычислительной мощности, а на Raspberry Pi это занимает 10-15 секунд. Это означает, что после того, как этот хэш пароля установлен для пользователя, любое действие, которое требует от Raspberry Pi генерировать хеш для сравнения с ним, например, вход в систему или изменение пароля, также требует 10-15 секунд.

Еще хуже, если это хэш пароля установлен для пользователя, если это пользователь, который подключается как ansible, каждая отдельная задача, выполняемая в ansible, занимает значительно больше времени. Время, в течение которого моя playbook запускается против Raspberry Pi в первый раз (когда у задач действительно есть работа) с паролем по умолчанию, составляло около 15 минут. Моя playbook устанавливает пароль пользователя в самом конце. Второй запуск (когда задачам нечего делать) длился около 30 минут

Я не вижу способа изменить количество раундов в документации для фильтра password_hash (). Можно ли каким-либо образом изменить это значение?

0
задан 24 April 2018 в 21:06
3 ответа

Похоже, что нет возможности предоставить аргумент раундов с использованием фильтра password_hash. Функция, вызываемая фильтром, принимает в качестве аргументов только пароль, тип хэша и соль.

Если вам действительно нужно установить это, вы можете установить mkpasswd (часть пакета whois в Debian / Ubuntu) и запустите его. Это не совсем безопасно: если бы другой человек наблюдал за запущенными процессами в системе, в которой вы работаете с Ansible, он бы увидел пароль в выводе «ps ax».

- hosts: slowremote
  gather_facts: no
  tasks:
  - shell: |
      echo 'hunter2' | mkpasswd --method=sha-512 --rounds=1000 --stdin
    register: results
    delegate_to: localhost
  - debug:
      var: results.stdout_lines
  - name: Make sure user password is set 
    user:
      name: my_user
      password: "{{results.stdout_lines}}"
1
ответ дан 4 December 2019 в 13:26

Doing небольшое исследование, очевидно, это был запрос функции .

Он был реализован здесь .

Здесь есть запрос на слияние для этой функции здесь .

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

1
ответ дан 4 December 2019 в 13:26

Я использовал модуль expect для выполнения passwd :

- name: Install required lib
  apt:
    name: 'python-expect'
    state: present
- name: Change user's password
  expect:
    command: passwd pi
    responses:
      'Enter new UNIX password:': "{{ new_password }}"
      'Retype new UNIX password:': "{{ new_password }}"
  no_log: True
0
ответ дан 4 December 2019 в 13:26

Теги

Похожие вопросы