Повышение привилегий в плейбуках Ansible
Development, VPS | Комментировать запись
Ansible – это современный инструмент управления конфигурацией. Для связи и выполнения команд на управляемых серверах (нодах) он использует только SSH и Python – то есть вам не нужно устанавливать агентское программное обеспечение на удаленные ноды. В этой серии мануалов вы познакомитесь с основными функциями Ansible, которые можно использовать для написания сценариев автоматизации серверов. В конце серии вы найдете практический пример плейбука для автоматизации настройки удаленного веб-сервера Nginx и развертывания на нем статического HTML-сайта.
Примечание: Этот мануал является частью серии по работе с Ansible. Другие мануалы из этой серии вы найдете по тегу ansible-practice. Весь код можно найти в этом репозитории.
Сейчас важно разобраться, как работает повышение привилегий в Ansible – это позволит вам выполнять задачи с соответствующими разрешениями. По умолчанию задачи запускаются от имени подключающегося пользователя: это может быть либо пользователь root, либо любой обычный пользователь с доступом SSH к удаленным нодам в инвентаре.
Чтобы запустить команду с расширенными привилегиями (например любую команду, требующую доступа к sudo), нужно включить в плей директиву become со значением yes. Эту настройку можно сделать глобальной (тогда она будет действительной для всех задач в этом плее) или индивидуальной (для одной конкретной задачи). В зависимости от того, как ваш пользователь sudo настроен на удаленных нодах, вам также может понадобиться указать его пароль. В следующем примере мы попробуем обновить кеш apt – для этой задачи требуются права root.
Создайте новый файл playbook-07.yml в нашем каталоге ansible-practice:
nano ~/ansible-practice/playbook-07.yml
Затем добавьте в новый плейбук следующие строки:
--- - hosts: all become: yes tasks: - name: Update apt cache apt: update_cache: yes
Сохраните и закройте файл.
Чтобы запустить этот плейбук, нужно включить в команду ansible-playbook параметр -K. Тогда Ansible запросит пароль sudo для указанного пользователя.
ansible-playbook -i inventory playbook-07.yml -u 8host -K
Вы также можете изменить пользователя, на которого хотите переключиться во время выполнения задачи или плея. Для этого установите в директиве begin_user имя необходимого пользователя. Эта директива полезна, когда в вашем плейбуке есть несколько задач, которые полагаются на sudo, но также есть и задачи, которые должны выполняться в сессии обычного пользователя.
В следующем примере мы определим, что все задачи в этом плее по умолчанию будут выполняться через sudo. Это делается на уровне плея, сразу после определения hosts. Первая задача создает файл в /tmp с правами root, так как это значение директивы became_user по умолчанию. Последняя задача, однако, определяет собственную директиву become_user.
В каталоге ansible-practice создайте новый файл playbook-08.yml:
nano ~/ansible-practice/playbook-08.yml
Вставьте в него такое содержимое:
--- - hosts: all become: yes vars: user: "{{ ansible_env.USER }}" tasks: - name: Create root file file: path: /tmp/my_file_root state: touch - name: Create user file become_user: "{{ user }}" file: path: /tmp/my_file_{{ user }} state: touch
Сохраните и закройте файл.
Факт ansible_env.USER содержит имя подключающегося пользователя, которое можно определить во время выполнения при запуске команды ansible-playbook с параметром -u. В этом руководстве мы подключаемся как пользователь 8host (укажите имя своего пользователя):
ansible-playbook -i inventory playbook-08.yml -u 8host -K
BECOME password: PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.10] TASK [Create root file] ********************************************************************************* changed: [203.0.113.10] TASK [Create user file] ********************************************************************************* changed: [203.0.113.10] PLAY RECAP ********************************************************************************************** 203.0.113.10 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Когда плейбук завершит работу, вы сможете войти в систему на удаленной ноде (или нодах), чтобы убедиться, что в каталоге /tmp появились два новых файла, каждый со своим владельцем:
ssh 8host@203.0.113.10
-rw-r--r-- 1 root root 0 Apr 14 13:19 /tmp/my_file_root
-rw-r--r-- 1 8host sudo 0 Apr 14 12:07 /tmp/my_file_8host
За более подробной информацией о повышении привилегий в Ansible обратитесь к официальной документации.
Tags: Ansible, ansible-practice