1. 패스워드 변경 주기 설정하기
1.1 사전 분석
- 패스워드 변경 주기를 설정할 대상 호스트는 인벤토리를 통해 설정한다.
- 패스워드 변경 주기를 설정할 사용자 계정 정보와 최대 변경일은 변수를 통해 별도의 파일로 정의한다.
- 패스워드 변경 주기 설정은
ansible.builtin.user
모듈을 이용한다.
1.2 플레이북 설계
- 사용자 계정과 최대 변경일을 변수로 설정하기 위해
vars_maxdays.yml
파일을 생성한다.
- 메인 플레이북
set_chage_password.yml
파일에는 변경 주기를 설정할 테스트가 포함된다.
1.3 플레이북 개발
https://github.com/naleeJang/Easy-Ansible/tree/main/chapter_11.1
2. 패스워드 생성 법칙 적용하기
2.1 사전 분석
- 패스워드 생성 법칙 적용을 위해서는
pwquality.conf
라는 pam 설정 파일을 이용해야 하며, 리눅스 서버에 libpam-pwquality 패키지가 있어야 한다.
- 패스워드 변경 주기는
/etc/securiy/pwquality.conf
파일로 설정한다.
/etc/securiy/pwquality.conf
파일을 설정하기 전에 원본 파일을 백업받는다.
pwquality.conf
파일은 사용자가 커스텀으로 설정하는 파라미터들로 구성되어 있으며, Jinja2 템플릿 방식으로 구현한다.
- 파라미터들은 별도의 변수 설정 파일에서 정의한 파라미터 값으로 사용하고, 파라미터 정의 여부를 체크하여
pwquality.conf
파일의 내용을 구성한다.
2.2 플레이북 설계
- 변수 vars_pw_rule.yml 에 정의
- minlen: 최소 패스워드 길이 설정
- dcredit: 최소 숫자 개수 설정
- ucredit: 최소 대문자 개수 설정
- lcredit: 최소 소문자 개수 설정
- ocredit: 최소 특수문자 개수 설정
- root 계정에서도 해당 패스워드 룰을 설정할 수 있는 enforce_for_root
- Jinja2 템플릿 파일 pwqulity.conf.j2 아래 내용 포함
- minlen, dcredit, ucredit, lcredit, orcedit, enforce_for_root
- minclass: 최소 문자클래스 개수
- maxrepeat: 최대 연속 동일 문자 수
- maxclassrepeat: 동일 글래스의 최대 연속 문자 수
2.3 플레이북 개발
https://github.com/naleeJang/Easy-Ansible/tree/main/chapter_11.2
3. 디렉터리 및 파일 접근 권한 변경
3.1 사전 분석
- Sticky bit 파일 검색 명령어:
find / -xdev -perm -04000 -o -perm -02000 -o -perm -01000
- World Writable 파일 검색 명령어:
find / -xdev -type f -perm -2
ansible.builtin.shell
모듈을 이용하여 Sticky bit 파일과 World Writable 파일을 찾는다.
- 찾은 파일 목록은
ansible.builtin.file
모듈을 이용하여 파일의 접속 권한을 설정한다.
- Sticky bit 파일은 u-s, g-s, o-s 로 설정하고, World Writable 파일은 o-w 로 설정한다.
3.2 플레이북 설계
3.3 플레이북 개발
https://github.com/naleeJang/Easy-Ansible/tree/main/chapter_11.3
4. 사설 인증서 생성하기
4.1 사전 분석
- 사설 인증서에는 자체 서명된 인증 기관용 인증서와 해당 인증서를 이용해 만든 클라이언트 인증 키가 있다.
- 인증서를 만들 때는 CSR (Certificate Signing Request) 이라는 인증 서명 요청을 한다.
- CSR을 통해 인증 기관용 인증서와 클라이언트 인증 키를 생성한다.
- 앤서블에서 개인 키를 만들때는
community.crypto.openssl_privatekey
모듈을 사용한다.
- CSR을 만들 때는
community.crypto.openssl_csr_pipe
모듈을 사용한다.
- CSR을 이용하여 인증서를 생성할 때는
community.crypto.x509_certificate
모듈을 사용한다.
4.2 플레이북 설계
- tnode1에 사설 인증서를 생성하기 위해 inventory에 rootCA 호스트 그룹을 만들고 그룹 멤버로 tnode1 노드를 추가한다.
- 인증서 생성에 필요한 값들은
vars_ssltls.yml
파일을 통해 외부 변수로 정의한다.
- 메인 플레이북인
make_certification.yml
에는 become을 false로 설정하여 root 계정이 아니 ubuntu 계정으로 실행되도록 한다.
- pre_tasks 키워드를 사용하여 role이 실행되기 전에 먼저 태스크가 실행되도록 하였으며, 인증서 생성을 위한 디렉터리를 생성하는 태스크를 추가한다.
- 인증서 생성은 rootCA 인증서와 serverKey로 나뉘며, 해당 인증서 생성은 각각 role을 생성하여 처리하도록 설계한다.
- rootCA role과 serverKey role은 각각
개인 키 생성 → CSR (인증 서명 요청) 생성 → CSR을 이용한 인증서 생성
태스크로 구성된다.
- serverKey role에서 CSR 인증서를 생성할 때는 이미 사전에 생성된 rootCA로부터 발급받아 생성하는 방식을 사용한다.
4.3 플레이북 개발
https://github.com/naleeJang/Easy-Ansible/tree/main/chapter_11.4