반응형
INTRO
운영하는 서버들을 보면 SSH를 이용해서 바로 root 계정으로 접근이 제한되어 있는 환경이 많습니다.
(/etc/ssh/sshd_config : PermitRootLogin no)
이러한 경우에 Ansible에서는 권한 에스컬레이션을 이용한 작업이 필요합니다. (--become)
권한 에스컬레이션 적용 (ad-hoc)
권한 에스컬레이션 작업을 하기 전에 관리노드에서 sudo 권한 이용시 암호 입력없이 이용할 수 있는 환경을 제공해야됩니다.
[root@WEB ~]# visudo
admin ALL=(ALL) NOPASSWD: ALL
[root@LOG ~]# visudo
admin ALL=(ALL) NOPASSWD: ALL
먼저 ad-hoc 명령으로 유저를 생성하는 예제를 사용해서 sudo가 정상적으로 이뤄지는지 확인합니다.
여기서 권한 에스컬레이션을 이용해서 root 권한을 이용합니다. (--become)
멱등성이 적용되기 때문에 2번 이상 실행시 결과가 같으면 SUCCESS 처리가 됩니다.
[ansible@control ~]$ ansible WEB -m user -a "name=test remove=yes state=absent" -u admin -b
192.168.56.101 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"force": false,
"name": "test",
"remove": true,
"state": "absent"
}
그런데 become을 사용하지 않으면 어떻게 될까요?
☞ sudo를 사용해서 root 권한을 사용하지 못하기 때문에 권한이 없어서 거부되었다는 문제가 발생합니다.
[ansible@control ~]$ ansible WEB -m user -a "name=test remove=yes state=absent" -u admin
192.168.56.101 | FAILED! => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"msg": "userdel: Permission denied.\nuserdel: cannot lock /etc/passwd; try again later.\n",
"name": "test",
"rc": 1
}
권한 에스컬레이션 적용 (ansible.cfg)
매번 become 옵션을 사용하기에 번거롭기 때문에 설정 파일에 적용하는 방법을 사용할 수 있습니다.
[root@control ~]$ vi /etc/ansible/ansible.cfg
[privilege_escalation]
become = true
become 옵션을 ad-hoc에 추가하지 않고 입력합니다.
[ansible@control ~]$ ansible WEB -m user -a "name=test remove=yes state=absent" -u admin
192.168.56.101 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"name": "test",
"state": "absent"
}
반응형
'DevOps > Ansible' 카테고리의 다른 글
Ansible) 인벤토리 구성 및 통신 확인 (0) | 2022.03.26 |
---|---|
Ansible) Ansible 설치하기 (0) | 2022.03.26 |
Ansible) Ansible 개념 (0) | 2022.03.26 |
Ansible) Ansible이란? (0) | 2022.03.25 |