2015-11-04 28 views
7

私はHadoopクラスタ(Red Hatを実行中)の設定を管理するためにAnsibleを使いたいと思います。ありがとうございます:sudoを持っていますがルートがありません

私はsudoのアクセス権を持ち、手動でコマンドを実行するノードにsshを入れることができます。しかし、同じタスクを実行するためにAnsibleモジュールを実行しようとすると問題が発生します。 私はsudoアクセス権を持っていますが、私はルートになることはできません。私は上昇権限が必要なAnsibleスクリプトを実行しようとすると、私はこのようなエラーが出ます:

申し訳ありませんが、ユーザーawoolfordが「を実行することが許可されていない/ binに/ bashの-cエコー BECOME-SUCCESS- [...]/usr/bin/python /tmp/ansible-tmp-1446662360.01-231435525506280/copy 'as awoolford on [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 

Can Anabilitiesはこのような環境で動作しますか?もしそうなら、私は間違って何をしていますか?

+0

あなたはノードに手動でsshを実行してコマンドを実行できますが、どのユーザーですか? – frank

+0

私は '!'リストの1つではないことを前提にして、ユーザ 'awoolford'として' su [some_command] 'をsudoすることができます('/etc/sudoers'のスニペット参照)。 –

+0

エラーをスローする再生/ロールの例を共有できますか? – ydaetskcoR

答えて

1

あなたの/etc/sudoersとして、/bin/shまたは/bin/bashを単に実行することはできません。あなたができることは、anuchのデフォルトのシェルを別のものに変更することです(変数executableansible.conf)。

あなたのsudoポリシーはデフォルトですべてを許可しているので(本当に私には安全ではないと思われます)、sh-互換シェルを期待しています。本当に汚いハックとして/bin/bashを別のパス/それに応じてexecutable変数を設定します(テストされません)。脚本(some.yml)ファイルでは、

+0

ありがとう@LluísVilanova。それはすっきりした回避策です。 –

0

は、あなたがする必要があるアクションの役割//タスク/ main.ymlで、次

runthisplaybook.yml

--- 
- hosts: label_which_will_work_on_some_servers 
    sudo: yes 

    roles: 
    - some_role_i_want_to_run 

を設定しましたcommon_userは、いくつかの役割のデフォルトで定義された変数\ common_userとしてmain.ymlファイルがどこにあるか( become_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:ansible-ハンドブック、

ansible-ハンドブックrunthisplaybook.yml --sudoユーザー= this_user_can_sudo -iホストの実行中。私は今sudo: yesが廃止予定されていると思いますYML -u user_which_will_connect_from_source_machine --privateキー$ {} DEPLOYER_KEY_FILE --extra-VARS "target_svr_type = $ {} SERVER_TYPE deploy_environment = $ {} DEPLOY_ENVIRONMENT ansible_user = $ {ANSIBLE_USER}"

-1

become: yes

--- 
- hosts: servers_on_which_you_want_to_run 
    become: yes 

    roles: 
    - some_role 

と交換smiplistソリューションは、それがroot、ユーザーが許可されていない場合だけで、以下の内容であなたの脚本ディレクトリにansible.cfgを作成することです:

[defaults] 
sudo_user  = UsernameToWhichYouWantToUse 

希望であれば、これで問題は解決します。

関連する問題