Commit 951f029e authored by JooHan Hong's avatar JooHan Hong

ansible, 2021-03-08, update2

parent 0dd430df
Pipeline #5111 passed with stages
in 2 seconds
......@@ -11,8 +11,8 @@
| 1 | OS Maintenance ITEMs | [OS](./OS/) | |
| 2 | INFRA Maintenance ITEMs | [GO](./INFRA/) | |
| 3 | WEB Server Maintenance ITEMs | [GO](./WEB/) | |
| 4 | Users Management ITEMs | [GO](./USER/) | |
| 5 | System H/W Review ITEMs | [GO](./HW/) | |
| 4 | Users Management(추가/제거) ITEMs | [GO](./USER/) | |
| 5 | Users Management(변경) ITEMs | [GO](./USER2/) | |
| 6 | Virtualization Maintenance ITEMs | [GO](./VM/) | |
| 7 | Secure Vulnerability ITEMs | [GO](./SECURE/) | |
| 8 | MISC ITEMs | [GO](./MISC/) | |
......
[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)
# Ansible을 이용한 사용자 패스워드 변경
> 매 분기마다 수행되어야 하는 시스템의 사용자 패스워드 변경을 자동화하고, 증적을 남긴다.
## 주요 기능
- **/etc/login.defs** 파일의 정책(**PASS_MAX_DAYS** 90)에 맞게 사용자의 패스워드가 만료되지 않거나 주기적으로 변경되도록 수행한다.
- 수행 후 증적을 위해 현재 로컬에 PASSWORD_MODIFY/*IP주소*/*분기*(eg, 2020-4Q)/*변경일짜(YYYY-MM-DD)*/*사용자아이디*/ 에 다음 파일을 기록한다.
- *아이디*_password.txt => 변경한 패스워드
- *아이디*_result.txt => Ansible 수행 결과(JSON)
## Inventory 설정
```bash
# cat hosts
[USERS]
172.16.0.100 managed_ip=172.16.0.100 des="test user add, 2020-12-03"
[USERS_OK]
```
대상 호스트는 172.16.0.100이며, 추가는 2020-12-03에 수행한다. 참고적으로 **USERS_OK** 호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
## Host Variables 설정
```bash
# cat host_vars/172.16.0.100
ansible_ssh_host: 172.16.0.100
ansible_ssh_port: SSH_포트번호
ansible_ssh_user: 사용자 아이디
ansible_ssh_pass: "사용자 패스워드"
ansible_become: yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass: "!root_패스워드"
ansible_python_interpreter: python2.7
```
## Playbook 설정
```python
---
- name: System User Password Modify Playbook
hosts: ALL_HOSTS
vars:
work_date: "2020-4Q"
user_name: "아이디"
user_password: "패스워드"
time: "{{lookup('pipe','date \"+%Y-%m-%d\"')}}"
tasks:
- name: Local Directory Create
local_action: command mkdir -p PASSWORD_MODIFY/{{ managed_ip }}/{{ work_date }}/{{ time }}/{{ user_name }}
- name: System User Exist Check
#shell: getent passwd "{{ user_name }}"
shell: id -u "{{ user_name }}"
register: user_exists
ignore_errors: True
- name: System User Password Modify
user:
name: "{{ user_name }}"
password: "{{ user_password | password_hash('sha512') }}"
shell: /bin/bash
update_password: always
when: user_exists.rc == 0
- debug: var=user_exists
- name: System User Password Modify Result
local_action: copy content={{ user_exists }} dest=PASSWORD_MODIFY/{{ managed_ip }}/{{ work_date }}/{{ time }}/{{ user_name }}/{{ user_name }}_result.txt
when: user_exists.rc == 0
- name: System User Password Modify Information Result
local_action: copy content={{ user_password }} dest=PASSWORD_MODIFY/{{ managed_ip }}/{{ work_date }}/{{ time }}/{{ user_name }}/{{ user_name }}_password.txt
when: user_exists.rc == 0
```
`사용자 추가`에 대한 Playbook 분석
* [ ] 변경하려는 시점의 분기(Quota)를 변수(**work_date**)로 입력한다.
* [ ] 변경하려는 사용자의 아이디(**user_name**)/패스워드(**user_password**) 정보를 변수로 입력한다.
* [ ] 존재하는 사용자만(**user_exists** 변수) 패스워드 변경을 수행하는데, 매번 수행 시마다(**update_password: always**) 패스워드를 변경한다.
* [ ] 수행이 완료되면, user_exists, user_password 변수에 대한 결과를 각각 txt 파일에 기록한다.
## playbook 실행
- `사용자 추가`
```bash
# ansible-playbook -i hosts password_modify.yml
```
- `사용자 제거`
```bash
# ansible-playbook -i hosts password_modify.yml
```
## 수행 결과
```bash
# cat PASSWORD_MODIFY/172.16.0.100/2020-4Q/2020-12-03/test/test_password.txt
!dlsvmfk2020@
# cat PASSWORD_MODIFY/172.16.0.100/2020-4Q/2020-12-03/test/test_result.txt
{"stderr_lines": [], "cmd": "id -u \"test\"", "end": "2020-12-03 12:41:39.680511", "failed": false, "stdout": "1007", "changed": true, "rc": 0, "start": "2020-12-03 12:41:39.678561", "stderr": "", "delta": "0:00:00.001950", "stdout_lines": ["1007"]}
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment