[Ansible] sudo 대신 become 사용하기

by 스뎅(thDeng) on

(정확한 버전이 잘 기억나지 않지만) Ansible 2.4 버전 부터인가 sudo 대신 become을 사용하라고 아래와 같은 워닝이 나온다.

[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default).
This feature will be removed in version 2.9.
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

sudo는 2.9 버전 부터 없어진다고 강력하게 나오니, 메시지에 나온 것 처럼 become을 사용하자.

# wow 설치 playbook
- name: Install wow
  hosts: api_servers
  become: no
  become_user: nobody
  roles:
  - wow_0_1_27
  - other_tasks

become은 특정 사용자로 전환(become)할지 여부이고, true/false/yes/no로 설정한다. 그리고 어떤 사용자로 전환될지는 become_user로 설정하면 된다. 위와 같이 wow를 설치할 때 필요하면 nobody로 전환하도록 become_user를 설정해 두고, 아래 처럼 필요한 task에서만 become으로 설정을 on/off 할 수 있다. become_user 역시 become과 마찬가지로 세부 task에서만 설정할 수도 있다.

# wow 설치 role
- name: Create wow directory
  file:
    path: /path_to_wow
    state: directory
- name: Unarchive files
  unarchive:
    src: "/where_wow_archive/wow-.tar.gz"
    dest: /path_to_wow
    copy: no
  become: yes

특정 사용자가 되는 명령은 몇 가지가 있기 때문에, become_method로 그 방법을 선택할 수 있다. become_methodsudo | su | pbrun | pfexec | doas | dzdo | ksu 중 하나로 선택할 수 있고 sudo가 default이다. 그 명령을 실행할 때 함께 줄 옵션을 become_flags로 설정할 수 있다.

su명령으로 사용자를 변경해서 command를 실행하는 샘플이다.

- name: Run a command as nobody
  command: somecommand
  become: yes
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License