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.13 이상을 사용하고 있습니다.
-
ansible-freeipa패키지가 설치되어 있습니다. - ~/MyPlaybooks/ 디렉터리에 IdM 서버의 FQDN(정규화된 도메인 이름)을 사용하여 Ansible 인벤토리 파일을 생성했습니다.
-
ipaadmin_password를 secret.yml Ansible vault에 저장했습니다.
- 사용자 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 loginPlaybook을 실행합니다.
$ 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 22jane이 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 deniedroot인 파일의 소유자를 제외한 모든 사람이 파일을 읽을 수 없으므로 시도에 실패합니다.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명령을 실행할 수 있는지 확인합니다.