Ansible: Windows 10 / WSL: Ansible tidak dapat membaca ansible.cfg dari dudukan NTFS

Dibuat pada 6 Jul 2018  ·  37Komentar  ·  Sumber: ansible/ansible

RINGKASAN

Ansible 2.6.1 menambahkan https://github.com/ansible/ansible/pull/42070 yang membuat Ansible mengabaikan file ansible.cfg di 777 direktori. Masalahnya adalah bahwa semua pemasangan NTFS (apa pun di bawah /mnt/c ) di WSL pada Windows 10 adalah 777 karena izinnya dikelola oleh Windows.

Mendeteksi instalasi WSL cukup mudah, saya telah menggunakan ansible_kernel.find('Microsoft') != -1 untuk mendeteksi WSL. Diuji di Arch, Ubuntu, dan Kali.

JENIS MASALAH
  • Laporan Bug
NAMA KOMPONEN

lib / ansible / config / manager.py

VERSI ANSIBLE
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]
KONFIGURASI

T / A

OS / LINGKUNGAN

Windows 10 + distro WSL apa pun

LANGKAH UNTUK REPRODUKSI
  1. Instal distro WSL
  2. sudo pip install ansible==2.6.1
  3. Letakkan ansible.cfg some di mana pada drive C:\
  4. cd ke Direktori dari WSL
  5. Jalankan perintah apa pun yang mungkin
HASIL YANG DIHARAPKAN

ansible.cfg file pada Windows mount di WSL tidak diabaikan

HASIL NYATA

ansible.cfg file diabaikan dengan peringatan berikut:

