web-dev-qa-db-ja.com

Ansible:Sudo特権を持つユーザーを作成します

Ubuntu 14.04サーバーを引き継ぎました。 「deployer」(capistranoで使用)と呼ばれるユーザーがいるため、Sudo権限が必要です。このセットアップでは、サーバーにログインして次のようなことができます。

workstation> ssh deployer@myserver
myserver>  Sudo apt-get install git
myserver> exit
workstation>

Ansible(バージョン2.0.2.0およびpython 2.7.3)を使用して「deployer」というユーザーを作成し、そのIDでサーバーにログインしてからSudoにログインできるようにする方法を見つけようとしています。 -「apt-get install」のようなもの。私のプレイブックは次のようになります。

---
- hosts: example
  become: yes
  tasks:
  - name: Update apt cache
    apt:
      update_cache: yes
      cache_valid_time: 3600

  - group: name=Sudo state=present

  - name: Add deployer user and add it to Sudo
    user: name=deployer
          state=present
          createhome=yes
    become: yes
    become_method: "Sudo"

  - name: Set up authorized keys for the deployer user
    authorized_key: user=deployer key="{{item}}"
    with_file:
      - /home/jaygodse/.ssh/id_rsa.pub

このプレイブックを実行した後、「deployer」としてマシンにsshすることができます(例:ssh deployer @ myserver)が、Sudoコマンドを実行すると、常にSudoパスワードを要求されます。

「deployer」ユーザーは最終的にvisudo usersファイルに移動する必要があることを理解していますが、どの魔法のAnsible呪文を呼び出すべきかを把握できません。 apt-get install git ")Sudoパスワードの入力を求められることなく。

私は高低を検索しましたが、パスワードを必要とせずにユーザー「デプロイヤ」をSudoグループに入れるAnsibleプレイブックフラグメントを見つけることができないようです。これはどのように行われますか?

54
Jay Godse

時々、それは何を尋ねるべきかを知っています。私は開発者であり、DevOpsのいくつかの仕事に携わっているので、知りませんでした。

どうやら「パスワードなし」またはNOPASSWDログインは、/ etc/sudoersファイルに入れる必要があるものです。

私の質問に対する答えは Ansible:sudoersのリストを維持するためのベストプラクティス です。

Ansibleプレイブックのコードフラグメントは、私の問題から次のようになります。

- name: Make sure we have a 'wheel' group
  group:
    name: wheel
    state: present

- name: Allow 'wheel' group to have passwordless Sudo
  lineinfile:
    dest: /etc/sudoers
    state: present
    regexp: '^%wheel'
    line: '%wheel ALL=(ALL) NOPASSWD: ALL'
    validate: 'visudo -cf %s'

- name: Add sudoers users to wheel group
  user: name=deployer groups=wheel append=yes state=present createhome=yes


- name: Set up authorized keys for the deployer user
  authorized_key: user=deployer key="{{item}}"
  with_file:
    - /home/railsdev/.ssh/id_rsa.pub

そして、最良の部分は、ソリューションがべき等であることです。行を追加しません

%wheel ALL=(ALL) NOPASSWD: ALL

プレイブックが次に実行されるときに/ etc/sudoersに。そして、はい...パスワードを入力せずに「デプロイヤ」としてサーバーにsshし、Sudoコマンドを実行することができました。

97
Jay Godse

Sudo特権を持つユーザーを作成するには、ユーザーを/etc/sudoersに入れるか、ユーザーを/etc/sudoersで指定されたグループのメンバーにします。そして、パスワードなしにするには、/etc/sudoersNOPASSWDを追加で指定します。

/etc/sudoersの例:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

また、/etc/sudoersファイルをいじる代わりに、/etc/sudoers.d/ディレクトリに新しいファイルを作成できます。これは、このディレクトリがデフォルトで/etc/sudoersに含まれているためです。また、/etc/sudoers内のコンテンツへの依存関係を排除します。

Ansibleで上記を達成するには、以下を参照してください。

- name: Sudo without password for wheel group
  copy:
    content: '%wheel ALL=(ALL:ALL) NOPASSWD:ALL'
    dest: /etc/sudoers.d/wheel_nopasswd
    mode: 0440

%wheel%sudoersなどの他のグループ名またはdeployerなどの他のユーザー名に置き換えることができます。

1
pallxk