Ansible Vault не читает определенные переменные

Я работаю над автоматизацией Ansible для сетей Cumulus-Linux (whitebox). Я использую Ansible Vault для шифрования паролей в моих плейбуках для локальных учетных записей, которые я хочу создать на новом переключателе Cumulus. Однако, когда я запускаю playbook, кажется, что ansible может читать переменные имени пользователя из моего зашифрованного хранилища файла, но не переменные пароля, которые я определил. Невозможно проверить, для чего Ansible устанавливает этот пароль; конечно, пароли зашифрованы даже в выводе -vvvv Ansible.

В каждом примере Ansible Vault, который я видел, мои переменные определены как таковые (незашифрованная переменная, ссылающаяся на зашифрованную):

  • "user" получает свое значение от "vault_user", который находится в моем файле переменных, зашифрованных хранилищем.
  • "пароль" получает свое значение от "vault_password", который также находится в моем зашифрованном в хранилище файле.

Моя текущая структура playbook:

root
--> ansible.cfg
--> hosts
--> main.yml (main playbook)
--> group_vars
    --> all
        --> main.yml (where unencrypted "user" and "password" declared)
        --> vault.yml (encrypted, has values for "vault_user" and "vault_password")

Фактическая часть моей пьесы, в которой создается / изменяется учетная запись:

  - name: create_admin_account
    user:
      name={{ user }}
      shell=/bin/bash
      password={{ password }}
      groups=sudo
      append=yes

Определения переменных из /group_vars/all/main.yml

user: "{{ vault_user }}"
password: "{{ vault_password }}"

Затем в зашифрованном хранилище файле /group_vars/all/vault.yml (без предоставления фактической информации об учетной записи):

vault_user: 'xxxx'
vault_password: 'yyyy'

Пароль шифрования хранится в отдельном файле, и я указываю Ansible на этот файл через автоматизацию jenkins / Github (вместо определения файла паролей хранилища в ansible.cfg).

ЭТА ПРОБЛЕМА:

Когда я запускаю эту книгу, она успешно завершается, фактически читает мой файл хранилища и создает учетную запись пользователя «xxxx». Однако похоже, что он не устанавливает для пароля учетной записи значения, которые я определил, поскольку я не могу впоследствии войти в систему, используя эти учетные данные. Я проверил, что учетная запись создана правильно и впоследствии присутствует в группе sudoers.

Если ansible может читать сохраненную в хранилище переменную «user», почему бы ему не читать переменную «password» так же?

Я даже попытался запустить его с незашифрованным файлом хранилища и в виде обычного текста - ansible ВСЕ ЕЩЕ не читает мою переменную "пароль" правильно.

Кто-нибудь знает о взломе или способе узнать, какое текстовое значение Ansible вставляет в эту переменную при запуске (это может быть глупый вопрос, поскольку это будет огромным риском для безопасности!)?


person riddleOFst33l    schedule 09.11.2017    source источник


Ответы (1)


Если вы не выполнялись в macOS, вы должны предоставить хэш пароля для password аргумента user узла, не простой текстовый пароль.

Ссылка:

password

При желании установите пароль пользователя на это зашифрованное значение. Посмотрите пример пользователя в каталоге примеров github, чтобы узнать, как это выглядит в playbook. См. http://docs.ansible.com/ansible/faq.html#how-do-i-generate-crypted-passwords-for-the-user-module для получения подробной информации о различных способах создания этих значений паролей. Обратите внимание на систему Дарвина, это значение должно быть открытым текстом. Остерегайтесь проблем с безопасностью.

Тем не менее, хранение хэша пароля внутри файла, зашифрованного с помощью Ansible Vault, не обеспечивает дополнительной безопасности. Это то же значение, которое можно прочитать из файла /etc/passwd в целевой системе (который по умолчанию доступен для чтения всем).


Кто-нибудь знает о взломе или способе узнать, какое текстовое значение Ansible вставляет в эту переменную при запуске (это может быть глупый вопрос, поскольку это будет огромным риском для безопасности!)?

- debug:
    var: password

Строго говоря, бывают случаи, когда вывод модуля debug на экран не является необработанным значением (в основном, если переменная содержит экранированные символы, такие как кавычки). Тогда единственный способ проверить значение - использовать модуль copy и передать переменную параметру content.

person techraf    schedule 09.11.2017
comment
Спасибо, техраф. Позвольте мне попробовать вариант отладки - я вижу, что помещается в переменную, я, вероятно, могу понять, что именно пошло не так. - person riddleOFst33l; 10.11.2017