code

Ansible : sudo 권한이있는 사용자 생성

codestyles 2020. 12. 1. 08:03
반응형

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로 서버에 로그인 한 다음 "apt"와 같은 sudo-ish 작업을 수행하는 방법을 알아 내려고합니다. -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

이 플레이 북을 실행 한 후 "배포자"(예 : ssh deployer @ myserver)로 시스템에 ssh 할 수 있지만 sudo 명령을 실행하면 항상 내 sudo 암호를 묻습니다.

"배포자"사용자가 궁극적으로 visudo 사용자 파일로가는 길을 찾아야한다는 것을 이해합니다.하지만 어떤 마법의 Ansible 주문을 호출해야하는지 알 수 없어서 배포자로서 머신에 ssh 한 다음 sudo 명령 (예 : sudo)을 실행할 수 있습니다. apt-get install git ") sudo 암호를 입력하라는 메시지가 표시되지 않습니다.

높고 낮게 검색했는데 암호없이 사용자 "배포자"를 sudo 그룹에 넣는 Ansible 플레이 북 조각을 찾을 수없는 것 같습니다. 어떻게하나요?


때로는 무엇을 물어봐야할지 알고 있습니다. 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 명령을 실행할 수있었습니다.


sudo 권한이있는 사용자를 만드는 것은 사용자를에 넣거나 사용자를 /etc/sudoers에 지정된 그룹의 구성원으로 만드는 것입니다 /etc/sudoers. 그리고 그것은 암호 적은 추가로 지정할 수 있도록 NOPASSWD에서 /etc/sudoers.

/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

And instead of fiddling with /etc/sudoers file, we can create a new file in /etc/sudoers.d/ directory since this directory is included by /etc/sudoers by default, which avoids the possibility of breaking existing sudoers file, and also eliminates the dependency on the content inside of /etc/sudoers.

To achieve above in Ansible, refer to the following:

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

You may replace %wheel with other group names like %sudoers or other user names like deployer.


Using visudo, press Shift+G And append to end of file:

deployer  ALL=(ALL)       NOPASSWD: ALL

then write and quit (:wq)

참고URL : https://stackoverflow.com/questions/37333305/ansible-create-a-user-with-sudo-privileges

반응형