Понимание повышения привилегий: become
Ansible использует существующие системы повышения привилегий для выполнения задач с правами root или с правами другого пользователя. Поскольку эта функция позволяет вам «стать» другим пользователем, отличным от пользователя, вошедшего в систему (удаленный пользователь), мы называем её become. Ключевое слово become использует существующие инструменты повышения привилегий, такие как sudo, su, pfexec, doas, pbrun, dzdo, ksu, runas, machinectl и другие.
Использование become
Вы можете управлять использованием become с помощью директив play или task, переменных подключения или в командной строке. Если вы устанавливаете свойства повышения привилегий несколькими способами, просмотрите общие правила приоритета, чтобы понять, какие настройки будут использоваться.
Полный список всех плагинов become, включенных в Ansible, можно найти в списке плагинов.
Директивы become
Вы можете задать директивы, которые управляют become на уровне play или task. Вы можете переопределить их, задав переменные подключения, которые часто отличаются от одного хоста к другому. Эти переменные и директивы независимы. Например, установка become_user не устанавливает become.
- become
- установлено на
yesдля активации повышения привилегий. - become_user
- установлено на пользователя с желаемыми правами — пользователя, которым вы
become, а НЕ пользователя, с которым вы вошли в систему. Не подразумеваетbecome: yes, чтобы разрешить его установку на уровне хоста. Значение по умолчанию —root. - become_method
- (на уровне play или task) переопределяет метод по умолчанию, заданный в ansible.cfg, устанавливает использование любого из плагинов become.
- become_flags
- (на уровне play или task) разрешает использование определённых флагов для задач или ролей. Одно из распространённых применений — изменение пользователя на nobody, когда оболочка установлена на no login. Добавлено в Ansible 2.2.
Например, для управления службой системы (требующей root привилегий) при подключении как непривилегированному пользователю, вы можете использовать значение по умолчанию become_user (root):
- name: Ensure the httpd service is running
service:
name: httpd
state: started
become: yes
Для выполнения команды от имени пользователя apache:
- name: Run a command as the apache user command: somecommand become: yes become_user: apache
Для выполнения чего-либо от имени пользователя nobody, когда оболочка — nologin:
- name: Run a command as nobody command: somecommand become: yes become_method: su become_user: nobody become_flags: '-s /bin/sh'
Переменные подключения become
Вы можете определять различные become опции для каждого управляемого узла или группы. Вы можете определять эти переменные в инвентаре или использовать их как обычные переменные.
- ansible_become
- эквивалентно директиве become, определяет, используется ли повышение привилегий.
- ansible_become_method
- который метод повышения привилегий должен быть использован
- ansible_become_user
- устанавливает пользователя, к которому вы повышаете привилегии; не подразумевает
ansible_become: yes - ansible_become_password
- устанавливает пароль повышения привилегий. См. Использование Vault в playbooks для получения подробностей о том, как избежать наличия секретов в открытом виде
Например, если вы хотите выполнить все задачи как root на сервере под именем webserver, но можете подключиться только как пользователь manager, вы можете использовать запись инвентаря в таком виде:
webserver ansible_user=manager ansible_become=yes
Примечание
Переменные, определённые выше, являются общими для всех плагинов become, но также можно установить и специфичные для плагина. Обратитесь к документации каждого плагина за списком всех опций плагина и способов их определения. Полный список плагинов become в Ansible находится в Плагинах become.
Параметры командной строки become
| --ask-become-pass, -K | |
| спрашивает пароль повышения привилегий; не подразумевает, что become будет использован. Обратите внимание, что этот пароль будет использован для всех хостов. | |
| --become, -b | выполнять операции с become (пароль не подразумевается) |
| --become-method=BECOME_METHOD | |
| метод повышения привилегий для использования (по умолчанию=sudo), допустимые варианты: [ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl ] | |
| --become-user=BECOME_USER | |
| выполнять операции от имени этого пользователя (по умолчанию=root), не подразумевает –become/-b | |
Риски и ограничения become
Хотя повышение привилегий в основном интуитивно понятно, есть несколько ограничений в его работе. Пользователи должны быть осведомлены об этих ограничениях, чтобы избежать неожиданностей.
Риски повышения привилегий до непривилегированного пользователя
Модули Ansible выполняются на удалённой машине, сначала подставив параметры в файл модуля, затем скопировав файл на удалённую машину и, наконец, выполнив его там.
Всё нормально, если файл модуля выполняется без использования become, когда become_user — root, или когда подключение к удалённой машине осуществляется как root. В этих случаях Ansible создаёт файл модуля с разрешениями, которые разрешают чтение только пользователю и root, или только разрешают чтение пользователю, которому повышают привилегии.
Однако, когда и пользователь подключения, и become_user — непривилегированные, файл модуля записывается как пользователь, с которым Ansible подключается, но файл должен быть читаемым для пользователя, которому Ansible назначает become. В этом случае Ansible делает файл модуля доступным для чтения всем на время выполнения модуля Ansible. Как только модуль завершит выполнение, Ansible удаляет временный файл.
Если какие-либо из параметров, передаваемых модулю, носят конфиденциальный характер, и вы не доверяете клиентским машинам, это потенциальная опасность.
Способы решения проблемы:
- Используйте
pipelining. Когда включён режим обработки потоков, Ansible не сохраняет модуль во временный файл на клиенте. Вместо этого он передаёт модуль в стандартный ввод интерпретатора Python на удалённой машине. Обработка потоков не работает для модулей Python, связанных с передачей файлов (например: copy, fetch, template), или для модулей, не являющихся Python. - Установите поддержку файловых ACL POSIX.1e на управляемом хосте. Если временная директория на удалённом хосте смонтирована с поддержкой POSIX ACL и инструмент setfacl присутствует на удалённом
PATH, то Ansible будет использовать POSIX ACL для совместного использования файла модуля со вторым непривилегированным пользователем, вместо того, чтобы делать файл доступным для всех. - Избегайте повышения привилегий до непривилегированного пользователя. Временные файлы защищаются правами доступа к файлам Unix, когда вы
becomeroot или не используетеbecome. В Ansible 2.1 и выше права доступа к файлам Unix также безопасны, если вы подключаетесь к управляемой машине как root, а затем используетеbecomeдля доступа к непривилегированной учётной записи.
Предупреждение
Хотя файловая система Solaris ZFS имеет файловые ACL, ACL не являются файловыми ACL POSIX.1e (вместо этого они являются ACL NFSv4). Ansible не может использовать эти ACL для управления правами доступа к своему временному файлу, поэтому вам, возможно, придётся прибегнуть к allow_world_readable_tmpfiles, если удалённые машины используют ZFS.
Изменено в версии 2.1.
Ansible затрудняет неосторожное использование become небезопасным способом. Начиная с Ansible 2.1, Ansible по умолчанию выводит ошибку, если не может выполнить операцию безопасно с помощью become. Если нельзя использовать конвейеры или POSIX ACL, необходимо подключиться как непривилегированный пользователь, использовать become для выполнения от имени другого непривилегированного пользователя и убедиться, что управляемые узлы достаточно безопасны для того, чтобы модули, которые будут на них выполняться, были доступны для всех. В этом случае можно включить allow_world_readable_tmpfiles в файле ansible.cfg. Установка allow_world_readable_tmpfiles изменит это с ошибки на предупреждение и позволит задаче выполняться так же, как и до версии 2.1.
Не поддерживается всеми плагинами подключения
Методы повышения привилегий также должны поддерживаться используемым плагином подключения. Большинство плагинов подключения будут предупреждать, если они не поддерживают become. Некоторые просто проигнорируют это, так как всегда выполняют действия от имени root (тюрьма, chroot и т. д.).
Можно включить только один метод на хост
Методы не могут быть объединены. Вы не можете использовать sudo /bin/su - для повышения привилегий, вам нужно иметь права для выполнения команды от имени этого пользователя в sudo или возможность напрямую выполнить su к нему (то же самое относится к pbrun, pfexec или другим поддерживаемым методам).
Повышение привилегий должно быть общим
Нельзя ограничивать права повышения привилегий определенными командами. Ansible не всегда использует конкретную команду для выполнения действия, но выполняет модули (код) из временного файла с именем, которое изменяется каждый раз. Если вы разрешили команды `/sbin/service` или `/bin/chmod`, это приведет к сбою Ansible, поскольку эти пути не будут соответствовать временному файлу, который Ansible создает для выполнения модуля. Если у вас есть правила безопасности, которые ограничивают вашу среду sudo/pbrun/doas выполнением только определенных путей команд, используйте Ansible от специальной учетной записи, не имеющей этого ограничения, или используйте Red Hat Ansible Tower для управления косвенным доступом к SSH-кредитам.
Невозможно получить доступ к переменным среды, заполненным pamd_systemd
Для большинства дистрибутивов Linux, использующих systemd в качестве своего init, используемые по умолчанию методы become не открывают новую «сессию» в смысле systemd. Поскольку модуль pam_systemd не будет полностью инициализировать новую сессию, могут возникнуть неожиданности по сравнению с обычной сессией, открытой через ssh: некоторые переменные среды, установленные pam_systemd, в частности XDG_RUNTIME_DIR, не заполняются для нового пользователя, а вместо этого наследуются или просто очищаются.
Это может вызвать проблемы при попытке вызвать команды systemd, которые зависят от XDG_RUNTIME_DIR для доступа к шине:
$ echo $XDG_RUNTIME_DIR $ systemctl --user status Failed to connect to bus: Permission denied
Чтобы принудительно заставить become открыть новую сессию systemd, которая проходит через pam_systemd, можно использовать become_method: machinectl.
Дополнительную информацию можно найти в этой проблеме systemd.
Become и автоматизация сети
Начиная с версии 2.6, Ansible поддерживает become для повышения привилегий (вход в enable режим или режим привилегированного EXEC) на всех поддерживаемых Ansible платформах, которые поддерживают режим enable. Использование become заменяет опции authorize и auth_pass в словаре provider.
Для использования become для повышения привилегий на сетевых устройствах, необходимо установить тип подключения либо на connection: network_cli, либо на connection: httpapi. Подробности см. в документации Параметры платформы и Сетевые модули.
Можно использовать повышенные привилегии только для конкретных задач, для всего выполнения или для всех сценариев. Добавление become: yes и become_method: enable указывает Ansible на вход в режим enable перед выполнением задачи, выполнения или плейбука, где эти параметры заданы.
Если вы видите это сообщение об ошибке, задаче для успешного выполнения требуется режим enable:
Invalid input (privileged mode required)
Чтобы установить режим enable для определенной задачи, добавьте become на уровне задачи:
- name: Gather facts (eos)
eos_facts:
gather_subset:
- "!hardware"
become: yes
become_method: enable
Чтобы включить режим для всех задач в одном выполнении, добавьте become на уровне выполнения:
- hosts: eos-switches
become: yes
become_method: enable
tasks:
- name: Gather facts (eos)
eos_facts:
gather_subset:
- "!hardware"
Включение режима для всех задач
Часто требуется, чтобы все задачи во всех выполнителях работали в режиме привилегий. Это лучше всего достигается с помощью group_vars:
group_vars/eos.yml
ansible_connection: network_cli ansible_network_os: eos ansible_user: myuser ansible_become: yes ansible_become_method: enable
Пароли для режима enable
Если для входа в режим enable требуется пароль, его можно указать двумя способами:
- предоставление параметра командной строки
--ask-become-pass - установка переменной подключения
ansible_become_password
Предупреждение
Напоминаем, что пароли никогда не следует хранить в виде обычного текста. Подробности о шифровании паролей и других секретов с помощью Ansible Vault см. в разделе Ansible Vault.
authorize и auth_pass
Ansible по-прежнему поддерживает режим enable с connection: local для устаревших плейбуков сети. Чтобы войти в режим enable с помощью connection: local, используйте параметры модуля authorize и auth_pass:
- hosts: eos-switches
ansible_connection: local
tasks:
- name: Gather facts (eos)
eos_facts:
gather_subset:
- "!hardware"
provider:
authorize: yes
auth_pass: " {{ secret_auth_pass }}"
Рекомендуется обновить плейбуки, чтобы использовать become для режима enable сетевого устройства постоянно. Использование словарей authorize и provider будет устаревать в будущем. Подробности см. в документации Параметры платформы и Сетевые модули.
Become и Windows
С Ansible 2.3, become можно использовать на хостах Windows через метод runas. Become на Windows использует ту же конфигурацию инвентаризации и аргументы вызова, что и become на хостах, отличных от Windows, поэтому параметры настройки и имена переменных такие же, как определены в этом документе.
Хотя become можно использовать для принятия личности другого пользователя, существуют и другие варианты использования с хостами Windows. Важно использовать его для обхода некоторых ограничений при работе с WinRM, таких как ограниченная делегация сети или доступ к запрещенным системным вызовам, например, API WUA. Вы можете использовать become с тем же пользователем, что и ansible_user, чтобы обойти эти ограничения и запустить команды, которые обычно недоступны в сессии WinRM.
Права администратора
Многие задачи в Windows требуют прав администратора для выполнения. При использовании метода runas become, Ansible попытается выполнить модуль с полными правами, доступными удалённому пользователю. Если это не удастся, он продолжит использование ограниченного токена во время выполнения.
Пользователь должен иметь право SeDebugPrivilege для запуска процесса become с повышенными привилегиями. Это право по умолчанию предоставляется администраторам. Если право отладки недоступно, процесс become будет выполняться с ограниченным набором привилегий и групп.
Чтобы определить тип токена, который Ansible смог получить, выполните следующую задачу:
- win_whoami: become: yes
Вывод будет примерно таким:
ok: [windows] => {
"account": {
"account_name": "vagrant-domain",
"domain_name": "DOMAIN",
"sid": "S-1-5-21-3088887838-4058132883-1884671576-1105",
"type": "User"
},
"authentication_package": "Kerberos",
"changed": false,
"dns_domain_name": "DOMAIN.LOCAL",
"groups": [
{
"account_name": "Administrators",
"attributes": [
"Mandatory",
"Enabled by default",
"Enabled",
"Owner"
],
"domain_name": "BUILTIN",
"sid": "S-1-5-32-544",
"type": "Alias"
},
{
"account_name": "INTERACTIVE",
"attributes": [
"Mandatory",
"Enabled by default",
"Enabled"
],
"domain_name": "NT AUTHORITY",
"sid": "S-1-5-4",
"type": "WellKnownGroup"
},
],
"impersonation_level": "SecurityAnonymous",
"label": {
"account_name": "High Mandatory Level",
"domain_name": "Mandatory Label",
"sid": "S-1-16-12288",
"type": "Label"
},
"login_domain": "DOMAIN",
"login_time": "2018-11-18T20:35:01.9696884+00:00",
"logon_id": 114196830,
"logon_server": "DC01",
"logon_type": "Interactive",
"privileges": {
"SeBackupPrivilege": "disabled",
"SeChangeNotifyPrivilege": "enabled-by-default",
"SeCreateGlobalPrivilege": "enabled-by-default",
"SeCreatePagefilePrivilege": "disabled",
"SeCreateSymbolicLinkPrivilege": "disabled",
"SeDebugPrivilege": "enabled",
"SeDelegateSessionUserImpersonatePrivilege": "disabled",
"SeImpersonatePrivilege": "enabled-by-default",
"SeIncreaseBasePriorityPrivilege": "disabled",
"SeIncreaseQuotaPrivilege": "disabled",
"SeIncreaseWorkingSetPrivilege": "disabled",
"SeLoadDriverPrivilege": "disabled",
"SeManageVolumePrivilege": "disabled",
"SeProfileSingleProcessPrivilege": "disabled",
"SeRemoteShutdownPrivilege": "disabled",
"SeRestorePrivilege": "disabled",
"SeSecurityPrivilege": "disabled",
"SeShutdownPrivilege": "disabled",
"SeSystemEnvironmentPrivilege": "disabled",
"SeSystemProfilePrivilege": "disabled",
"SeSystemtimePrivilege": "disabled",
"SeTakeOwnershipPrivilege": "disabled",
"SeTimeZonePrivilege": "disabled",
"SeUndockPrivilege": "disabled"
},
"rights": [
"SeNetworkLogonRight",
"SeBatchLogonRight",
"SeInteractiveLogonRight",
"SeRemoteInteractiveLogonRight"
],
"token_type": "TokenPrimary",
"upn": "vagrant-domain@DOMAIN.LOCAL",
"user_flags": []
}
В ключе label запись account_name определяет, обладает ли пользователь правами администратора. Вот метки, которые могут быть возвращены и что они представляют:
-
Medium: Ansible не смог получить повышенный токен и выполнил задачу с ограниченным токеном. Во время выполнения модуля доступна только подмножество привилегий, назначенных пользователю, и у пользователя нет прав администратора. -
High: Был использован повышенный токен, и все привилегии, назначенные пользователю, доступны во время выполнения модуля. -
System: Используется учетная записьNT AUTHORITY\Systemи она имеет наивысший уровень доступных привилегий.
Вывод также покажет список привилегий, предоставленных пользователю. Когда значение привилегии равно disabled, привилегия назначена токену входа, но не активирована. В большинстве случаев эти привилегии автоматически активируются при необходимости.
Если используется версия Ansible, более старая, чем 2.5, или обычный процесс повышения привилегий runas терпит неудачу, повышенный токен можно получить:
- Установите
become_userна значениеSystem, которое имеет полный контроль над операционной системой. -
Предоставьте
SeTcbPrivilegeпользователю, с которым Ansible подключается через WinRM.SeTcbPrivilege— это привилегия высокого уровня, предоставляющая полный контроль над операционной системой. По умолчанию ни одному пользователю не назначается эта привилегия, и следует проявлять осторожность при её предоставлении пользователю или группе. Подробнее об этой привилегии см. в Act as part of the operating system. Для настройки этой привилегии на хосте Windows можно использовать следующую задачу:- name: grant the ansible user the SeTcbPrivilege right win_user_right: name: SeTcbPrivilege users: '{{ansible_user}}' action: add -
Отключите UAC на хосте и перезагрузите его перед попыткой повышения привилегий пользователя. UAC — это протокол безопасности, предназначенный для работы учётных записей с принципом
least privilege. Вы можете отключить UAC, выполнив следующие задачи:- name: turn UAC off win_regedit: path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system name: EnableLUA data: 0 type: dword state: present register: uac_result - name: reboot after disabling UAC win_reboot: when: uac_result is changed
Примечание
Предоставление SeTcbPrivilege или отключение UAC может привести к уязвимостям безопасности Windows, поэтому следует проявлять осторожность при выполнении этих шагов.
Учетные записи локальных служб
Прежде чем использовать Ansible версии 2.5, become работало только в Windows с локальным или доменным учетной записью пользователя. Локальные учетные записи службы, такие как System или NetworkService, не могли быть использованы как become_user в этих более ранних версиях. Это ограничение было снято с момента выпуска Ansible 2.5. Три учетные записи служб, которые можно задать в become_user, следующие:
- Система
- NetworkService
- LocalService
Поскольку локальные учетные записи служб не имеют паролей, параметр ansible_become_password не требуется и игнорируется, если указан.
Become без задания пароля
Начиная с Ansible 2.8, become может быть использован для перехода в локальную или доменную учетную запись Windows без требования пароля для этой учетной записи. Для работы этого метода должны быть выполнены следующие требования:
- Пользователь подключения имеет привилегию
SeDebugPrivilege - Пользователь подключения входит в группу
BUILTIN\Administrators become_userимеет право пользователяSeBatchLogonRightилиSeNetworkLogonRight
Использование become без пароля достигается одним из двух различных методов:
- Дублирование токена существующей сессии входа в систему, если учетная запись уже вошла в систему
- Использование S4U для генерации токена входа в систему, действительного только на удалённом хосте
В первом случае процесс become запускается от другого входа в систему для этой учетной записи пользователя. Это может быть существующий вход RDP, вход в консоль, но это не гарантируется каждый раз. Это похоже на опцию Run only when user is logged on для запланированной задачи.
В случае, когда другой вход в систему для учетной записи become не существует, используется S4U для создания нового входа в систему и выполнения модуля через него. Это похоже на опцию Run whether user is logged on or not с опцией Do not store password для запланированной задачи. В этом случае процесс become не сможет получить доступ к сетевым ресурсам, как обычный процесс WinRM.
Чтобы отличить использование become без пароля от перехода к учетной записи без пароля, убедитесь, что ansible_become_password не определено или ansible_become_password:.
Примечание
Поскольку нет гарантии, что существующий токен будет существовать для пользователя, когда Ansible выполняется, существует высокая вероятность, что процесс become будет иметь доступ только к локальным ресурсам. Используйте become с паролем, если задача должна получить доступ к сетевым ресурсам.
Учетные записи без пароля
Предупреждение
В качестве общей рекомендации по безопасности, вы должны избегать предоставления учетных записей без паролей.
Ansible может быть использован для перехода к учетной записи Windows, у которой нет пароля (например, учетной записи Guest). Для перехода к учетной записи без пароля, настройте переменные как обычно, но установите ansible_become_password: ''.
Прежде чем become сможет работать с такой учетной записью, локальная политика Учетные записи: Ограничение использования локальными учетными записями пустых паролей только для входа в консоль должна быть отключена. Это можно сделать через объект групповой политики (GPO) или с помощью этой задачи Ansible:
- name: allow blank password on become
win_regedit:
path: HKLM:\SYSTEM\CurrentControlSet\Control\Lsa
name: LimitBlankPasswordUse
data: 0
type: dword
state: present
Примечание
Это только для учетных записей, у которых нет пароля. Вы все равно должны установить пароль учетной записи в ansible_become_password, если у become_user есть пароль.
Флаги become для Windows
Ansible 2.5 добавил параметр become_flags к методу become runas. Этот параметр можно установить с помощью директивы задачи become_flags или в конфигурации Ansible с помощью ansible_become_flags. Два допустимых значения, которые первоначально поддерживаются для этого параметра, — это logon_type и logon_flags.
Примечание
Эти флаги следует устанавливать только при переходе к обычной учетной записи пользователя, а не к локальной учетной записи службы, например LocalSystem.
Ключ logon_type устанавливает тип операции входа в систему, которую нужно выполнить. Значение может быть установлено на одно из следующих:
-
interactive: Тип входа по умолчанию. Процесс будет запущен в контексте, совпадающем с контекстом запуска процесса локально. Это обходит все ограничения WinRM и является рекомендуемым методом. -
batch: Запускает процесс в контексте пакетной обработки, который аналогичен запланированной задаче с установленным паролем. Это должно обойти большинство ограничений WinRM и полезно, еслиbecome_userне разрешено входить в систему интерактивно. -
new_credentials: Запускает процесс под теми же учетными данными, что и вызывающий пользователь, но исходящие подключения выполняются в контекстеbecome_userиbecome_password, подобноrunas.exe /netonly. Флагlogon_flagsтакже должен быть установлен наnetcredentials_only. Используйте этот флаг, если процесс должен получить доступ к сетевому ресурсу (например, общей папке SMB) с использованием другого набора учетных данных. -
network: Запускает процесс в сетевом контексте без кэшированных учетных данных. Это приводит к тому же типу сессии входа в систему, что и при запуске обычного процесса WinRM без делегирования учетных данных, и работает под теми же ограничениями. -
network_cleartext: Как тип входаnetwork, но вместо этого кэширует учетные данные, чтобы получить доступ к сетевым ресурсам. Это такой же тип сессии входа в систему, как и запуск обычного процесса WinRM с делегированием учетных данных.
Для получения дополнительной информации см. dwLogonType.
Ключ logon_flags определяет, как Windows войдет в систему пользователя при создании нового процесса. Значение может быть установлено на ничего или на несколько следующих:
-
with_profile: Установлен флаг входа по умолчанию. Процесс загрузит профиль пользователя в реестреHKEY_USERSвHKEY_CURRENT_USER. -
netcredentials_only: Процесс будет использовать тот же токен, что и вызывающий, но будет использоватьbecome_userиbecome_passwordпри доступе к удаленному ресурсу. Это полезно в междоменных сценариях, где нет доверия, и должно использоваться с флагомnew_credentialslogon_type.
По умолчанию logon_flags=with_profile установлено, если профиль не должен загружаться, установите logon_flags= или если профиль должен быть загружен с netcredentials_only, установите logon_flags=with_profile,netcredentials_only.
Для получения дополнительной информации см. dwLogonFlags.
Вот несколько примеров использования become_flags с задачами Windows:
- name: copy a file from a fileshare with custom credentials
win_copy:
src: \\server\share\data\file.txt
dest: C:\temp\file.txt
remote_src: yes
vars:
ansible_become: yes
ansible_become_method: runas
ansible_become_user: DOMAIN\user
ansible_become_password: Password01
ansible_become_flags: logon_type=new_credentials logon_flags=netcredentials_only
- name: run a command under a batch logon
win_whoami:
become: yes
become_flags: logon_type=batch
- name: run a command and not load the user profile
win_whomai:
become: yes
become_flags: logon_flags=
Ограничения become в Windows
- Запуск задачи с
asyncиbecomeв Windows Server 2008, 2008 R2 и Windows 7 работает только при использовании Ansible 2.7 или более поздней версии. - По умолчанию пользователь become входит в систему с интерактивной сессией, поэтому он должен иметь право на это на хосте Windows. Если он не унаследует привилегию
SeAllowLogOnLocallyили унаследует привилегиюSeDenyLogOnLocally, процесс become завершится неудачей. Добавьте привилегию или установите флагlogon_type, чтобы изменить используемый тип входа в систему. - Прежде чем Ansible версия 2.3, become работал только тогда, когда
ansible_winrm_transportбыл либоbasic, либоcredssp. Это ограничение было снято с момента выпуска Ansible 2.4 для всех хостов, кроме Windows Server 2008 (без версии R2). - Служба вторичного входа
seclogonдолжна быть запущена, чтобы использоватьansible_become_method: runas
См. также
- Список рассылки
- Вопросы? Помощь? Идеи? Заходите на список на Google Groups
- webchat.freenode.net
- #ansible IRC чат-канал
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.9/user_guide/become.html