我有一個作爲Oracle用戶在數據庫上執行一些預先檢查的手冊。遠程節點是AIX服務器,因此我創建了一個通過劇本運行的shell腳本。限制在遠程節點上使用sudoers的Ansible腳本模塊
---
- hosts: db
var_files:
- ansible_var.yml
tasks:
- name: "DB Checks"
become: True
become_user: oracle
script: "{ db_prechk }"
在AIX服務器上,我增加了以下條目sudoers文件
ansible ALL=(oracle) NOPASSWD: /tmp/ansible-tmp-*/db_prechecks.sh
但劇本失敗,出現錯誤,它的等待特權升級提示。
如果以root用戶身份運行,則運行良好。但是我們不希望Ansible控制器和遠程節點之間的無密碼根。所以我們在控制器和遠程節點上創建了一個合適的用戶並交換了SSH密鑰。
這也運行,如果在sudoers條目只是
ansible ALL=(oracle) NOPASSWD: ALL
我們不想這樣通過ansible
用戶ID完全訪問oracle
用戶ID了。
我在詳細模式下運行了playbook,可以看到Ansible正在將腳本複製到remote_tmp
目錄並正在執行它作爲oracle
用戶標識。在那種情況下,sudoers行應該允許它運行?
有時/ tmp目錄安裝有NOEXEC。看看/ etc/fstab – bodo
@bodo這並不能解釋爲什麼它使用'NOPASSWD:ALL'。 – techraf