В Ansible 2.6.1 добавлен https://github.com/ansible/ansible/pull/42070, который заставляет Ansible игнорировать файлы ansible.cfg
в 777 каталогах. Проблема в том, что все монтирования NTFS (все, что находится под /mnt/c
) в WSL в Windows 10 - это 777, поскольку их разрешения управляются Windows.
Обнаружить установку WSL довольно просто, я использовал ansible_kernel.find('Microsoft') != -1
для обнаружения WSL. Проверено на Arch, Ubuntu и Kali.
библиотека / ansible / config / manager.py
ansible 2.6.1
config file = None
configured module search path = [u'/home/cbailey/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.15 (default, May 1 2018, 05:55:50) [GCC 7.3.0]
Нет данных
Windows 10 + любой дистрибутив WSL
sudo pip install ansible==2.6.1
ansible.cfg
где-нибудь на свой диск C:\
cd
в каталог из WSLansible.cfg
файлы при монтировании Windows в WSL не игнорируются
ansible.cfg
файл игнорируется со следующим предупреждением:
[WARNING] Ansible is in a world writable directory (/mnt/c/**), ignoring it as an ansible.cfg source.
Файлы, указанные в описании:
Если эти файлы неточны, обновите раздел описания component name
или используйте команду !component
bot.
Файлы, указанные в описании:
Если эти файлы неточны, обновите раздел описания component name
или используйте команду !component
bot.
Обнаружение того, что система является WSL, все равно оставит уязвимость. Нам нужно будет определить, что файл не доступен для записи всем или находится в каталоге, доступном для записи, несмотря на то, что в разрешениях указано, что это так.
Мы также не поддерживаем Ansible на хостах Windows, поэтому мы не можем гарантировать, что для этого будет создано исправление.
Я полностью понимаю необходимость обеспечения безопасности, но, по крайней мере, должна быть возможность отключить это. Может быть , то , что должно быть в /etc/ansible/ansible.cfg
конкретно или что - то подобное , что делает его труднее перевернуть на.
Существуют и другие варианты использования, когда это может происходить не только при подключении Windows 10 NTFS к WSL. Если у вас есть подключение NTFS или подключение файлового ресурса Azure к заблокированному блоку сборки Linux, для подключения будет 777, но это не означает, что доверять файлам из этого расположения небезопасно.
OpenSSH не мешает вам включить root
пароль для входа в систему, но он говорит вам, что это плохая идея. Большинство руководств по безопасности относятся к цели и окружающему контексту.
Может быть, вы могли бы разрешить людям вносить каталоги в белый список из этой проверки с помощью переменной среды? Что-то вроде ANSIBLE_TRUSTED_CONFIGPATHS
или что-то в этом роде? Если конфигурация находится внутри пути в этой переменной, пропустить проверку разрешений?
Я не так хорошо разбираюсь в питоне, но, может быть, что-то вроде этого?
diff --git a/lib/ansible/config/manager.py b/lib/ansible/config/manager.py
index 48cf2cba3a..b356c84b9e 100644
--- a/lib/ansible/config/manager.py
+++ b/lib/ansible/config/manager.py
@@ -146,6 +146,10 @@ def find_ini_config_file(warnings=None):
''' Load INI Config File order(first found is used): ENV, CWD, HOME, /etc/ansible '''
# FIXME: eventually deprecate ini configs
+ trusted_paths = os.getenv("ANSIBLE_TRUSTED_CONFIGPATHS",None)
+ if isinstance(trusted_paths, string_types):
+ trusted_paths=list(filter(None,trusted_paths.split(':')))
+
path0 = os.getenv("ANSIBLE_CONFIG", None)
if path0 is not None:
path0 = unfrackpath(path0, follow=False)
@@ -154,7 +158,9 @@ def find_ini_config_file(warnings=None):
try:
path1 = os.getcwd()
perms1 = os.stat(path1)
- if perms1.st_mode & stat.S_IWOTH:
+ if trusted_paths and [i for i in trusted_paths if path1.startswith(i)]:
+ path1 += "/ansible.cfg"
+ elif perms1.st_mode & stat.S_IWOTH:
if warnings is not None:
warnings.add("Ansible is in a world writable directory (%s), ignoring it as an ansible.cfg source." % to_text(path1))
path1 = None
Тогда я могу просто установить export ANSIBLE_TRUSTED_CONFIGPATHS=/mnt/c/Users/
в моем профиле оболочки?
Вы можете установить переменную ANSIBLE_CONFIG
чтобы она указывала на ваш доступный для записи файл ansible.cfg, и в настоящее время он работает.
Да, это только текущий рабочий каталог, в котором мы проводим этот тест.
Это предотвращает сюрпризы, такие как изучение вашего дерева файлов, а затем запуск
ansible в / tmp и собирает вредоносный файл ansible.cfg
В чт, 5 июля 2018 г., 23:23 Рамин Барадари [email protected]
написал:
Вы можете установить переменную ANSIBLE_CONFIG так, чтобы она указывала на ваш мир с возможностью записи
ansible.cfg, и в настоящее время он работает.-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/ansible/ansible/issues/42388#issuecomment-402938591 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AAMxWr8Z2LerEPWWmwZu1BR5RT9qgdnTks5uDwJ5gaJpZM4VEmwB
.
Я использую бродягу в Windows для запуска доступных пьес.
Он по-прежнему не работает даже после установки значения ansible_config.
[ root @ controller ] # echo $ ANSIBLE_CONFIG
/ главная / бродяга / проекты / DevOps-проекты /
[ корень @ контроллер mapr-ansible-paysafe] # ls -lh ansible.cfg
-rwxrwxrwx. 1 бродяга бродяга 73 9 июля 07:43 ansible.cfg
[ root @ controller ] # ansible -m ping all -i environment / XXXX / cluster.ini -v
[ПРЕДУПРЕЖДЕНИЕ] Ansible находится в общем каталоге с возможностью записи (/ home / vagrant / projects / DevOps-Projects), игнорируя его как источник ansible.cfg .
Файл конфигурации не найден; используя значения по умолчанию
Временное решение
Install Only ansible 2.6.0
ANSIBLE_CONFIG
env var должна указывать на файл, а не на каталог.
Я наткнулся на ту же проблему, и мне не нужен глобальный cfg для всех моих проектов, мне нужна конфигурация, относящаяся к проекту. Так как я могу это исправить?
Я наткнулся на ту же проблему, и мне не нужен глобальный cfg для всех моих проектов, мне нужна конфигурация, относящаяся к проекту. Так как я могу это исправить?
pip install ansible==2.6.0
пока разработчики не решат, как они хотят с этим справиться.
Проблемы и с общей папкой Vagrant, в данном случае это 0777 режим только для папок, и его нельзя изменить.
Пожалуйста, добавьте проверку, что папка CWD == папка, содержащая файл playbook, а затем не проверяйте, доступен ли мир для записи. Или, может быть, попытаться найти ansible.cfg в той же папке, что и файл playbook? Было бы полезно для бродячих пользователей Windows.
Думаю, нашел решение для 2.6.1 и так далее ...
Создайте этот файл в своем wsl: /etc/wsl.conf
Содержание:
[automount]
enabled = true
mountFsTab = false
root = /mnt/
options = "metadata,umask=22,fmask=11"
[network]
generateHosts = true
generateResolvConf = true
После этого у всех / mnt / c / foo будут разные права доступа к папкам (больше не 777), и вы сможете использовать chmod.
Насколько мне известно, у вас должна быть последняя версия WSL.
wsl.conf документы
Хорошо, комментарий в https://github.com/ansible/ansible/issues/42388#issuecomment -403926971 - это эквивалент совета, который мы бы сказали людям, монтирующим файловую систему ntfs или vfat под Unix, поэтому я думаю, что это правильное решение Вот.
Для людей , использующих ANSIBLE_CONFIG (правильно ... в качестве agaffney нот, он должен указывать на файл , а не каталог), пожалуйста , проверьте конфигурационный файл фактически игнорируются , или это просто выплюнуть дополнительное предупреждение.
Глядя на код, я думаю, что файл конфигурации читается, когда ANSIBLE_CONFIG используется правильно. Если это также является текущим рабочим каталогом, то предупреждающее сообщение выводится в дополнение к используемой конфигурации, поскольку она указана в ANSIBLE_CONFIG. Если это действительно проявляется симптом, его должно быть легко исправить, выдав предупреждение только в том случае, если единственная причина для использования конфигурации заключается в том, что она находится в текущем рабочем каталоге.
`` diff --git a / lib / ansible / config / manager.py b / lib / ansible / config / manager.py
индекс c308c3810d..36641d9e01 100644
--- a / lib / ansible / config / manager.py
+++ б / lib / ansible / config / manager.py
@@ -150,6 +150,8 @@ def find_ini_config_file (warnings = None):
'' 'Загрузка файла конфигурации INI в порядке (используется первый найденный): ENV, CWD, HOME, / etc / ansible' ''
# FIXME: со временем отказаться от конфигураций ini
warn_cwd_public = Верно
path1 = Нет
еще:
путь1 + = "/ansible.cfg"
@@ -175,6 +176,8 @@ def find_ini_config_file (warnings = None):
еще:
путь = Нет
если warn_cwd_public и warnings не None и path! = os.getcwd () + "/ansible.cfg":
Для меня лучшим решением является изменение разрешения на файловую систему nfs, смонтированную на wsl, с включенной опцией Metadata. Для этого выполните следующую процедуру: https://blogs.msdn.microsoft.com/commandline/2018/01/12/chmod-chown-wsl-improvements.
В основном сделайте следующее для монтирования ntfs, чтобы включить "chmod":
sudo umount /mnt/c
sudo mount -t drvfs C:/mnt/c -o metadata
А затем выполните chmod в папке, и все снова в порядке. После того, как метаданные были прикреплены к папке, они остаются там. По моему скромному мнению, должно быть по умолчанию wsl.
Решение для Vagrant, отредактируйте Vagrantfile и добавьте mount_options
:
config.vm.synced_folder "../my-folder", "/home/vagrant/my-folder", mount_options: ["dmode=775"]
Это хороший пример того, почему ansible - это высоконадежный модуль для создания вашего проекта.
Я подготовил проект vagrant + virtualbox + ansible 3 года назад. С тех пор каждые 5 месяцев анзибль перерывается. Я должен найти обходные пути, чтобы ПОРЯДОК РАБОТЫ ПОСТОЯННО. Поэтому я не могу сказать (немногим) пользователям системы, что «это работает», потому что время от времени она просто ломается. Это работало 3 недели назад и не работает сейчас. И это не изменение версии мэра, а просто незначительное изменение, поэтому критические изменения не вариант.
(см. "touch" не реализован в течение многих лет, модуль apt не имеет автоматического удаления, но имеет реализованные предупреждения о том, что я не должен вызывать "apt" как команду, stat.md5 удален без уведомления, расположение vault_password.txt не было разрешено устанавливать в недоступном. cfg (запрос функции закрыт, затем реализован спустя годы) и т. д.)
Вам нужно использовать обходные пути каждые несколько недель, чтобы получить тот же результат, что и раньше.
Я надеялся на более зрелое управление проектами от Redhat и ansible 2.0, но пусть это будет предупреждением для новичков, что ansible требует поддержки.
Не могли бы вы написать это предупреждение в STDERR вместо STDOUT ?
[WARNING] Ansible is in a world writable directory...
Я вижу это сообщение, когда расшифровываю файл переменных в STDOUT, и мне придется взломать какой-то специальный узел кода, чтобы следить за ним и вырезать эту строку.
О ха, похоже, это работает
export ANSIBLE_CONFIG=./ansible.cfg
Добавьте это в любые настройки vagrant / docker / wsl
Обо всех этих обходных путях полезно знать, но я думаю, что это нелепое предположение, и не иметь возможного обходного пути с встроенными флагами ansible-playbook. Сейчас я трачу свой день на обновление 40 заданий сборки с помощью хитрых обходных путей для критических изменений, которые были внесены при изменении версии патча! И все эти сборки выполняются в недолговечных контейнерах, к которым имеет доступ один автоматизированный пользователь, поэтому эта опасная всемирная дыра в безопасности, от которой вы меня защищаете, является совершенно неверным предположением.
Быстрое обновление: мы не игнорируем это - мы рассматриваем несколько разных идей, чтобы сохранить исправление безопасности, чтобы не читать конфигурацию из незащищенного cwd. Поверьте мне, то, что было выпущено в ответ на недавние CVE по этому поводу, было очень взвешенным подходом по сравнению с некоторыми из применяемых драконовских мер.
Тем не менее, я уверен, что мы можем придумать усовершенствование или обходной путь, чтобы поддержать эти случаи, когда «всемирная запись доступна, но не совсем».
@thegreatjerboa Не могли бы вы
@jefflill Я работаю над предложением исправить более общую проблему (почти все предупреждения и ошибки, а также подробная информация о типе отладки) отправляются на стандартный вывод вместо стандартного вывода. к сожалению, меня постоянно втягивают в другие проблемы ...
@nitzmahone, это тот же пьеса . У нас есть репозиторий git для каждой пьесы, который запускается при регистрации. Ansible.cfg и playbook - это верхний уровень репо, который также является CWD при его запуске.
каталог playbook не просматривается для ansible.cfg
export ANSIBLE_CONFIG=./ansible.cfg
НЕ работает для меня, все еще получаю
[WARNING] Ansible is in a world writable directory (/mnt/c/Users/soar/projectdir), ignoring it as an ansible.cfg source.
с ansible 2.6.2
Как я уже просил ... Действительно ли он забирает файл конфигурации, несмотря на
печать этого предупреждения?
Логика выводила предупреждение, даже если оно было использовано из-за
ANSIBLE_CONFIG.
Такая же проблема возникла сегодня после обновления. Мы используем это в производстве, поэтому сейчас наши отчеты о клиентах не работают. Пожалуйста, исправьте это.
Теперь это было исправлено в разработке через https://github.com/ansible/ansible/pull/43583 Backports для 2.6 и 2.5 находятся в двух PR https://github.com/ansible/ansible/pull/43648 и https : //github.com/ansible/ansible/pull/43649, и backport также был объединен со стабильным 2.4, если будет еще один выпуск 2.4.x.
Что в исправлении?
Если вы все еще сталкиваетесь с этой проблемой при тестировании ветки разработки, откройте новую проблему, чтобы сообщить нам точные симптомы, чтобы мы могли воспроизвести ее.
Если это может быть полезно в качестве варианта использования, мы используем ansible на машине ubuntu рабочей станции vmware, используя общую папку, указывающую на физическое местоположение.
Изначально это место монтирования было создано по ошибке с разрешениями 777. Мы снизили его до 755.
Я установил для переменной среды ANSIBLE_CONFIG абсолютный путь к имени файла ansible.cfg ( /path/to/ansible.cfg
), и я все еще получаю сообщение: [WARNING] Ansible is in a world writable directory ...
$ ansible --version
[WARNING] Ansible is in a world writable directory (/c/Users/my/path/to/ansible), ignoring it as an ansible.cfg source.
ansible 2.6.2
config file = /path/to/ansible.cfg
configured module search path = [u'/home/me/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.12 (default, Dec 4 2017, 14:50:18) [GCC 5.4.0 20160609]
Если вы можете проверить это на ветке devel или одном из PR с backports до 2.6 или 2.5, это будет здорово. В противном случае вы можете дождаться выхода 2.6.3 и попробовать ее там.
В документации, которая была частью патча, есть ссылки на информацию для
как бродяга, так и окна о том, как монтировать файловые системы без мира
записываемые каталоги:
https://docs.ansible.com/ansible/devel/reference_appendices/config.html#avoiding -security-sizes-with-ansible-cfg-in-the-current-directory
Эта информация вам не подходит?
В пятницу, 17 августа 2018 г., 3:23 Whidegroup [email protected] написал:
Как только у нас будет версия 2.6.3 - теперь должна быть идея сделать ее
работать под Windows машиной. Может ли кто-нибудь посоветовать настройку
Комбо vagrant / ansible для правильной работы с указанием пути к файлу .cfg?-
Вы получаете это, потому что изменили состояние открытия / закрытия.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/ansible/ansible/issues/42388#issuecomment-413823645 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AAMxWhtxSRE6GQW6ZYJflqydXhrQW-FDks5uRpmLgaJpZM4VEmwB
.
У меня Ubuntu установлен в Windows 10 вместе с WSL
Я добавил следующее в свой / etc / environment
ANSIBLE_CONFIG = "/ etc / ansible / ansible.cfg"
Я все еще получаю сообщение об ошибке
Как те, кто добавил переменную окружения ANSIBLE_CONFIG, заставили ее работать?
Можете ли вы открыть новый билет с подробной информацией о вашей настройке, выводе и способах воспроизведения? Последние выпуски 2.6 и 2.7 должны работать без предупреждения, если установлен ANSIBLE_CONFIG
экспорт ANSIBLE_CONFIG =. / ansible.cfg
Если это ansible.cfg в вашем текущем каталоге, не знаю, почему вы не разрешаете его, поскольку вы перемещаетесь туда. Но иметь ANSIBLE_CONFIG - это здорово! И думать о безопасности намного лучше, чем игнорировать ее. Спасибо!!!
Самый полезный комментарий
Думаю, нашел решение для 2.6.1 и так далее ...
Создайте этот файл в своем wsl: /etc/wsl.conf
Содержание:
После этого у всех / mnt / c / foo будут разные права доступа к папкам (больше не 777), и вы сможете использовать chmod.
Насколько мне известно, у вас должна быть последняя версия WSL.
wsl.conf документы