
📌 FreeIPA 구축 가이드
- 1. FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축 - (통합DNS 포함)
- 2. FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축 - (DNS없이 설치)
- 3. 서버 접근 HBAC (Host-Based Access Control) 정책 구성
- 4. FreeIPA와 Windows Active Directory(AD) 간의 Cross-Forest Trust 설정
- 5. FreeIPA- 정책 관리 - user_add - 숫자로된 계정 생성 방법
- 6. FreeIPA 정책 관리- 사용자 등록과 권한 정책 등록 - sudo command
[RHEL/Rocky Linux] FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축하기
여러 대의 리눅스 서버를 운영하다 보면 매번 사용자 계정을 개별 서버마다 생성하고, SSH 키나 비밀번호를 각각 관리하는 일은 큰 번거로움입니다.
이번 글에서는 Red Hat 계열(RHEL, Rocky Linux, AlmaLinux)에서 가장 흔히 쓰이는 오픈소스 중앙 관리 솔루션인 FreeIPA를 이용해, 서버 구축부터 클라이언트 연동 및 테스트까지의 전 과정을 상세히 정리해 보겠습니다.
💡 FreeIPA란 무엇인가요?
FreeIPA는 Linux/Unix 환경을 위한 대표적인 Identity Management(IdM) 솔루션입니다.
단순히 계정만 저장하는 것이 아니라, 중앙집중식 인증에 필요한 핵심 기술들을 하나로 묶어 제공합니다.
- 389 Directory Server (LDAP): 계정, 그룹, 정책 정보 저장소
- MIT Kerberos (KDC): 단일 로그인(SSO) 및 보안 인증 담당
- BIND (DNS): Kerberos 및 LDAP 서비스 자동 탐색을 위한 SRV 레코드 관리
- Dogtag PKI: 서버/클라이언트 간 SSL/TLS 인증서 발급 및 TLS 암호화 지원

1. 구축 환경 및 사전 준비
안정적인 구축을 위해 고정 IP와 정확한 FQDN(Fully Qualified Domain Name) 설정이 필수적입니다.
📌 실습 환경 구성
| 구분 | FQDN | IP 주소 | OS |
|---|---|---|---|
| FreeIPA Server | ipa.example.com |
192.168.1.10 |
Rocky Linux 9 / RHEL 9 |
| Linux Client | client.example.com |
192.168.1.20 |
Rocky Linux 9 / RHEL 9 |
⚠️ 중요 (NTP 시간 동기화)
Kerberos 인증은 서버와 클라이언트 간의 시계가 5분 이상 오차가 생기면 동작하지 않습니다. 설치 전 양쪽 모두chronyd서비스가 실행 중인지 확인하세요.
2. FreeIPA Server 설치 및 설정
Step 1. 서버 네트워크 및 Hostname 설정
서버의 FQDN을 지정하고 /etc/hosts 파일에 자기 자신을 등록합니다.
# 1. 호스트네임 설정
sudo hostnamectl set-hostname ipa.example.com
# 2. /etc/hosts 설정
sudo vi /etc/hosts
/etc/hosts 파일에 아래 내용을 추가합니다:
192.168.1.10 ipa.example.com ipa
Step 2. 방화벽 포트 개방
FreeIPA 서비스에 필요한 포트(HTTP, HTTPS, DNS, NTP, LDAP/S, Kerberos)를 모두 열어줍니다.
sudo firewall-cmd --add-service={http,https,dns,ntp,freeipa-ldap,freeipa-ldaps,kerberos,kpasswd} --permanent
# 1. FreeIPA 표준 서비스 및 DNS, NTP 방화벽 허용
sudo firewall-cmd --add-service={freeipa-4,dns,ntp} --permanent
# 2. PKI Tomcat 전용 포트(8080, 8443, 8009) 수동 명시 개방
sudo firewall-cmd --add-port={8080/tcp,8443/tcp,8009/tcp} --permanent
# 3. 변경 사항 즉시 적용
sudo firewall-cmd --reload
# 4 . 변경 사항 확인
sudo firewall-cmd --list-all
2.1 Tomcat 설치히 오류가 발생하는 문제 - 메모리와 난수 문제 해결 필요
Tomcat이 8443 포트를 여는 데 90초 넘게 걸리는 대표적인 원인은 인증서 키 생성 시 난수(entropy) 부족으로 자바 프로세스가 대기 상태(Lock)에 빠지기 때문입니다.
① RNG(Random Number Generator) 데몬 가동
난수 생성을 고속화하는 rngd 서비스가 활성화되어 있는지 확인하고 시작합니다.
sudo dnf install -y rng-tools
sudo systemctl start rngd
sudo systemctl enable rngd
② pkispawn 90초 대기 시간 강제 수정 (필수)
Dogtag PKI 배포기가 참조하는 템플릿 파일에서 대기 시간을 300초(5분)로 확실하게 늘려야 합니다.
# default.m4 파일 생성
sudo vi /usr/share/pki/server/etc/default.m4
pki_wait_time=300
# 변경: pki_wait_time=300
sudo sed -i 's/pki_wait_time=90/pki_wait_time=300/g' /usr/share/pki/server/etc/default.m4
③ 설치 동안 SELinux를 Permissive(허용) 모드로 임시 전환 (추천)
설치 중 SELinux 차단 변수를 완전히 배제하기 위해 설치하는 동안만 차단을 해제(Permissive)하고, 설치 완료 후 다시 Enforcing으로 돌리는 것이 가장 안전합니다.
# 1. 임시로 Permissive 모드 전환 (재부팅 없이 즉시 적용)
sudo setenforce 0
# 2. 상태 확인 (Current mode: permissive 로 표시되는지 확인)
sestatus
① SELinux 거부(AVC Denial) 이력 확인
설치 실패 시점에 SELinux가 PKI/Tomcat 관련 동작을 차단했는지 확인합니다.
sudo ausearch -m AVC,USER_AVC -ts recent
Step 3. 패키지 설치 및 대화형 대화상자 실행
RHEL 계열 모듈을 활성화한 후 IPA 대화형 설치 프로그램을 실행합니다.
[잔존 파일 완전 제거]
- 설치가 실패하면 처음부터 모든 환경을 초기화하고 다시 진행하여야 합니다.
키발급 과정의 데이터들이 남아 있어서 계속 실패 할 수 있습니다.
sudo lsof -i :8080 -i :8443 : 확인 (이전 실패 환경 여부 확인)
sudo systemctl stop pki-tomcatd@pki-tomcat.service
# 1. IPA 완벽 언인스톨
sudo ipa-server-install --uninstall -U
# 2. 실행 중인 pki 프로세스 kill 및 ACME / PKI 잔재 완전 제거
sudo pkill -9 -f pki-tomcat
sudo rm -rf /var/lib/pki/pki-tomcat
sudo rm -rf /etc/pki/pki-tomcat
sudo rm -rf /var/log/pki/pki-tomcat
[ACME 강제 삭제]
# [수동 삭제]
# * Tomcat의 acme 컨텍스트 설정 잔재 제거 (존재할 경우)
sudo rm -f /etc/pki/pki-tomcat/Catalina/localhost/acme.xml
# 1. ACME 서브시스템 강제 제거
sudo pkidestroy -i pki-tomcat -s ACME --force --remove-conf --remove-logs
# 2. CA 서브시스템도 혹시 남아있다면 강제 제거
sudo pkidestroy -i pki-tomcat -s CA --force --remove-conf --remove-logs
# 3. Tomcat 인스턴스 자체를 전체 강제 파괴
sudo pkidestroy -i pki-tomcat --force --remove-conf --remove-logs
ipa 설치를 다시 합니다.
# 1. IdM 모듈 활성화 및 서버 패키지 설치
sudo dnf module enable idm:DL1
sudo dnf install -y ipa-server ipa-server-dns
# Step 1: 이전 설치 잔재 완벽 초기화 (필수)
# 아래 명령으로 깨끗하게 언인스톨을 완료합니다.
sudo lsof -i :8080 -i :8443 # 확인 (이전 실패 환경 여부 확인)
sudo systemctl stop pki-tomcatd@pki-tomcat.service
sudo ipa-server-install --uninstall -U
#Step 2: Systemd 변경사항 재로드
# 이전에 설정한 override.conf (타임아웃 연장 설정)가 적용되도록 데몬을 재로드합니다.
sudo systemctl daemon-reload
#Step 3: FreeIPA 재설치 실행 (통합 DNS 옵션 포함)
# 타임아웃이 5분 이상으로 연장된 상태에서 재설치를 진행합니다.
sudo ipa-server-install --setup-dns
# 입력 매개변수 확인:
# Hostname: FQDN 형식 (ipa.example.com)
# Domain: example.com
# Realm: EXAMPLE.COM (대문자)
# Directory Manager 및 admin 비밀번호 입력
설치 과정 중 주요 프롬프트 입력 사항:
- Do you want to configure integrated DNS (BIND)?:
Yes - Server hostname:
ipa.example.com(엔터) - Domain name:
example.com(엔터) - Realm name:
EXAMPLE.COM(대문자 자동 지정, 엔터) - Directory Manager Password: LDAP 관리자 비밀번호 입력
- IPA admin Password: FreeIPA 웹/CLI 관리자 비밀번호 입력
- Forwarders: 상위 DNS 서버 IP (예:
8.8.8.8) 입력
Forwarder 오류 해결
Do you want to configure these servers as DNS forwarders? [yes]:
All detected DNS servers were added. You can enter additional addresses now: Enter an IP address for a DNS forwarder, or press
Enter to skip: DNS forwarders: 8.8.8.8, 168.126.63.1, fd17:625c:f037:2::3, 192.168.56.1
Checking DNS forwarders, please wait ... DNS server fd17:625c:f037:2::3: query '. SOA': The resolution lifetime expired after 10.127 se conds: Server Do53:fd17:625c:f037:2::3@53 answered The DNS operation timed out. DNS server fd17:625c:f037:2::3: query '. SOA': The resolution lifetime expired after 10.127 se conds: Server Do53:fd17:625c:f037:2::3@53 answered The DNS operation timed out. The ipa-server-install command failed. See /var/log/ipaserver-install.log for more information
[root@ipa ~]# ipactl status
IPA is not configured (see man pages of ipa-server-install for help)
1. DNS forward 설정 - 포워더 지정 옵션을 사용하지 않고 설치 (--no-forwarders)
설치가 오류나는 경우 가장 간단하고 확실한 방법입니다. 설치 시 외부 DNS 검증 단계를 건너뛰고 기본 포워더 지정을 생략합니다.
[ 잔존 파일 완전 제거]
# 1. IPA 완벽 언인스톨
sudo ipa-server-install --uninstall -U
# 2. 실행 중인 pki 프로세스 kill 및 ACME / PKI 잔재 완전 제거
sudo pkill -9 -f pki-tomcat
sudo rm -rf /var/lib/pki/pki-tomcat
sudo rm -rf /etc/pki/pki-tomcat
sudo rm -rf /var/log/pki/pki-tomcat
# 3. Tomcat의 acme 컨텍스트 설정 잔재 제거 (존재할 경우)
sudo rm -f /etc/pki/pki-tomcat/Catalina/localhost/acme.xml
DNS -Forward를 설치하지 않고 진행하는 경우
- 앞의 두 과정이 계속 실패하는 경우 우선 DNS 를 빼고 하면 설치될 가능성이 높습니다.
# * 앞의 과정 동일하게 진행 (아래는 간단히 설명하기 위해 작성됨)
# 1. 잔재 초기화
sudo ipa-server-install --uninstall -U
sudo systemctl daemon-reload
# 2. 포워더 없이 설치 재시도
sudo ipa-server-install --setup-dns --no-forwarders
2. DNS forward 설정 - 신뢰할 수 있는 IPv4 포워더만 직접 지정 (--forwarder)
구글 DNS(8.8.8.8)나 KT DNS(168.126.63.1)처럼 동작이 보장된 IPv4 주소만 직접 지정하여 전달하는 방법입니다.
# 1. 잔재 초기화
sudo ipa-server-install --uninstall -U
# 2. 검증된 포워더만 명시하여 재설치
sudo ipa-server-install --setup-dns --forwarder=8.8.8.8 --forwarder=168.126.63.1
# 마지막 Yes
BIND DNS server will be configured to serve IPA domain with:
Forwarders: 8.8.8.8, 168.126.63.1
Forward policy: only
Reverse zone(s): 56.168.192.in-addr.arpa.
Continue to configure the system with these values? [no]: yes <<-중요
3. DNS forward 설정 - 대화형 모드에서 주소 직접 지정
만약 옵션 없이 대화형 설치로 진행하려면 질문이 나올 때 다음과 같이 선택합니다.
Do you want to configure DNS forwarders? [yes]: yes
Following DNS servers are configured in /etc/resolv.conf: ...
Do you want to configure these servers as DNS forwarders? [yes]: no <-- 'no' 입력!
All detected DNS servers were added. You can enter additional addresses now:
Enter an IP address for a DNS forwarder, or press Enter to skip: 8.8.8.8
Enter an IP address for a DNS forwarder, or press Enter to skip: 168.126.63.1
Enter an IP address for a DNS forwarder, or press Enter to skip: [Enter 키로 건너뛰기]
ㅁ 설치 완료 확인
설치가 완료되면 [https://ipa.example.com](https://ipa.example.com) 웹 UI로 접속하여 브라우저에서 관리가 가능해집니다.
# Step 4: 설치 완료 후 상태 검증
# 설치가 성공적으로 끝나면 아래 명령어로 서비스 상태 및 Kerberos 티켓 발급이 정상 동작하는지 검증합니다.
# 1. FreeIPA 모든 서비스가 RUNNING 상태인지 확인
sudo ipactl status
# 2. admin 계정으로 Kerberos 티켓 발급 테스트
kinit admin
klist
# 3. 인증서 추적 상태 검증 (모두 MONITORING 이어야 함)
sudo getcert list
# 웹 UI 접속 확인:
# 브라우저에서 https://<서버_FQDN> (https://ipa.example.com) 으로 접속하여 관리자 로그인 테스트.
* ipactl status , klist
[root@ipa config]# klist
Ticket cache: KCM:0
Default principal: admin@IPARKM.IO
Valid starting Expires Service principal
07/28/2026 00:28:57 07/28/2026 23:43:17 krbtgt/IPARKM.M.IO@IPARKM.IO
[root@ipa config]# ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
named Service: RUNNING
httpd Service: RUNNING
ipa-custodia Service: RUNNING
pki-tomcatd Service: RUNNING
ipa-otpd Service: RUNNING
ipa-dnskeysyncd Service: RUNNING
ipa: INFO: The ipactl command was successful
3. 중앙 관리 사용자 계정 생성
서버 설정이 완료되었으므로 CLI를 통해 테스트용 계정을 생성합니다.
[root@ipa config]# ipa user-add fadmin --first="dragon" --last="Choi" --password
Password:
Enter Password again to verify:
-------------------
Added user "fadmin"
-------------------
User login: fadmin
First name: dragon
Last name: Choi
Full name: dragon Choi
Display name: dragon Choi
Initials: dC
Home directory: /home/f11291
GECOS: dragon Choi
Login shell: /bin/sh
Principal name: f11291@IPARKM.IO
Principal alias: f11291@IPARKM.IO
User password expiration: 20260728043651Z
Email address: f11291@iparkm.io
UID: 877400003
GID: 877400003
Password: True
Member of groups: ipausers
Kerberos keys available: True
(명령 실행 후 사용자 fadmin 이 사용할 임시 비밀번호를 입력합니다.)
# Freeipa 계정을 숫자로 생성하기
# 사용자 계정 생성 (사용자 ID: john)
ipa user-add 12345 \
--first="nouser" \
--last="Test" \
--password
방법 1. 순수 숫자 로그인 아이디 허용 설정 변경 (비추천, 필요시)
만약 반드시 순수 숫자(12345)로만 된 계정을 생성해야 하는 사유가 있다면, FreeIPA 정규식 정책을 임시로 수정해야 합니다.
# 1. Kerberos 티켓 인증 (필요시)
kinit admin
# 2. 사용자 ID 허용 정규식(Regex)을 숫자로 시작 가능하도록 변경 (작동안됨)
/usr/lib/python3.12/site-packages/ipalib/constants.py : 수정
PATTERN_GROUPUSER_NAME = (
'^[a-zA-Z0-9_.][a-zA-Z0-9_.-]*[a-zA-Z0-9_.$-]?$'
)
# 참고: [숫자계정등록 (https://couplewith.tistory.com/990 )]
https://couplewith.tistory.com/990
FreeIPA- 정책 관리 - user_add - 숫자로된 계정 생성 방법
📌 FreeIPA 구축 가이드 1. FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축 - (통합DNS 포함) 2. FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축 - (DNS없이 설치) 3. 서버 접근 HBAC (Host-Based Access Control)
couplewith.tistory.com
서버 설치가 완료되면 다음과 같이 각 Client Nodes의 설정을 진행합니다.
4. Linux Client 연동 (Domain Join)
이제 중앙 관리를 받을 클라이언트 서버(192.168.1.20)로 이동하여 작업을 진행합니다.
Step 1. 호스트네임 및 DNS 설정
클라이언트의 FQDN을 설정하고, DNS 참조를 FreeIPA 서버로 변경합니다.
# 호스트네임 설정
sudo hostnamectl set-hostname client.example.com
# DNS 서버 변경 (/etc/resolv.conf)
sudo vi /etc/resolv.conf
nameserver 192.168.1.10
Step 2. 클라이언트 패키지 설치 및 자동 도메인 조인
# 1. 패키지 설치
sudo dnf module enable idm:DL1
sudo dnf install -y freeipa-client
# 2. 도메인 조인 명령 실행 (홈 디렉터리 자동 생성 옵션)
sudo ipa-client-install --mkhomedir
설치 프로그램이 네트워크의 DNS SRV 레코드를 조회하여 FreeIPA 서버를 자동으로 찾습니다.
진행 도중 Proceed with these settings? [Yes]:가 나오면 Yes를 입력하고, 도메인 조인 권한을 가진 admin 계정과 비밀번호를 입력합니다.
- idm: Identity Management(FreeIPA) 모듈 전체를 의미합니다.
- DL1: 이 모듈 안에서 제공되는 특정 배포 버전 및 아키텍처 규칙(디자인 라인)의 식별자입니다.
- dnf module enable idm:DL1 은 ?
- 시스템에 "나는 idm 도구의 DL1 트랙에 속한 패키지들을 다운로드하여 사용할 수 있도록 잠금을 해제하겠다"라고 선언하는 것입니다. - 여기서 DL은 Domain Level(도메인 레벨)을 의미합니다. FreeIPA 시스템 전체의 내부 아키텍처 버전 레이아웃을 뜻하기 때문에, 운영체제(OS)가 제공하는 공급업체의 규칙을 그대로 따라야 합니다.
- Red Hat(RHEL)의 개발자들이 패키지를 빌드하고 저장소에 등록할 때, IdM(FreeIPA) 패키지 그룹의 이름표로 DL1이라는 값을 공식 지정해 두었습니다.
ㅁ 숫자 계정(예: 123456) 생성 방법
FreeIPA는 기본적으로 숫자 형태의 사용자명을 보안/유닉스 표준 정책상 거부할 수 있습니다. 숫자로만 된 계정을 생성하려는 경우 --posix-check=false (또는 사용자 정의 유효성 검사 건너뛰기) 옵션을 활용하여 생성합니다.
# 숫자 계정 생성 예시
ipa user-add 123456 --first=Test --last=User --password
[123456@most ~]$ kinit admin
Password for admin@IPARKM.IO:
[123456@most ~]$ ipa user-add 12345 --first=Test --last=User --password
비밀번호:
Enter 비밀번호 again to verify:
------------------
Added user "12345"
------------------
User login: 12345
First name: Test
Last name: User
Full name: Test User
Display name: Test User
Initials: TU
Home directory: /home/12345
GECOS: Test User
Login shell: /bin/sh
주체 이름: 12345@IPARKM.IO
Principal alias: 12345@IPARKM.IO
User password expiration: 20260730005009Z
Email address: 12345@iparkm.io
UID: 877400006
GID: 877400006
비밀번호: True
Member of groups: ipausers
Kerberos keys available: True
[123456@most ~]$
https://couplewith.tistory.com/990
FreeIPA- 정책 관리 - user_add - 숫자로된 계정 생성 방법
📌 FreeIPA 구축 가이드 1. FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축 - (통합DNS 포함) 2. FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축 - (DNS없이 설치) 3. 서버 접근 HBAC (Host-Based Access Control)
couplewith.tistory.com
# ipa 계정 등록
ipa user-add u123456 --first=Gildong --last=Hong --password
# --first: 이름
# --last: 성
# --password: 계정 생성과 동시에 초기 비밀번호를 설정할 때 추가 (생략 가능)
[root@vbox0 ~]# ssh u123456@localhost -p 2022
(123456@localhost) Password:
Creating home directory for 123456.
5. 로그인 및 중앙 계정 검증
모든 설정이 완료되었습니다! 클라이언트 서버에서 중앙 생성 계정인 john이 정상적으로 조회되고 로그인되는지 확인합니다.
# 1. 클라이언트 서버에서 계정 정보 조회
id john
출력 예시:
uid=480600001(john) gid=480600001(john) groups=480600001(john)...
# 2. 계정 전환 테스트
su - john
첫 로그인 시 Password change required 메시지와 함께 현재 비밀번호 및 새 비밀번호를 입력하라는 창이 나타납니다. 비밀번호 변경 후 정상적으로 로그인되며 /home/john 홈 디렉터리가 자동 생성되는 것을 확인할 수 있습니다.
📝 요약 및 마무리
- 준비 단계: 서버 네트워크/DNS/방화벽 준비.
고정 IP 설정, FQDN 지정,/etc/hosts및 필수 포트 개방
- 서버 구축: ipa-server-install 구동.
LDAP, Kerberos, DNS가 통합된 서버 모듈 설치 및 구성
- 클라이언트 연동: ipa-client-install --mkhomedir.
DNS 자동 감지 기반의 클라이언트 도메인 조인
이로써 FreeIPA를 사용해 인프라 내의 모든 리눅스 서버 계정을 중앙에서 통합 관리하는 기본 틀이 완성되었습니다.
'InfraPlatform' 카테고리의 다른 글
| FreeIPA 설치 - 자체 DNS 통합 없이 구성하고 운영하는 방법 (0) | 2026.07.28 |
|---|---|
| FreeIPA와 Windows Active Directory(AD) 간의 Cross-Forest Trust 설정 (3) (1) | 2026.07.24 |
| FreeiPA 서버 접근 HBAC (Host-Based Access Control) 정책 구성 (2) (0) | 2026.07.24 |
| 🚀 Windows WSL + Podman Desktop 로 Ollama + Open WebUI GPU 챗봇 구축하기 (RTX 4070 노트북 (0) | 2026.04.24 |
| 윈도우에서 Podman 설치 및 활용하기 (0) | 2026.04.21 |
| [Docker 탈출] 오프라인 환경에서 Podman으로 Ollama AI 모델 관리하기 (0) | 2026.04.20 |
| Linux sshd 서비스 와 SELinux,방화벽 설정 보안강화 (0) | 2026.04.14 |