2015-11-04 3 views
7

Я бы хотел использовать Ansible для управления конфигурацией нашего кластера Hadoop (работает Red Hat).Ansible: have sudo, но не root

У меня есть доступ к sudo и можно вручную установить ssh в узлы для выполнения команд. Однако у меня возникают проблемы, когда я пытаюсь запустить модули Ansible для выполнения одних и тех же задач. Хотя у меня есть sudo доступ, я не могу стать root. Когда я пытаюсь выполнить анзибль сценарии, которые требуют повышенных привилегий, я получаю сообщение об ошибке, как это:

К сожалению, пользователь awoolford не может выполнить «/ бен/Баш -c эхо СТАТЬ-успеш- [...]/usr/bin/python /tmp/ansible-tmp-1446662360.01-231435525506280/copy 'как awoolford на [some_hadoop_node].

Просматривая 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 

Может анзибль работать в среде, как это? Если да, то что я делаю неправильно?

+0

Вы сказали, что можете вручную ssh на узел и выполнить команды, какой пользователь это? – frank

+0

Я могу 'sudo [some_command]' как пользователь 'awoolford', если он не находится в одном из списков'! '(См. Фрагмент из'/etc/sudoers'). –

+0

Можете ли вы поделиться примером игры/роли, которая вызывает ошибку? – ydaetskcoR

ответ

1

Ну, вы просто не можете выполнить /bin/sh или /bin/bash как ваши /etc/sudoers. Что вы могли бы сделать, это заменить оболочку default по-другому (переменная executable в ansible.conf).

Поскольку ваша политика sudo разрешает все по умолчанию (для меня это не кажется действительно безопасным), и я полагаю, что ansible ожидает sh-compatible shell, как действительно грязный хак, вы можете скопировать /bin/bash на другой путь/имя и установите переменную executable соответственно (не проверено).

+0

Спасибо @ LluísVilanova. Это аккуратное обходное решение. –

0

В файле Playbook (some.yml), установите

runthisplaybook.yml

--- 
- hosts: label_which_will_work_on_some_servers 
    sudo: yes 

    roles: 
    - some_role_i_want_to_run 

Далее в роли // Задачи/main.yml для действий, которые вы должны работать как Судо .. использовать что-то вроде become_user (где common_user переменная определена в дефолтов определенную роль в \ main.yml файл в common_user: «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 }}" 

PS: Во время работы анзибль-пьес,

анзибль-сборник пьес runthisplaybook.yml --sudo пользователь = this_user_can_sudo -i хостов.-u user_which_will_connect_from_source_machine YML --private ключ $ {DEPLOYER_KEY_FILE} --extra-вары "target_svr_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 решение просто создать в директории PlayBook в ansible.cfg со следующим содержимым, если он не принимает root пользователя:

[defaults] 
sudo_user  = UsernameToWhichYouWantToUse 

Надеюсь, это решит вашу проблему.

Смежные вопросы