Programming

작업 또는 작업 세트별로 사용자를 전환하는 방법은 무엇입니까?

procodes 2020. 6. 15. 22:13
반응형

작업 또는 작업 세트별로 사용자를 전환하는 방법은 무엇입니까?


내 플레이 가능한 플레이 북에 반복되는 테마 sudo: yes는 특정 사용자를 위해 sudo 권한 ( ) 으로 명령을 실행해야한다는 것입니다. 이상적으로는 sudo를 사용하여 해당 사용자로 전환하고 명령을 정상적으로 실행하는 것이 좋습니다. 그런 다음 chowning 디렉토리와 같은 일반적인 사후 명령 정리를 수행하지 않아도됩니다. 다음은 제 플레이 북 중 하나의 스 니펫입니다.

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  sudo: yes
- name: change perms
  file: dest={{ dst }} state=directory mode=0755 owner=some_user
  sudo: yes

이상적으로는 해당 사용자에게 sudo가 필요하더라도 명령 또는 명령 세트를 다른 사용자로 실행할 수 있습니다.


Ansible 1.9 이상

Ansible 사용 become, become_userbecome_method지침은 권한 상승을 달성했다. 전체 플레이 또는 플레이 북에 적용하거나 포함 된 플레이 북에서 설정하거나 특정 작업에 대해 설정할 수 있습니다.

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  become: yes
  become_user: some_user

become_with권한 에스컬레이션 수행 방법을 지정하는 데 사용할 수 있습니다 ( 기본값은) sudo.

지시문은 명령이 사용되는 블록의 범위에 적용됩니다 ( 예제 ).

몇 가지 추가 예는 호스트 및 사용자참조 하고 자세한 문서는 상태 (권한 에스컬레이션) 를 참조하십시오.

작업 범위 becomebecome_user지시문 외에도 Ansible 1.9에는 명시 적 지시문이없는 경우 재생 기간 동안 이러한 값을 설정하는 몇 가지 새로운 변수 및 명령 행 옵션이 추가되었습니다.

Ansible 2.0.2.0부터는 아래에 설명 된 이전 sudo/ sudo_user구문이 여전히 작동하지만 사용 중단 알림에 "이 기능은 향후 릴리스에서 제거 될 것입니다."


이전 구문은 Ansible 1.9에서 더 이상 사용되지 않으며 제거 예정입니다.

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  sudo: yes
  sudo_user: some_user

Ansible 2.x에서는 다음 block작업 그룹에 사용할 수 있습니다 .

- block:
    - name: checkout repo
      git:
        repo: https://github.com/some/repo.git
        version: master
        dest: "{{ dst }}"
    - name: change perms
      file:
      dest: "{{ dst }}"
      state: directory
      mode: 0755
      owner: some_user
  become: yes
  become_user: some user

Ansible> 1.4에서는 실제로 작업 레벨에서 원격 사용자를 지정하여 해당 사용자로 로그인하고 sudo에 의존하지 않고 해당 명령을 실행할 수 있어야합니다. 해당 사용자로 로그인 할 수 없으면 sudo_user 솔루션도 작동합니다.

---
- hosts: webservers
  remote_user: root
  tasks:
    - name: test connection
      ping:
      remote_user: yourname

http://docs.ansible.com/playbooks_intro.html#hosts-and-users를 참조 하십시오.


A solution is to use the include statement with remote_user var (describe there : http://docs.ansible.com/playbooks_roles.html) but it has to be done at playbook instead of task level.


You can specify become_method to override the default method set in ansible.cfg (if any), and which can be set to one of sudo, su, pbrun, pfexec, doas, dzdo, ksu.

- name: I am confused
  command: 'whoami'
  become: true
  become_method: su
  become_user: some_user
  register: myidentity

- name: my secret identity
  debug:
    msg: '{{ myidentity.stdout }}'

Should display

TASK [my-task : my secret identity] ************************************************************
ok: [my_ansible_server] => {
    "msg": "some_user"
}

참고URL : https://stackoverflow.com/questions/21344777/how-to-switch-a-user-per-task-or-set-of-tasks

반응형