Fórum Root.cz

Hlavní témata => Server => Téma založeno: Jiří Šachl 05. 08. 2021, 09:39:37

Název: Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 05. 08. 2021, 09:39:37
zdravím.
Potřebuji poradit.  Ubuntu server 20.04, ansible 2.9.6, python 3.8.10.
Vygenerované heslo pro "spravce" a uloženo do jeho složky
Kód: [Vybrat]
/home/spravce/.ssh/password.yml .
V ansible.cfg jsou nastaveny:
Kód: [Vybrat]
private_key_file = /home/spravce/.ssh/spravce_id_rsa.ppk
vault_password_file = /home/spravce/.ssh/password.yml
[privilege_escalation]
become=True
become_method=sudo
become_user=spravce
become_ask_pass=False

Podle návodu https://docs.ansible.com/ansible/2.4/playbooks_vault.html mám v
Kód: [Vybrat]
/home/spravce/.bashrcnastaveno toto:
Kód: [Vybrat]
ANSIBLE_VAULT_PASSWORD_FILE=/home/spravce/.ssh/password.yml
odhlášen spravce, přihlašen spravce
a chyba:
Kód: [Vybrat]
spravce@sachlj:~$ ansible debian -m ping
[WARNING]: Error in vault password file loading (default): A vault password must be specified to decrypt data
ERROR! A vault password must be specified to decrypt data
spravce@sachlj:~$

Tak kde je ještě chyba? Poradíte?
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: robac 05. 08. 2021, 10:06:11
První, co jednoho zaujme, je, že na začátku dokumentace, kterou používáte je výrazně sděleno:
You are reading an unmaintained version of the Ansible documentation.
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 05. 08. 2021, 10:16:00
Dobře a kde je tedy chyba?
Oni v té aktuální dokumentaci toho moc nepíší: https://docs.ansible.com/ansible/latest/cli/ansible-vault.html
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: IDontCare 05. 08. 2021, 13:08:17
Jak jsi generoval password.yml?
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 05. 08. 2021, 13:13:33
mezitím jsem trochu pokročil..takže jinak s otázkou.
Co potřebuji. v hosts nechat jen ip adresy serverů rozdělené podle distra. To mám. Jen čisté ip adresy.
v ansible.cfg mít popsáno kdo se připojuje - spravce, že je sudo, a cestu k jeho klíči, mám. a teď potřebuji heslo k tomu klíči ale aby bylo zašifrované v souboru kterýmu bude ansible rozumět. To všechno kvůli bezpečnosti když "jeden prsten vládne všem". Prostě aby se komunikace probíhoala šifrovaně, přihlašování pomocí ssh klíčů a heslo aby bylo šifrované.
A ať hledám a zkouším tak se mi nedaří abych vyhověl tomuhle:
Kód: [Vybrat]
# If set, configures the path to the Vault password file as an alternative to
# specifying --vault-password-file on the command line.
vault_password_file = /home/spravce/.ssh/password.yml
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 05. 08. 2021, 14:20:11
podle návodu jsem příkazem:
Kód: [Vybrat]
ansible-vault create --vault-password-file /home/spravce/.ssh/heslo /home/spravce/.ssh/password.ymlkdy v souboru "heslo" je (dejme tomu) jen
Kód: [Vybrat]
Heslo. vault vygeneroval soubor
Kód: [Vybrat]
password.ymlkdyž v ansible.cfg zapnu
Kód: [Vybrat]
vault_password_file = /home/spravce/.ssh/password.ymlpak :
Kód: [Vybrat]
spravce@sachlj:~/.ssh$ ansible all -m ping
[WARNING]: Error in vault password file loading (default): A vault password must be specified to decrypt data
ERROR! A vault password must be specified to decrypt data
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: tr1l1ner 05. 08. 2021, 14:36:16
Bud musis zadat heslo rucne:
Kód: [Vybrat]
ansible-playbook --ask-vault-pass site.yml
Nebo ho mit nekde v souboru, kde si to ansible precte:
Kód: [Vybrat]
ansible-playbook --vault-password-file /path/to/my/vault-password-file site.yml
Dalsi varianta je na to mit vlastni script:
Kód: [Vybrat]
ansible-playbook --vault-password-file my-vault-password-client.py
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 05. 08. 2021, 14:41:44
abych nemusel heslo zadávat ručně, což je na pikaču pokud jsou ansible scripty spouštěny cronem tak se v ansible.cfg zadává heslo do souboru, ale na dvojitou pikaču není nikde vysvětleno jak se ten soubor s heslem který vegeneruje...potřebuji tam mít heslo k souboru
Kód: [Vybrat]
private_key_file = když dám do hosts tohle:
Kód: [Vybrat]
xx.xx.xx.xxansible_ssh_private_key_file=/home/spravce/.ssh/spravce_id_rsa.ppk ansible_ssh_pass=heslotak mi
Kód: [Vybrat]
ansible all -m ping projde normálně a fungují všechny scripty..já ale to heslo chci mít zakryptované tak aby mu rozuměl jen ansible a nedalo se nijak zjistit..je to tak složité????
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: tr1l1ner 05. 08. 2021, 15:22:36
Nj, ale tohle Ansible neumi. Kdyz mu clovek udela vault, tak ho taky musi nejak umet rozsifrovat -> dela to heslem, ktere musi nejak dostat. :) Jedina moznost (alespon bez dalsiho sw) je holt mit nekde "schovane" heslo v plain textu a mit ho citelne jen pro uzivatele, ktery ten ansible pousit.

Edit: Napada me jedna moznost, kterou jsem pouzival ve svych scriptech. Je to takova "Security through obscurity". Mit soubor s heslem zasifrovany gpg klicem (ktery vlastni dany uzivatel). A pomoci scriptu ten soubor desifrovat a poustet ansible treba jak jsem uvedl ten posledni prikaz:
Kód: [Vybrat]
ansible-playbook --vault-password-file my-vault-password-client.py
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: tr1l1ner 05. 08. 2021, 15:36:56
..já ale to heslo chci mít zakryptované tak aby mu rozuměl jen ansible a nedalo se nijak zjistit..je to tak složité????

BTW, tenhle pozadavek se mi zda absolutne nerealny. Bud neco zasifruji a zahodim klice, pak se k tomu nikdo nedostane. Nebo budu mit neco zasifrovane a od toho klice (popripade Ansible), ale pokud se k tomu klici dostane kdokoliv jiny, tak se dostane i k zasifrovanemu obsahu. Jedina moznost je, co nejvice stizit moznost uniku klicu do nepovolanych rukou. Pokud ale klice nekde existovat budou (a to musi, abych se k obsahu dostal), tak bude vzdy sance, ze je nekdo zneuzije.
Pak je jeste moznost, ze mi neco unika... :D
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 05. 08. 2021, 15:38:39
díky, budu zkoušet, ale ansible by měl umět například : v ansible.cfg je možnost:
Kód: [Vybrat]
[privilege_escalation]
#become=True
#become_method=sudo
#become_user=spravce
#become_ask_pass=False

když tohle povolím a v scriptu zakážu tohle:
Kód: [Vybrat]
remote_user: spravce
  become: yes
  become_method: sudo

tak se mi script nespustí..přitom by ansible.cfg mělo mít přednost....a stejná direktiva by se měla vyčíst odsud...
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 05. 08. 2021, 15:49:34
BTW, tenhle pozadavek se mi zda absolutne nerealny. Bud neco zasifruji a zahodim klice, pak se k tomu nikdo nedostane. Nebo budu mit neco zasifrovane a od toho klice (popripade Ansible), ale pokud se k tomu klici dostane kdokoliv jiny, tak se dostane i k zasifrovanemu obsahu. Jedina moznost je, co nejvice stizit moznost uniku klicu do nepovolanych rukou. Pokud ale klice nekde existovat budou (a to musi, abych se k obsahu dostal), tak bude vzdy sance, ze je nekdo zneuzije.
Pak je jeste moznost, ze mi neco unika... :D
ansible umožňuje připojení cestou ssh klíčů, tj šifrovaně, pokud se nepletu, osobní klíč je uložený ve složce .ssh uživatele co má sudo práva na všech řízených serverech. cesta ke klíči se dá nastavit v hosts:
Citace
ansible_ssh_private_key_file=cesta ke klíči
a nebo v ansible.cfg
Citace
private_key_file =cesta ke klíči
heslo k tomuto soukromému klíči se dá vložit otevřené (což by udělal jen idiot) do souboru hosts
Citace
ansible_ssh_pass=nějaké heslo
a nebo konečně správně do souboru který je zašifrovaný a rozumí mu jn ansible a to se určuje v ansible.cfg
Citace
vault_password_file =nějaké heslo
. jenže nikde jsem byhen dneškas nenašel jak ten
Citace
vault_password_file
vygenerovat, jako má mít strukturu aby tomu ansible rozuměl. když dám heslo do souboru hosts tak tomu rozumí a normálně funguje...
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: _mbily 05. 08. 2021, 21:52:11
Citace
vault_password_file

V souboru, na nějž  se odkazujete direktivou vault_password_file, je jen jediný řádek, a v něm je zapsáno to heslo. Žádné další mašličky, dvojtečky, rovnítka a podobné ozdoby.

Dále doporučuji Vaší pozornosti https://stackoverflow.com/questions/51771994/how-do-i-use-an-encrypted-variable-ansible-ssh-pass-in-an-ini-file, včetně věty "It seems also, that the function AnsibleVaultEncryptedUnicode, which decrypts the value, is called only from the YAML parser"

No a nebo můžete ten problém zkusit řešit úplně jinak. Znáte program ssh-agent?
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 06. 08. 2021, 08:37:13
zkusím to, díky...
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 06. 08. 2021, 09:38:41
ne a ne to fungovat.
tak jsem zkusil podle návodu:
https://docs.ansible.com/ansible/latest/user_guide/vault.html
konkrétně:
Citace
ansible-vault encrypt_string --vault-password-file a_password_file 'foobar' --name 'the_secret'
vytvořit heslo co jsem zkopíroval do souboru password.yml na který se odkazuji v ansible.cfg.
odezva ansible je takováto:
Kód: [Vybrat]
spravce@ubuntuserver:~/.ssh$ ansible debian -m ping
[WARNING]: Error in vault password file loading (default): Problem running vault password script /home/spravce/.ssh/password.yml ([Errno 8] Exec format error: '/home/spravce/.ssh/password.yml'). If this
is not a script, remove the executable bit from the file.
ERROR! Problem running vault password script /home/spravce/.ssh/password.yml ([Errno 8] Exec format error: '/home/spravce/.ssh/password.yml'). If this is not a script, remove the executable bit from the fi             le.

původní chown 0755
změněno tedy na 0644 a odpověď ansiblu je:
Kód: [Vybrat]
10.10.10.183 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0755 for '/home/spravce/.ssh/spravce_id_rsa.ppk' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key \"/home/spravce/.ssh/spravce_id_rsa.ppk\": bad permissions\r\nspravce@10.10.10.183: Permission denied (publickey,password).",
    "unreachable": true
chown na 0400
a ansible:
Kód: [Vybrat]
10.10.10.183 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Load key \"/home/spravce/.ssh/spravce_id_rsa.ppk\": invalid format\r\nspravce@10.10.10.183: Permission denied (publickey,password).",
    "unreachable": true
ten ansible si neumí vybrat co chce.....
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Death Walker 07. 08. 2021, 21:09:23
chown na 0400
a ansible:
Kód: [Vybrat]
10.10.10.183 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Load key \"/home/spravce/.ssh/spravce_id_rsa.ppk\": invalid format\r\nspravce@10.10.10.183: Permission denied (publickey,password).",
    "unreachable": true
ten ansible si neumí vybrat co chce.....
S ppk formatom ssh fungovat nebude. Skonvertujte si ho do ssh formatu.
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 09. 08. 2021, 08:02:37
to byl jen pokus, už fakt hledám i drobnosti. Tak například. Dokumentace ansible je o verzi 4 ale mě apt install ansible nainstaloval verzi 2.9.6. Tak jsem prohledal dokumentaci a podle návodu apt remove ansible a raději ještě apt purge ansible, a pak účtem suda spravce pip3 install ansible, grrr, ansible nefungoval na ansible --version, takře pip3 remove ansible a sudo -i a pak pip3 install ansible a měla by se nainstalovat verze 4.5..ale :
Kód: [Vybrat]
spravce@ubuntuserver:~/ansible_sachlj/funguje/update$ ansible --version
ansible [core 2.11.3]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/spravce/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/spravce/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Jun  2 2021, 10:49:15) [GCC 9.4.0]
  jinja version = 2.10.1
  libyaml = True

tak co se mi to vlastně ze zdroje pip3 nainstalovalo....tohle jsem řešil v pátek před odchodem z práce.
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Karmelos 09. 08. 2021, 08:25:46
Podle wiki je aktuální ansible:
 
Vývojář   Ansible komunita/ Ansible Inc. / Red Hat Inc.
První vydání   20. února 2012
Aktuální verze   2.11.3 (20. července 2021)
Operační systém   GNU/Linux, Unix-like, macOS, MS Windows
Vyvíjeno v   Python, PowerShell, Shell, Ruby

Takže teď máte asi poslední verzi...
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 09. 08. 2021, 08:34:15
Díky. Pak by mě to co mají v dokumentaci popsáno mělo fungovat. Ale jak mají popsánu bezpečnost je tristní, všude jsou ukázky toho když někdo nechá v systému díru a tohle (nechat volně válet otevřená hesla) je přímo do nebe volající blbost. a chci vidět ajťáka co si bude pamatovat heslo "Z8A6YDqAmDnm9ne" které bude muset zadávat na každý script ručně. Automatizace není, že budu muset sedět u klávesnice a něco spouštět, byť na 100 serverech. automatizace je, že se to bude bezpečně spouštět beze mě a mě to upozorní jen na problém a ten by měl nastat 1x za 20 let. takže jak automaticky spouštět ansible scripty tak abych přístup měl přes ssh klíč a heslo k tomu klíči měl uloženo v kryptované podobě které bude rozumět pouze ansible. Hleslo složité jako název islandské sopky bude pak v písemné podobě uloženo v trezoru kategorie 0 a nikde ne elektronicky kromě té kryptované podoby. To je bezpečnost.
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 09. 08. 2021, 10:58:06
shrnutí současného stavu.
1. soubor s heslem vygenerován podle návodu https://www.digitalocean.com/community/tutorials/how-to-use-vault-to-protect-sensitive-ansible-data-on-ubuntu-16-04
heslo uloženo do souboru password.txt. Uloženo do složky /home/spravce/.ssh pod právy 0400
v .bashrc podle https://devops.stackexchange.com/questions/703/what-is-ansibles-config-equivalent-of-vault-password-file zadáno :
export ANSIBLE_VAULT_PASSWORD_FILE=/home/spravce/.ssh/password.txt
v ansible.cfg zadáno :
remote_user = spravce
private_key_file = /home/spravce/.ssh/spravce_id_rsa.ppk
vault_password_file = /home/spravce/.ssh/password.txt

v hosts jsou jen ip adresy.
A ping mi ohlásí tohle:
Kód: [Vybrat]
10.10.10.172 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Load key \"/home/spravce/.ssh/spravce_id_rsa.ppk\": invalid format\r\nspravce@10.10.10.172: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password              ).",
    "unreachable": true
}
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: honzahommer 10. 08. 2021, 15:00:55
shrnutí současného stavu.
1. soubor s heslem vygenerován podle návodu https://www.digitalocean.com/community/tutorials/how-to-use-vault-to-protect-sensitive-ansible-data-on-ubuntu-16-04
heslo uloženo do souboru password.txt. Uloženo do složky /home/spravce/.ssh pod právy 0400
v .bashrc podle https://devops.stackexchange.com/questions/703/what-is-ansibles-config-equivalent-of-vault-password-file zadáno :
export ANSIBLE_VAULT_PASSWORD_FILE=/home/spravce/.ssh/password.txt
v ansible.cfg zadáno :
remote_user = spravce
private_key_file = /home/spravce/.ssh/spravce_id_rsa.ppk
vault_password_file = /home/spravce/.ssh/password.txt

v hosts jsou jen ip adresy.
A ping mi ohlásí tohle:
Kód: [Vybrat]
10.10.10.172 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Load key \"/home/spravce/.ssh/spravce_id_rsa.ppk\": invalid format\r\nspravce@10.10.10.172: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password              ).",
    "unreachable": true
}

