34장. Ansible을 사용하여 IdM에서 HBAC 및 sudo 규칙 구성
IdM(Identity Management)에서 HBAC(Host-based Access Control)를 사용하여 다음을 기반으로 호스트 또는 서비스에 대한 액세스를 제한하는 정책을 정의할 수 있습니다.
- 로그인하려는 사용자 및 이 사용자의 그룹
- 사용자가 액세스하려고 하는 호스트 및 해당 호스트가 속하는 호스트 그룹
- 호스트에 액세스하는 데 사용되는 서비스
sudo
를 사용하여 사용자는 다른 권한이 있는 다른 사용자로 프로그램을 실행할 수 있습니다(예: root
권한). IdM에서는 sudo 규칙을 중앙에서 관리할 수 있습니다. 사용자 그룹, 호스트 그룹 및 명령 그룹과 개별 사용자, 호스트 및 명령을 기반으로 sudo
규칙을 정의할 수 있습니다.
IdM 사용자에 대해 다음 HBAC 및 sudo
규칙이 있는지 확인하려면 다음 절차를 완료합니다.
- Jane 은 호스트 client01.idm.example.com 에만 액세스할 수 있습니다.
- 존은 호스트 client02.idm.example.com 에만 액세스할 수 있습니다.
-
기본
admin
사용자와 일반 alice 사용자를 포함하는admins
그룹의 멤버는 IdM 호스트에 액세스할 수 있습니다. admins
그룹의 멤버는 IdM 호스트에서 다음 명령을 사용하여sudo
를 실행할 수 있습니다.-
/usr/sbin/reboot
-
/usr/bin/less
-
/usr/sbin/setenforce
-
다음 다이어그램은 위에서 설명한 원하는 구성을 나타냅니다.
그림 34.1. IdM HBAC 및 SUDO 규칙 다이어그램
사전 요구 사항
제어 노드에서 다음을 수행합니다.
- Ansible 버전 2.14 이상을 사용하고 있습니다.
-
ansible-freeipa
패키지가 설치되어 있습니다. - ~/MyPlaybook/ 디렉터리에 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했습니다.
-
ipaadmin_password
를 secret.yml Ansible 자격 증명에 저장했습니다.
- 사용자 jane,john 및 alice 는 IdM에 있습니다. 이러한 계정에 대해 암호가 구성됩니다.
절차
다음 콘텐츠를 사용하여 Ansible 플레이북 파일 add-hbac-and-sudo-rules-to-idm.yml 을 생성합니다.
--- - name: Playbook to manage IPA HBAC and SUDO rules hosts: ipaserver become: false gather_facts: false vars_files: - /home/<user_name>/MyPlaybooks/secret.yml module_defaults: ipahbacrule: ipaadmin_password: "{{ ipaadmin_password }}" ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" ipasudocmd: ipaadmin_password: "{{ ipaadmin_password }}" ipasudocmdgroup: ipaadmin_password: "{{ ipaadmin_password }}" ipasudorule: ipaadmin_password: "{{ ipaadmin_password }}" tasks: - name: HBAC Rule for Jane - can log in to client01 ipahbacrule: # Creates the rule name: Jane_rule hbacsvc: - sshd - login host: # Host name - client01.idm.example.com user: - jane - name: HBAC Rule for John - can log in to client02 ipahbacrule: # Creates the rule name: john_rule hbacsvc: - sshd - login host: # Host name - client02.idm.example.com user: - john - name: Add user member alice to group admins ipagroup: name: admins action: member user: - alice - name: HBAC Rule for IdM administrators ipahbacrule: # Rule to allow admins full access name: admin_access # Rule name servicecat: all # All services hostcat: all # All hosts group: # User group - admins - name: Add reboot command to SUDO ipasudocmd: name: /usr/sbin/reboot state: present - name: Add less command to SUDO ipasudocmd: name: /usr/bin/less state: present - name: Add setenforce command to SUDO ipasudocmd: name: /usr/sbin/setenforce state: present - name: Create a SUDO command group ipasudocmdgroup: name: cmd_grp_1 description: "Group of important commands" sudocmd: - /usr/sbin/setenforce - /usr/bin/less - /usr/sbin/reboot action: sudocmdgroup state: present - name: Create a SUDO rule with a SUDO command group ipasudorule: name: sudo_rule_1 allow_sudocmdgroup: - cmd_grp_1 group: admins state: present - name: Disable allow_all HBAC Rule ipahbacrule: # Rule to allow admins full access name: allow_all # Rule name state: disabled # Disables rule to allow everyone the ability to login
플레이북을 실행합니다.
$ ansible-playbook --vault-password-file=password_file -i inventory add-hbac-and-sudo-rules-to-idm.yml
검증
jane 사용자로 client01에 연결합니다.
~]$ ssh jane@client01 Password: Last login: Fri Aug 11 15:32:18 2023 from 192.168.122.1 [jane@client01 ~]$
jane이 client01에 로그인했는지 확인합니다.
jane 사용자로 client02에 연결을 시도합니다.
~]$ ssh jane@client02 Password: Connection closed by 192.168.122.47 port 22
jane이 client02에 로그인할 수 없는지 확인합니다.
alice 사용자로 client02에 연결합니다.
~]$ ssh alice@client02 Password: Last login: Fri Aug 10 16:13:43 2023 from 192.168.122.1
출력에서 alice가 client02에 로그인했는지 확인합니다.
슈퍼유저 권한을 호출하지 않고
less
를 사용하여/etc/sssd/sssd.conf
파일의 내용을 봅니다.[alice@client02 ~]$ less /etc/sssd/sssd.conf /etc/sssd/sssd.conf: Permission denied
root
인 파일의 소유자를 제외한 모든 사람이 파일을 읽을 수 없으므로 시도에 실패합니다.root
권한을 호출하여less
를 사용하여/etc/sssd/sssd.conf
파일의 내용을 봅니다.[alice@client02 ~]$ sudo less /etc/sssd/sssd.conf [sudo] password for alice: [domain/idm.example.com] id_provider = ipa ipa_server_mode = True [...]
출력은 alice가
/etc/sssd/sssd.conf
파일에서less
명령을 실행할 수 있는지 확인합니다.