InfraPlatform

FreeiPA 서버 접근 HBAC (Host-Based Access Control) 정책 구성 (2)

IT오이시이 2026. 7. 24. 12:44
728x90

 

 

 

 

FreeIPA에서는 HBAC (Host-Based Access Control) 규칙을 이용해 *"누가 어느 서버에 접속할 수 있는지"를 제어하고, Sudo 규칙 (Sudo Rules)을 이용해 *"접속 후 어떤 명령어에 root 권한(sudo)을 행사할 수 있는지"를 중앙에서 관리합니다.

웹 UI와 CLI(터미널) 두 가지 방식을 모두 활용할 수 있으며, 여기서는 가장 직관적이고 표준적인 CLI 설정 방식을 기준으로 단계별 과정을 설명해 드리겠습니다.

 

 


🎯 시나리오 정의

  • 사용자 그룹: devops-team (속한 사용자: john)
  • 대상 서버 그룹: web-servers (속한 서버: client.example.com)
  • 접속 제어(HBAC): devops-team 그룹만 web-servers 그룹의 서버들에 SSH 접속 허용
  • Sudo 권한: devops-team 그룹은 web-servers에서 모든 명령어를 root 권한으로 실행 (ALL=(ALL) ALL)

1. 사전 준비: 사용자 그룹 및 호스트 그룹 생성

규칙을 개별 사용자/서버 단위로 적용하면 관리가 복잡해지므로, 반드시 그룹 단위로 묶어서 관리하는 것이 베스트 프랙티스입니다.

# 1. Kerberos 관리자 티켓 발급
kinit admin

# 2. 사용자 그룹 생성 및 사용자 추가
ipa usergroup-add devops-team --desc="DevOps Engineers"
ipa usergroup-add-member devops-team --users=john

# 3. 호스트 그룹(서버 그룹) 생성 및 서버 등록
ipa hostgroup-add web-servers --desc="Web Application Servers"
ipa hostgroup-add-member web-servers --hosts=client.example.com

2. HBAC (호스트 기반 접근 제어) 설정

FreeIPA 기본 설치 시 allow_all이라는 "모든 사용자의 모든 서버 접속 허용" 규칙이 활성화되어 있습니다. 차단/허용 정책을 명확히 적용하려면 allow_all을 비활성화하고 전용 규칙을 만들어야 합니다.

Step 1. 기본 allow_all 규칙 비활성화

ipa hbacrule-disable allow_all

Step 2. 특정 그룹 전용 HBAC 규칙 생성 및 적용

# 1. HBAC 규칙 생성
ipa hbacrule-add allow_devops_web

# 2. 규칙에 사용자 그룹 추가
ipa hbacrule-add-user allow_devops_web --groups=devops-team

# 3. 규칙에 대상 호스트 그룹 추가
ipa hbacrule-add-host allow_devops_web --hostgroups=web-servers

# 4. 허용할 서비스 지정 (예: sshd, gdm 등 또는 모든 서비스)
ipa hbacrule-add-service allow_devops_web --hbacservices=sshd

💡 HBAC 동작 검증 (CLI 지원):
실제 접속을 테스트하기 전, FreeIPA 명령어로 정책이 올바르게 적용되는지 가상 테스트해 볼 수 있습니다.

ipa hbac-test --user=john --host=client.example.com --service=sshd
# 결과: "Access granted" 가 나와야 함

3. Sudo 권한 규칙 (Sudo Rules) 설정

접속 권한(HBAC)을 얻은 사용자가 서버 내부에서 sudo 명령을 통해 특정 혹은 전체 관리자 권한을 가질 수 있도록 설정합니다.

Step 1. Sudo 규칙 생성 및 매핑

# 1. Sudo 규칙 생성
ipa sudorule-add devops_sudo_all --desc="Allow DevOps full sudo access on Web Servers"

# 2. 주체(사용자 그룹) 지정
ipa sudorule-add-user devops_sudo_all --groups=devops-team