[WARNING] Ansible is in a world writable directory (/mnt/c/**), ignoring it as an ansible.cfg source.
affects_2.6 bug core windows

Komentar yang paling membantu

Saya rasa saya menemukan solusi untuk 2.6.1 dan seterusnya ...

Buat file ini di wsl Anda: /etc/wsl.conf

Kandungan:

[automount]
enabled = true
mountFsTab = false
root = /mnt/
options = "metadata,umask=22,fmask=11"

[network]
generateHosts = true
generateResolvConf = true

Setelah itu semua / mnt / c / foo akan memiliki izin folder yang berbeda (bukan 777 lagi) dan Anda akan dapat menggunakan chmod.
Ini mengharuskan Anda untuk memiliki WSL terbaru sejauh yang saya tahu.
wsl.conf docs

Semua 37 komentar

File diidentifikasi dalam deskripsi:

Jika file ini tidak akurat, harap perbarui bagian component name dari deskripsi atau gunakan perintah !component bot.

klik di sini untuk bantuan bot

File diidentifikasi dalam deskripsi:

Jika file ini tidak akurat, harap perbarui bagian component name dari deskripsi atau gunakan perintah !component bot.

klik di sini untuk bantuan bot

Mendeteksi bahwa sistemnya WSL masih akan meninggalkan kerentanan. Kami harus mendeteksi bahwa file tersebut tidak dapat ditulis oleh dunia atau dalam direktori yang dapat ditulis oleh dunia meskipun izin mengatakannya demikian.

Kami juga tidak mendukung Ansible di host Windows, jadi kami tidak dapat menjamin perbaikan akan dibuat untuk ini.

Saya benar-benar memahami kebutuhan akan keamanan, tetapi setidaknya harus ada opsi cara menonaktifkannya. Mungkin sesuatu yang harus ada di /etc/ansible/ansible.cfg secara khusus atau sesuatu yang serupa yang membuatnya lebih sulit untuk dinyalakan.

Ada kasus penggunaan lain di mana ini tidak hanya menjadi mount Windows 10 NTFS ke WSL yang akan terjadi. Jika Anda memiliki pemasangan NTFS atau pemasangan Berbagi File Azure pada kotak build Linux yang terkunci, pemasangannya adalah 777, tetapi tidak berarti tidak aman untuk mempercayai file dari lokasi itu.

OpenSSH tidak menghentikan Anda untuk mengaktifkan root kata sandi masuk, tetapi itu memberi tahu Anda bahwa itu adalah ide yang buruk. Kebanyakan pedoman keamanan relatif terhadap tujuan dan konteks di sekitarnya.

Mungkin Anda dapat mengizinkan orang untuk memasukkan direktori dari pemeriksaan ini ke daftar putih melalui variabel lingkungan? Sesuatu seperti ANSIBLE_TRUSTED_CONFIGPATHS atau sesuatu? Jika konfigurasi berada di dalam jalur dalam variabel itu, lewati pemeriksaan izin?

Saya tidak pandai python, tapi mungkin sesuatu seperti ini?

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

Lalu saya bisa menyetel export ANSIBLE_TRUSTED_CONFIGPATHS=/mnt/c/Users/ di profil shell saya?

Anda dapat menyetel variabel ANSIBLE_CONFIG agar mengarah ke dunia Anda yang dapat ditulis ansible.cfg dan saat ini berfungsi.

Ya, hanya direktori kerja saat ini tempat kami melakukan pengujian ini.
Ini mencegah kejutan seperti menjelajahi pohon file Anda dan kemudian menjalankannya
ansible di / tmp dan mengambil ansible.cfg berbahaya

Pada Kamis, 5 Juli 2018, 23:23 Ramin Baradari [email protected]
menulis:

Anda dapat menyetel variabel ANSIBLE_CONFIG agar mengarah ke dunia Anda yang dapat ditulis
ansible.cfg dan saat ini berfungsi.

-
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/42388#issuecomment-402938591 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AAMxWr8Z2LerEPWWmwZu1BR5RT9qgdnTks5uDwJ5gaJpZM4VEmwB
.

saya menggunakan gelandangan di windows untuk menjalankan buku pedoman yang memungkinkan.

Ini masih gagal bahkan setelah menyetel nilai ansible_config.

[ root @ controller ] # echo $ ANSIBLE_CONFIG
/ home / gelandangan / proyek / DevOps-Projects /

[ root @ controller mapr-ansible-paysafe] # ls -lh ansible.cfg
-rwxrwxrwx. 1 gelandangan gelandangan 73 9 Jul 07:43 ansible.cfg

[ root @ controller ] # ansible -m ping all -i environment / XXXX / cluster.ini -v
[PERINGATAN] Ansible ada dalam direktori dunia yang dapat ditulis (/ home / gelandangan / proyek / DevOps-Projects), mengabaikannya sebagai sumber ansible.cfg .
Tidak ada file konfigurasi yang ditemukan; menggunakan default

Solusi sementara
Install Only ansible 2.6.0

ANSIBLE_CONFIG env var harus mengarah ke file, bukan direktori.

Saya telah menemukan masalah yang sama, dan saya tidak menginginkan cfg global untuk semua proyek saya, saya memerlukan konfigurasi proyek-relatif. Jadi bagaimana saya bisa memperbaikinya untuk saya?

Saya telah menemukan masalah yang sama, dan saya tidak menginginkan cfg global untuk semua proyek saya, saya memerlukan konfigurasi proyek-relatif. Jadi bagaimana saya bisa memperbaikinya untuk saya?

pip install ansible==2.6.0 hingga pengembang memutuskan bagaimana mereka ingin menangani ini.

Masalah pada folder bersama gelandangan juga, itu adalah mode hanya 0777 untuk folder dalam kasus ini dan tidak dapat diubah.
Tolong, tambahkan centang bahwa folder CWD == folder yang berisi file playbook, dan kemudian jangan periksa untuk world writable. Atau mungkin mencoba mencari ansible.cfg di folder yang sama dengan file playbook? Akan sangat membantu bagi gelandangan pada pengguna windows.

Saya rasa saya menemukan solusi untuk 2.6.1 dan seterusnya ...

Buat file ini di wsl Anda: /etc/wsl.conf

Kandungan:

[automount]
enabled = true
mountFsTab = false
root = /mnt/
options = "metadata,umask=22,fmask=11"

[network]
generateHosts = true
generateResolvConf = true

Setelah itu semua / mnt / c / foo akan memiliki izin folder yang berbeda (bukan 777 lagi) dan Anda akan dapat menggunakan chmod.
Ini mengharuskan Anda untuk memiliki WSL terbaru sejauh yang saya tahu.
wsl.conf docs

Oke, komentar di https://github.com/ansible/ansible/issues/42388#issuecomment -403926971 setara dengan saran yang akan kami sampaikan kepada orang-orang untuk memasang sistem file ntfs atau vfat di bawah Unix jadi saya pikir itu adalah solusi yang tepat sini.

Untuk orang-orang yang menggunakan ANSIBLE_CONFIG (benar ... sebagai catatan agaffney, ini perlu menunjuk ke file bukan direktori), silakan periksa apakah file konfigurasi benar -

Dari melihat kodenya, saya berpikir bahwa file konfigurasi terbaca ketika ANSIBLE_CONFIG digunakan dengan benar. Jika itu kebetulan juga merupakan direktori kerja saat ini, maka pesan peringatan akan dikeluarkan selain konfigurasi yang digunakan karena terdaftar di ANSIBLE_CONFIG. Jika itu memang gejala yang dilihat, akan mudah untuk memperbaikinya dengan hanya mengeluarkan peringatan jika satu-satunya alasan konfigurasi digunakan adalah karena berada di direktori kerja saat ini.

`` diff --git a / lib / ansible / config / manager.py b / lib / ansible / config / manager.py
indeks c308c3810d..36641d9e01 100644
--- a / lib / ansible / config / manager.py
+++ b / lib / ansible / config / manager.py
@@ -150,6 +150,8 @@ def find_ini_config_file (peringatan = Tidak ada):
'' 'Muat pesanan File INI Config (pertama kali ditemukan digunakan): ENV, CWD, HOME, / etc / ansible' ''
# FIXME: akhirnya menghentikan konfigurasi ini

  • warn_cwd_public = Salah
    +
    path0 = os.getenv ("ANSIBLE_CONFIG", Tidak Ada)
    jika path0 bukan None:
    path0 = unfrackpath (path0, follow = False)
    @@ -159,8 +161,7 @@ def find_ini_config_file (peringatan = Tidak ada):
    jalur1 = os.getcwd ()
    perms1 = os.stat (jalur1)
    jika perms1.st_mode & stat.S_IWOTH:
  • jika peringatan tidak ada:
  • warnings.add ("Ansible ada di direktori dunia yang bisa ditulis (% s), mengabaikannya sebagai sumber ansible.cfg."% to_text (path1))
  • warn_cwd_public = Benar
    path1 = Tidak ada
    lain:
    jalur1 + = "/ansible.cfg"
    @@ -175,6 +176,8 @@ def find_ini_config_file (peringatan = Tidak ada):
    lain:
    path = Tidak ada

  • jika warn_cwd_public dan peringatan bukan None dan path! = os.getcwd () + "/ansible.cfg":

  • warnings.add ("Ansible ada di direktori dunia yang dapat ditulis (% s), dilewati dari kemungkinan daftar sumber ansible.cfg."% to_text (path1))
    jalur kembali ''
    sesuatu seperti ini seharusnya lebih tepat

Bagi saya, solusi terbaik adalah mengubah izin pada sistem file nfs yang dipasang di wsl dengan opsi Metadata dihidupkan. Untuk melakukannya, ikuti prosedur ini di sini: https://blogs.msdn.microsoft.com/commandline/2018/01/12/chmod-chown-wsl-improvements.

Pada dasarnya lakukan hal berikut untuk ntfs mount Anda untuk mengaktifkan "chmod":

sudo umount /mnt/c
sudo mount -t drvfs C:/mnt/c -o metadata

Dan kemudian lakukan chmod pada folder tersebut dan semuanya baik-baik saja lagi. Setelah metadata dilampirkan ke folder itu tetap di sana. harus menjadi default wsl untuk pendapat saya yang sederhana.

Solusi untuk Vagrant, edit Vagrantfile dan tambahkan mount_options :

config.vm.synced_folder "../my-folder", "/home/vagrant/my-folder",  mount_options: ["dmode=775"]

Ini adalah contoh yang bagus mengapa ansible adalah modul pemeliharaan tinggi untuk membangun proyek Anda.

Saya telah menyiapkan gelandangan + kotak virtual + proyek yang memungkinkan 3 tahun yang lalu. Sejak itu setiap 5 bulan diperbolehkan istirahat. Saya harus menerapkan solusi untuk MENJAGA BEKERJA SAMA. Jadi saya tidak dapat memberi tahu (beberapa) pengguna sistem bahwa "ini berfungsi", karena sering kali sistem tersebut rusak. Ini berfungsi 3 minggu yang lalu, dan sekarang tidak berfungsi. Dan ini bukan perubahan versi walikota, hanya perubahan kecil, jadi perubahan yang melanggar bukanlah suatu pilihan.

(lihat "touch" tidak diterapkan selama bertahun-tahun, modul apt tidak memiliki autoremove tetapi telah menerapkan peringatan bahwa saya tidak boleh memanggil "apt" sebagai perintah, stat.md5 dihapus tanpa pemberitahuan, lokasi vault_password.txt tidak diizinkan untuk disetel di ansible. cfg (permintaan fitur ditutup, kemudian beberapa tahun kemudian diterapkan) dll ...)

Anda perlu menggunakan solusi setiap beberapa minggu untuk mendapatkan hasil yang sama seperti sebelumnya.

Saya berharap untuk manajemen proyek yang lebih matang dari Redhat dan ansible 2.0, tapi biarlah ini menjadi peringatan bagi pendatang baru, bahwa mungkin perlu dirawat.

Bisakah Anda menuliskan peringatan ini ke STDERR alih-alih STDOUT ?

[WARNING] Ansible is in a world writable directory...

Saya melihat pesan ini ketika saya mendekripsi file variabel ke STDOUT dan saya harus meretas beberapa node kode khusus untuk diperhatikan dan menghapus baris ini.

Oh ha, ini sepertinya berhasil

export ANSIBLE_CONFIG=./ansible.cfg

Lempar itu di pengaturan gelandangan / buruh pelabuhan / wsl

Semua solusi ini bagus untuk diketahui, tapi saya pikir ini adalah asumsi yang konyol, dan tidak memiliki solusi yang mungkin dengan flag inline ansible-playbook. Saya sekarang menghabiskan hari saya memperbarui 40 pekerjaan pembangunan dengan solusi hacky, untuk memecahkan perubahan yang diperkenalkan dalam perubahan versi tambalan! Dan semua build ini berjalan dalam container berumur pendek yang aksesnya hanya dimiliki oleh satu pengguna otomatis, jadi lubang keamanan berbahaya dunia yang dapat ditulis yang Anda lindungi dari saya ini adalah asumsi yang sepenuhnya tidak valid.

Pembaruan cepat: kami tidak mengabaikan ini- kami sedang melihat beberapa ide berbeda untuk menjaga perbaikan keamanan dari tidak membaca konfigurasi dari cwd yang tidak dilindungi. Percayalah, apa yang dikirimkan sebagai tanggapan terhadap CVE baru-baru ini adalah pendekatan yang sangat terukur dibandingkan dengan beberapa tindakan kejam yang diapungkan.

Karena itu, saya yakin kami dapat menemukan perbaikan atau solusi untuk mendukung kasus "yang dapat ditulis di dunia tetapi tidak benar-benar" ini.

@thegreatjerboa Bisakah Anda lebih spesifik tentang penyiapan Anda? Saya ingin tahu mengapa Anda secara implisit membaca ansible.cfg dari cwd daripada lokasi tetap (yang seharusnya berfungsi dengan baik dengan world-writable- jika tidak, itu bug).

@ jefflill Saya sedang mengerjakan proposal untuk memperbaiki masalah yang lebih umum di sana (bahwa hampir semua peringatan dan kesalahan, serta informasi jenis debugging yang panjang lebar) akan menjadi stdout daripada stderr. sayangnya, saya terus ditarik ke masalah lain ...

@nitzmahone itu sama-dir-as-playbook. Kami memiliki git repo per pedoman yang dijalankan saat check in. Ansible.cfg dan playbook adalah level teratas dari repo, yang juga merupakan CWD saat dijalankan.

dir playbook tidak dilihat untuk ansible.cfg

export ANSIBLE_CONFIG=./ansible.cfg

TIDAK bekerja untuk saya, masih mendapatkan

 [WARNING] Ansible is in a world writable directory (/mnt/c/Users/soar/projectdir), ignoring it as an ansible.cfg source.

dengan ansible 2.6.2

Seperti yang saya tanyakan sebelumnya ... Apakah itu benar-benar mengambil file konfigurasi
mencetak peringatan itu?

Logika mencetak peringatan bahkan jika itu digunakan karena
ANSIBLE_CONFIG.

43583 memperbaiki peringatan dan harus digabungkan hari ini untuk pengembangan (backport untuk diikuti)

Mengalami masalah yang sama hari ini setelah peningkatan. Kami menggunakan ini dalam produksi jadi sekarang laporan pelanggan kami tidak berfungsi. Harap berikan perbaikan untuk ini.

Ini sekarang telah diperbaiki dalam pengembangan melalui https://github.com/ansible/ansible/pull/43583 Backports untuk 2.6 dan 2.5 ada di dua PR https://github.com/ansible/ansible/pull/43648 dan https : //github.com/ansible/ansible/pull/43649 dan backport juga telah digabungkan ke stable-2.4 jika ada rilis 2.4.x lainnya.

Apa perbaikannya?

  • Dokumentasi yang menjelaskan risiko keamanan dan menunjukkan cara yang benar untuk memperbaikinya (memasang sistem file sehingga pengguna dan grup yang perlu mengakses ansible.cfg dapat melakukannya daripada memasang direktori world writable.
  • Pointer ke posting blog yang menjelaskan bagaimana melakukan ini untuk gelandangan dan WSL (Gelandangan tampaknya tidak memiliki sesuatu yang lebih resmi daripada posting blog untuk dijelaskan dan fitur WSL memiliki dokumentasi resmi dan posting blog yang menjelaskan secara lebih rinci cara memasang sistem file).
  • Dokumentasi yang menjelaskan bahwa menyetel ANSIBLE_CONFIG ke file konfigurasi yang Anda perlukan dapat digunakan jika Anda benar-benar harus memilikinya di direktori world writable seperti yang diminta oleh @AngellusMortis dan @zoredache
  • Perbaikan untuk peringatan tentang melewatkan direktori sehingga tidak tampak bahwa file konfigurasi sedang dilewati ketika keduanya berada di direktori kerja saat ini yang dapat ditulis dunia DAN ditentukan di ANSIBLE_CONFIG.

Jika Anda masih mengalami masalah ini saat menguji cabang devel, silakan buka masalah baru untuk memberi tahu kami apa gejala sebenarnya sehingga kami dapat mencoba mereproduksi.

Jika ini dapat berguna sebagai kasus penggunaan, kami menggunakan ansible di mesin ubuntu vmware workstation, menggunakan folder bersama yang mengarah ke lokasi fisik.

Awalnya lokasi pemasangan ini dibuat karena kesalahan dengan 777 izin. Kami menguranginya menjadi 755.

Saya telah menetapkan variabel lingkungan ANSIBLE_CONFIG ke jalur absolut ke nama file ansible.cfg ( /path/to/ansible.cfg ), dan saya masih mendapatkan pesan: [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]

Jika Anda dapat mengujinya terhadap cabang pengembangan atau salah satu PR dengan backport ke 2.6 atau 2.5, itu akan bagus. Jika tidak, Anda dapat menunggu 2.6.3 untuk keluar dan mencobanya di sana.

Dokumentasi yang merupakan bagian dari tambalan memiliki tautan ke informasi untuk
baik gelandangan dan windows tentang cara me-mount filesystem dengan non world
direktori yang dapat ditulis:
https://docs.ansible.com/ansible/devel/reference_appendices/config.html#avoiding -security-risk-with-ansible-cfg-in-the-current-directory

Apakah potongan informasi itu tidak bekerja untuk Anda?

Pada Jum, 17 Agustus 2018, 03.23 Whidegroup [email protected] menulis:

Segera setelah kami memiliki versi 2.6.3 - sekarang harus ada ide untuk membuatnya
bekerja di bawah mesin Windows. Adakah saran tentang menyiapkan
gelandangan / kombo yang mungkin untuk bekerja dengan benar menentukan jalur ke file .cfg?

-
Anda menerima ini karena Anda mengubah status buka / tutup.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/42388#issuecomment-413823645 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AAMxWhtxSRE6GQW6ZYJflqydXhrQW-FDks5uRpmLgaJpZM4VEmwB
.

Saya telah menginstal Ubuntu pada Windows 10 bersama dengan WSL

Saya telah menambahkan yang berikut ini ke / etc / environment saya

ANSIBLE_CONFIG = "/ etc / ansible / ansible.cfg"

Saya masih mendapatkan kesalahan

Bagaimana mereka yang menambahkan variabel lingkungan ANSIBLE_CONFIG membuatnya berfungsi?

Bisakah Anda membuka tiket baru dengan detail tentang pengaturan, keluaran, dan cara memperbanyak? Rilis 2.6 dan 2.7 terbaru akan bekerja tanpa pesan peringatan jika ANSIBLE_CONFIG disetel

ekspor ANSIBLE_CONFIG =. / ansible.cfg

Jika ini adalah ansible.cfg di direktori Anda saat ini, tidak yakin mengapa Anda tidak mengizinkannya, karena Anda menavigasi ke sana. Tetapi memiliki ANSIBLE_CONFIG itu bagus! Dan mempertimbangkan keamanan jauh lebih baik daripada mengabaikannya. Terima kasih!!!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat