![](/img/trans.png)
[英]Switch to root ( using "sudo su -" ) before executing a command via Ansible
[英]Ansible - Do we need to configure sudo with root access on all hosts?
我有一個簡單的 ansible 測試手冊,可以在 locahost 和一個遠程主機上運行。
該劇本運行 linux 命令“pvs”,需要以 root 身份運行。
我在 ansible.cfg 中變成了=true。
在 localhost 上,用戶 test1 在 /etc/sudoers 中配置為“ugly” ALL=(ALL:ALL) NOPASSWD: ALL - 因為顯然沒有其他解決方案可以在不提供密碼的情況下以批處理模式以 root 身份啟動命令,正如 Vladimir 所證實的那樣:
在遠程節點上使用 sudoers 限制 Ansible 腳本模塊
(我可以做 Cmnd_Alias,但最后,ansible 需要 /bin/sh.. 所以沒有必要用其他命令來限制它)
而且,當我運行下面的劇本時,我還必須在遠程機器上配置相同的 sudoers 配置。
這是否意味着,在我們管理的所有機器上,我們需要讓這個“ansible”用戶通過 sudo 獲得 root 訪問權限? 我希望不會,否則這是一個非常大的安全問題。您有什么建議的解決方法或與我分享限制 root 訪問權限的想法嗎?
[privilege_escalation]
become = true # (this I need otherwise command "pvs" will not run)
become_method = sudo
become_user = root
become_ask_pass = false # (this also I need, do not want any manuel providing)
default_become = true
1 ---
2 - name: test remote machine connection
3 #hosts: localhost
4 hosts: all
5 gather_facts: no
6
7 tasks:
8 - name: get physical volumes
9 #shell: pvs # OK for localhost, but NOT for remote host, as sudo is not configured
10 #command: # Same as above for remote host : "Missing sudo password"
11 #cmd: pvs
12 raw: pvs # Same as above for remote host : "Missing sudo password"
13 register: output
14
15 - name: Show output
16 debug:
17 msg: "{{ output.stdout }}"
18
PLAY [test remote machine connection] *************************************************************************************
TASK [get physical volumes] *******************************************************************************************************
fatal: [sh2]: FAILED! => {"msg": "Missing sudo password"}
changed: [localhost]
TASK [Show output] ********************************************************************************************************
ok: [localhost] => {
"msg": " PV VG Fmt Attr PSize PFree \n /dev/xvdc prdvvg lvm2 a-- <10.00g <2.00g\n /dev/xvde prdvvg lvm2 a-- <10.00g <10.00g\n /dev/xvdf clone_prdtm1vg lvm2 a-- <10.00g <2.00g\n /dev/xvdg clone_prdtm1vg lvm2 a-- <10.00g <10.00g\n"
}
PLAY RECAP ****************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
sh2 : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
謝謝
如果你真的害怕擁有 nopasswd sudo 的用戶帳戶,那么有幾個選項:
specialuser ALL=(ALL) NOPASSWD: ALL
。 這里的弱保護是主機上的任何人都不能成為specialuser
沒有 root,只有 ansible controller 可以訪問該specialuser
的私鑰。 這一切都不是無懈可擊,但至少你的qemu
用戶不再可以通過簡單的 sudo 調用成為 root。因此,對於 sudo,可以使用 pam_ssh,對於 ansible,可以使用專用用戶。
不幸的是,我認為沒有執行命令的選項需要 root 權限而沒有 sudoers 文件。
正如在此處回答的那樣,您只能允許您要執行的一個特定命令。 這可能像以下行:
ansible ALL=(ALL:ALL) NOPASSWD: /bin/sh -c echo BECOME-SUCCESS*; * pvs
如果您還沒有的話,另一個提高安全性的選項是在每個主機上創建一個特定的 ansible-user 並僅通過 SSH 允許從一個特定主機獲得的私鑰/公鑰進行身份驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.