2015-11-04 19 views
7

मैं अपने हैडोप क्लस्टर (Red Hat चल रहा है) की कॉन्फ़िगरेशन को प्रबंधित करने के लिए Ansible का उपयोग करना चाहता हूं।उत्तर: सुडो है लेकिन कोई रूट

मेरे पास सुडो पहुंच है और मैन्युअल रूप से आदेशों को निष्पादित करने के लिए नोड्स में ssh कर सकते हैं। हालांकि, जब मैं एक ही कार्य करने के लिए उत्तरदायी मॉड्यूल चलाने की कोशिश करता हूं तो मुझे समस्याएं आ रही हैं। हालांकि मेरे पास sudo पहुंच है, लेकिन मैं रूट नहीं बन सकता। जब मैं Ansible स्क्रिप्ट को ऊपर उठाया विशेषाधिकारों की आवश्यकता पर अमल करने की कोशिश, मैं इस तरह एक त्रुटि प्राप्त:

क्षमा करें, उपयोगकर्ता awoolford निष्पादित करने के लिए 'स्वीकृत नहीं है/bin/bash -c गूंज बन-सफलता [...]/usr/bin/python /tmp/ansible-tmp-1446662360.01-231435525506280/copy ' [some_hadoop_node] पर awoolford के रूप में।

documentation के माध्यम से देख रहे हैं, मैंने सोचा था कि become_allow_same_user संपत्ति से इसका समाधान हो सकता है, और इसलिए मैं ansible.cfg के लिए निम्न कहा:

[privilege_escalation] 
become_allow_same_user=yes 

दुर्भाग्य से, यह काम नहीं किया।

यह post बताता है कि मुझे sudo /bin/sh (या कुछ अन्य खोल) की अनुमति की आवश्यकता है। दुर्भाग्यवश, सुरक्षा कारणों से यह संभव नहीं है। यहाँ /etc/sudoers से एक टुकड़ा है:

root   ALL=(ALL) ALL 
awoolford  ALL=(ALL) ALL, !SU, !SHELLS, !RESTRICT 

इस तरह माहौल में काम Ansible कर सकते हैं? यदि हां, तो मैं क्या गलत कर रहा हूँ?

+0

आपने कहा कि आप मैन्युअल रूप से नोड को ssh कर सकते हैं और कमांड निष्पादित कर सकते हैं, जो उपयोगकर्ता है? – frank

+0

मैं 'some_command] 'उपयोगकर्ता' awoolford' के रूप में 'sudo [some_command] कर सकता हूं यह प्रदान करता है कि यह'!' सूचियों में से एक में नहीं है ('/ etc/sudoers' से स्निपेट देखें)। –

+0

क्या आप एक उदाहरण प्ले/भूमिका साझा कर सकते हैं जो त्रुटि को फेंकता है? – ydaetskcoR

उत्तर

1

ठीक है, आप /bin/sh या /bin/bash को अपने /etc/sudoers शो के रूप में निष्पादित नहीं कर सकते हैं। आप क्या कर सकते हैं उत्तरदायी के डिफ़ॉल्ट खोल को किसी और चीज में बदलें (ansible.conf में)।

अपने sudo नीति के बाद से एक बहुत गंदा हैक आप कुछ अन्य पथ/नाम के /bin/bash नकल कर सकता है के रूप में अनुमति देता है डिफ़ॉल्ट रूप से सब कुछ (वास्तव में मेरे लिए सुरक्षित की तरह प्रतीत नहीं होता है), और मैं ansible लगता है एक श-संगत खोल उम्मीद है, और executable तदनुसार परिवर्तनीय सेट करें (परीक्षण नहीं किया गया)।

+0

धन्यवाद @ LluísVilanova। यह एक साफ कामकाज है। –

0

प्लेबुक (some.yml) फ़ाइल में सेट

runthisplaybook.yml

--- 
- hosts: label_which_will_work_on_some_servers 
    sudo: yes 

    roles: 
    - some_role_i_want_to_run 

इसके बाद, कार्रवाई के लिए भूमिका // कार्य/main.yml आप करने के लिए है, जिसमें sudo के रूप में चलाने .. (की तरह कुछ का उपयोग become_user जहां common_user एक चर कुछ भूमिका की चूक में परिभाषित \ common_user रूप main.yml फ़ाइल है: "this_user_can_sudo":

- name: Run chkconfig on init script 
    command: "sudo -u root /sbin/chkconfig --add tomcat" 

# Set execute permission on run_jmeter_test.sh 
- name: Set execute permission on run_jmeter_test.sh 
    command: "chmod -R 755 {{ jmeter_perf_tests_results }}" 
    become_user: "{{ common_user }}" 

# OR Set execute permission on run_jmeter_test.sh 
- name: Set execute permission on run_jmeter_test.sh 
    command: "sudo -u firstuser sudo -u seconduser chmod -R 755 {{ jmeter_perf_tests_results }}" 
    become_user: "{{ common_user }}" 

# OR Set execute permission on run_jmeter_test.sh 
- name: Set execute permission on run_jmeter_test.sh 
    command: "chmod -R 755 {{ jmeter_perf_tests_results }}" 
    become_user: "{{ common_user }}" 

पुनश्च: ansible-प्लेबुक चल रहा है,

ansible-प्लेबुक runthisplaybook.yml --sudo-उपयोगकर्ता = this_user_can_sudo मैं होस्ट करता है।YML -u user_which_will_connect_from_source_machine --private कुंजी $ {DEPLOYER_KEY_FILE} --extra-वार्स "target_svr_type = $ {SERVER_TYPE} deploy_environment = $ {DEPLOY_ENVIRONMENT} ansible_user = $ {ANSIBLE_USER}"

-1

मैं अब लगता है sudo: yes depricated जाता है और become: yes

--- 
- hosts: servers_on_which_you_want_to_run 
    become: yes 

    roles: 
    - some_role 

के साथ बदलें smiplist समाधान सिर्फ निम्नलिखित सामग्री के साथ अपने प्लेबुक निर्देशिका में ansible.cfg बनाने की है, यह root उपयोगकर्ता को स्वीकार नहीं करता है, तो:

[defaults] 
sudo_user  = UsernameToWhichYouWantToUse 

आशा है, यह आपकी समस्या का समाधान करेगा।

संबंधित मुद्दे