2017-03-02 7 views
0

Oracleユーザーとしてデータベースでいくつかの事前チェックを実行するプレイブックがあります。リモートノードはAIXサーバーなので、スクリプトを使って実行されるシェルスクリプトを作成しました。 AIXサーバーでリモートノード上でsudoersを使用している可能性のあるスクリプトモジュールを制限する

--- 
- hosts: db 
    var_files: 
    - ansible_var.yml 

    tasks: 
    - name: "DB Checks" 
    become: True 
    become_user: oracle 
    script: "{ db_prechk }" 

、私は

ansible ALL=(oracle) NOPASSWD: /tmp/ansible-tmp-*/db_prechecks.sh 

ファイルしかし、脚本が、それは権限昇格のプロンプトを待っていますというエラーで失敗しsudoersファイルに以下のエントリを追加しました。

これは、rootとして実行された場合に正常に動作します。しかし、我々は、Ansibleコントローラとリモートノードの間にパスワードなしのルートを置くことは望ましくありません。そこで、コントローラとリモートノード上にユーザを作成し、SSH鍵を交換しました。 sudoersファイルのエントリは、我々はあまりにもansibleユーザIDを経由してoracleユーザーIDへのフルアクセスを提供したくないだけ

ansible ALL=(oracle) NOPASSWD: ALL 

ある場合

これも動作します。

プレイボードを冗長モードで実行し、Ansibleがremote_tmpディレクトリにスクリプトをコピーしており、oracleのユーザーIDとして実行していることがわかります。その場合、sudoers行は実行する必要がありますか?

+1

/tmpがnoexecでに搭載されているテストします。/etc/fstabを見てください。 – bodo

+0

@bodoそれはなぜ 'NOPASSWD:ALL'で動作するのか説明しません。 – techraf

答えて

1

あなたは冗長モードの出力を見れば、あなたは実際のコマンドを使用すると、sudoersファイルで指定されたものとは異なることがわかります。

< 127.0.0.1> SSH:SSH EXEC -o ForwardAgent = = yes -o StrictHostKeyChecking = no -o UserKnownHostsFile =/dev/null -o IdentitiesOnly = yes -o ControlMaster = auto -o ControlPersist = 60s -o StrictHostKeyChecking = no -o Port = 2202 -o 'IdentityFile = "/ Users/techraf/dev/testground/debian/.vagrant/machines/debian/virtualbox/private_key "-o KbdInteractiveAuthentication = no -o PreferredAuthentications = gssapi-with-mic、gssapi-keyex、hostbased、publickey -o PasswordAuthentication = no -oユーザー=不可能-o ConnectTimeout = 120 -o ControlPath = /使用/ bin/sh -c '"' '' sudo -H -S -n -u oracle/ssh-%h-%p-%r -tt 127.0.0.1 '/ bin/bin/sh -c '"'" '' "'"' "'"' "'echo BECOME-SUCCESS-xoamupogqwtteubvedoscaghzmfascsr;     /tmp/ansible-tmp-1488508771.72-271591203197790/db_prechecks.sh '"' "'" '"' "'" '"' "」 & &スリープ0' " '" ''

したがって、sudo -u oracleの後に実行されるものは、実際には/bin/sh -cで始まります。

私はに作業列をフィルタリングするための管理:

ansible ALL=(oracle) NOPASSWD: /bin/sh -c echo BECOME-SUCCESS*; * /tmp/ansible-tmp-*/db_prechecks.sh* 

しかし、それは試行錯誤に基づいています。私はなぜ*;/tmp/...との間に必要であるのかまだ分からないが、そうでなければ動作しない。

両方の場所で余分な空白文字が追加されました。その理由は、シェルコマンド(sudoersファイルで指定)にスペースを追加すると、sudoに影響します。

あなたは?の代わり*てみてください、私は後で時には

+0

'?'と '[a-z]'を使ってみましたが、動作しません。私は '*'に戻ってチェックを続けます – kottapar

関連する問題