A není problém v tomto?
Kód: [Vybrat]
Load key \"/home/spravce/.ssh/spravce_id_rsa.ppk\": invalid format
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 10. 08. 2021, 15:12:49
úplně by mi stačilo kdyby mi někdo poradil jak vygenerovat ten soubor password.txt tedy zakryptovat heslo které se používá k přístupu na podřízené (spravované) servery. neříkejte mi že nějaký admin co má pod sebou farmu serverů v bance používá heslo co je zadáno v otevřeném stavu v nějakém souboru na disku. A nebo že si pamatuje 24 znakové heslo které je tak komplikované, že sedá ani přečíst na jeden zátah. Nebo je snad ansible takový shit že s bezpečností vůbec nepočítá? Dyď heslo k privátnímu ssh klíči je určitě důležitější než číslo občanky a rodné číslo když máš na starosti třeba ty bankovní servery.
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 11. 08. 2021, 08:20:06
Zeptal jsem se na ofiko emailové diskuzi a prozatím odpovědi jsou takové, že ani tvůrci ansible nechápou pojem bezpečnost. Klidně nechají válet přihlašovací údaje k účtu s právy suda na tisícovce řízených serverech úplně nezabezpečené, jen tak napsané v cfg a nebo host, případně v yml. Vůbec jim nedoteklo, že s jedním tak silným účtem může kdokoliv dělat na serverech cokoliv. Cokoliv je škodit. Cokoliv je krást či měnit data. Cokoliv je ukrást citlivá data. není to tak? Pak mi poraďte jak je hlásit na podřízené servery pomocí ssh klíčů a heslo k tomu klíči předávat ansible v takové podobě aby on tomu rozuměl ale člověk aby to za 150 let nedokázal rozluštit. Jak na to?
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: IDontCare 11. 08. 2021, 10:26:34
úplně by mi stačilo kdyby mi někdo poradil jak vygenerovat ten soubor password.txt tedy zakryptovat heslo které se používá k přístupu na podřízené (spravované) servery..
a pritom si stacilo precist manual:

https://docs.ansible.com/ansible/latest/user_guide/vault.html#storing-passwords-in-third-party-tools-with-vault-password-client-scripts
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: czechsys 11. 08. 2021, 10:40:28
Zeptal jsem se na ofiko emailové diskuzi a prozatím odpovědi jsou takové, že ani tvůrci ansible nechápou pojem bezpečnost. Klidně nechají válet přihlašovací údaje k účtu s právy suda na tisícovce řízených serverech úplně nezabezpečené, jen tak napsané v cfg a nebo host, případně v yml. Vůbec jim nedoteklo, že s jedním tak silným účtem může kdokoliv dělat na serverech cokoliv. Cokoliv je škodit. Cokoliv je krást či měnit data. Cokoliv je ukrást citlivá data. není to tak? Pak mi poraďte jak je hlásit na podřízené servery pomocí ssh klíčů a heslo k tomu klíči předávat ansible v takové podobě aby on tomu rozuměl ale člověk aby to za 150 let nedokázal rozluštit. Jak na to?

On bude asi problem v tom, ze jste dodnes nepochopil, ze vicefaktorove prihlasovani se mezi servery casto nepouziva, protoze dalsi faktor neni jak zadat.
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Death Walker 11. 08. 2021, 13:24:15
Kód: [Vybrat]
spravce_id_rsa.ppk\": invalid format

Ppk je format kluca ktory pouziva putty, skonvertujte si ho do formatu ssh ktore pouziva ansible.

Ad to ze team ansible nechape bezpecnost. Ansible ako take nie je bezobsluzna automatika, predpoklada sa ze bude spustene na stanici spravcu. Ak chcete automatiku pri ktorej bude jeden server spravovat ostatne servre tak sa pozrite na ansible tower.
Název: Re:Ubuntu server - ansible - vault password
Přispěvatel: Jiří Šachl 11. 08. 2021, 13:53:45
už neřešit. vyřešeno...ansible sám o sobě neumí zašifrovat a utajit spojení s podřízenými servery a jeho vault je jen na hesla ke službám které obsluhuje - třeba sql server. pro utajené spojení se používá vault jako apka, server, služba která tohle řídí mezi serverem kde je ansible spouštěno a podřízenými (řízenými) servery..je to složitější na pochopení, sám to nechápu ale pouštím se do studia jak na to...ansible by tohle ale měl zahrnout do sebe...tohle by měl umět rovnou...