# 3. 대상(호스트 그룹) 지정
ipa sudorule-add-host devops_sudo_all --hostgroups=web-servers

# 4. 실행할 명령 범위 지정 (여기서는 모든 명령 허용)
ipa sudorule-add-allow-command devops_sudo_all --cmdgroups="All"

# 5. 어떤 계정 자격으로 실행할지 지정 (Root로 실행)
ipa sudorule-add-runasuser devops_sudo_all --users=root

4. 클라이언트(Client) 측 적용 및 캐시 갱신

FreeIPA 서버에서 설정한 HBAC 및 Sudo 규칙은 클라이언트의 SSSD (System Security Services Daemon)를 통해 주기적으로 동기화됩니다. 즉각적인 적용을 위해 클라이언트 서버에서 아래 작업을 수행합니다.

클라이언트 서버(client.example.com)에서의 작업

# SSSD 캐시 삭제 및 서비스 재시작 (즉시 반영)
sudo sssdctl cache-expire -E
sudo systemctl restart sssd

5. 최종 결과 검증

1) HBAC 접근 제어 검증

  • devops-team에 속하지 않은 다른 일반 계정으로 SSH 접속 시도 ➡️ Permission denied (접속 차단)
  • john 계정으로 SSH 접속 시도 ➡️ 정상 접속 성공

2) Sudo 권한 검증

john 계정으로 client.example.com에 접속한 후 다음과 같이 검증합니다.

# 1. 자신에게 부여된 sudo 권한 목록 확인
sudo -l

# 출력 예시:
# User john may run the following commands on client:
#     (root) ALL

# 2. sudo 명령 실행 테스트
sudo systemctl restart nginx
sudo whoami
# 출력: root

🌐 Web UI 이용 시 참고

터미널 대신 웹 브라우저([https://ipa.example.com](https://ipa.example.com))에서 작업하려면 다음 메뉴를 이용하세요.

기능 Web UI 메뉴 경로
HBAC (접속 제어) Policy ➡️ Host-Based Access Control ➡️ HBAC Rules
Sudo 규칙 Policy ➡️ Sudo ➡️ Sudo Rules
호스트 그룹 Identity ➡️ Hosts ➡️ Host Groups

 

#  ipa help topics #

automember         Auto Membership Rule.
automount          Automount
ca                 Manage Certificate Authorities
caacl              Manage CA ACL rules.
cert               IPA certificate operations
certmap            Certificate Identity Mapping
certprofile        Manage Certificate Profiles
config             Server configuration
delegation         Group to Group Delegation
dns                Domain Name System (DNS)
domainlevel        Raise the IPA Domain Level.
group              Groups of users
hbac               Host-based access control commands
hbactest           Simulate use of Host-based access controls
host               Hosts/Machines
hostgroup          Groups of hosts.
idp                External Identity Provider References
idrange            ID ranges
idviews            ID Views
krbtpolicy         Kerberos ticket policy
location           IPA locations
migration          Migration to IPA
misc               Misc plug-ins
netgroup           Netgroups
otp                One time password commands
passkeyconfig      Passkey configuration
passwd             Set a user's password
permission         Permissions
ping               Ping the remote IPA server to ensure it is running.
pkinit             Kerberos PKINIT feature status reporting tools.
privilege          Privileges
pwpolicy           Password policy
radiusproxy        RADIUS Proxy Servers
realmdomains       Realm domains
role               Roles
schema             API Schema
selfservice        Self-service Permissions
selinuxusermap     SELinux User Mapping
server             IPA servers
serverrole         IPA server roles
service            Services
servicedelegation  Service Constrained Delegation
stageuser          Stageusers
subid              Subordinate ids
sudo               commands for controlling sudo configuration
sysaccounts        System accounts
topology           Topology
trust              Cross-realm trusts
user               Users
vault              Vaults
728x90
반응형