InfraPlatform

[RHEL/Rocky Linux] FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축하기 (1)

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

 

 

 


[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 비밀번호 입력

 

설치 과정 중 주요 프롬프트 입력 사항:

  1. Do you want to configure integrated DNS (BIND)?: Yes
  2. Server hostname: ipa.example.com (엔터)
  3. Domain name: example.com (엔터)
  4. Realm name: EXAMPLE.COM (대문자 자동 지정, 엔터)
  5. Directory Manager Password: LDAP 관리자 비밀번호 입력
  6. IPA admin Password: FreeIPA 웹/CLI 관리자 비밀번호 입력
  7. 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 홈 디렉터리가 자동 생성되는 것을 확인할 수 있습니다.


📝 요약 및 마무리

  1. 준비 단계: 서버 네트워크/DNS/방화벽 준비.
    고정 IP 설정, FQDN 지정, /etc/hosts 및 필수 포트 개방
  1. 서버 구축: ipa-server-install 구동.
    LDAP, Kerberos, DNS가 통합된 서버 모듈 설치 및 구성
  1. 클라이언트 연동: ipa-client-install --mkhomedir.
    DNS 자동 감지 기반의 클라이언트 도메인 조인

이로써 FreeIPA를 사용해 인프라 내의 모든 리눅스 서버 계정을 중앙에서 통합 관리하는 기본 틀이 완성되었습니다.

728x90
반응형