본문 바로가기
DevOps/Ansible

Ansible) 관리 노드에 SSH root 접근이 제한되어 있을 경우

by LILO 2022. 3. 27.
반응형

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