
📌 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
ipa계정 정책을 벗어나 기존의 정책을 수용해야 하는 경우가 있습니다.
ipa 는 숫자로만 구성된 계정을 만들지 못하는데 이런 예외적인 계정을 등록하는 방법을 찾고자 다음 블로그 글을 작성합니다.
전반적인 내용을 꼼꼼히 읽어 보고 다양한 실패의 교훈을 보고 정리 드립니다.
FreeIPA- 정책 관리 - user_add - 숫자로된 계정 생성 방법

(문제) IPA 계정 등록 정책 을 수정 할 수 있을까 ?
(?!^[0-9]+$)^[a-zA-Z0-9_.][a-zA-Z0-9_.-]*[a-zA-Z0-9_.$-]?$
이 정규식은 "하이픈으로 시작하는 건 막고, 특수문자(_, ., -)와 영문/숫자는 허용하되, 완전히 숫자로만 된 아이디(12345)는 금지하는 규칙"
위와 같이 첫글자가 숫자이면 안됩니다. 그리고 특수기호도 안됩니다.
① 부정형 전방탐색,(?!^[0-9]+$),
"전체가 숫자로만 구성된 경우"를 차단 (Lookahead)
② 첫 글자 조건,^[a-zA-Z0-9_.],
"시작 문자는 영문, 숫자, 언더바(), 마침표(.)만 가능", 하이픈(-)으로 시작하는 것은 방지
③ 중간 글자 조건,[a-zA-Z0-9.-]*,
"중간 문자는 영문, 숫자, , ., 하이픈(-) 허용 (0자 이상)", 두 번째 글자부터는 하이픈(-)이 추가로 허용
④ 끝 글자 조건,[a-zA-Z0-9.$-]?$,
"끝 문자는 영문, 숫자, _, ., $, - 허용 (선택적 1자)", 마지막 글자에는 NIS/Samba 계정 등에서 특수 목적(기계 계정 등)으로 쓰는 달러 기호($)가 추가로 허용
| - | - | - |
|---|---|---|
| 계정명 | 통과여부 | 거부 사유 |
| 12345 | X | 전체가 숫자로만 구성됨 ((?!^[0-9]+$) 규칙 위반) |
| u12345 | O | 영문 + 숫자 조합 (정상) |
| 12345a | O | 숫자로 시작하지만 영문이 포함됨 (정상) |
| john.doe | O | 영문 + 마침표 조합 (정상) |
| -user | X | 시작 문자로 하이픈(-) 사용 불가 |
ㅁ 문제 해결 방안
1안) 소스를 수정하여 계정 등록을 가능도록 한다 (소스의 정규식을 수정한다) : 성공
>> 소스를 수정하고 ipa를 재기동하여 사용자 등록 + 로그인 가능
2안 ) ipa LDAP Schema 를 수정 하여 계정을 등록 하는 방법 - 스키마 수정 :
>> ( Schema 수정 실패)
2안 ) ipa LDAP Schema 로 커스텀 속성을 추가하여 계정을 등록 하는 방법 :
>> ( 속성 수정 성공, 계정등록성공, 로그인은 안됨)
숫자로 구성된 계정을 만들어 보자 ( 실패)
FreeIPA 내부 유효성 검사기가 LDAP 변경값을 실시간으로 읽지 못하고 에러를 낸다면?
FreeIPA 최신 버전(4.x)의 내부 파이썬 검증 엔진은 입력된 계정 ID가 기본 규칙(숫자로만 된 ID 금지, 또는 특정 정규식)을 통과하지 못하면, 서버(LDAP)로 데이터를 전송하기도 전에 CLI 단에서 명령어를 스스로 차단해 버립니다.
ipa: ERROR: invalid 'login' 에러 메시지는 LDAP 데이터베이스 수정과는 별개로, FreeIPA CLI 명령어 프로그램(ipa 바이너리) 자체의 파이썬 코드 내부에 "유저네임(login) 규칙"이 하드코딩으로 엄격하게 고정되어 있기 때문에 발생한 오류
[root@ipa ~]# ipa user-add 12345 --first=Number --last=IDTest
ipa: ERROR: invalid 'login': may only include letters, numbers, _, -, . and $, refer to 'ipa help user' for complete format description
1안 ) 소스를 수정하여 계정을 등록하자 (성공)
숫자로 만든 계정의 정보가 연관된 부분
# ************************************
# ipa LDAP Lib Source Relations
# ************************************
PATTERN_GROUPUSER_NAME = (
'(?!^[0-9]+$)^[a-zA-Z0-9_.][a-zA-Z0-9_.-]*[a-zA-Z0-9_.$-]?$'
)
는 Python 모듈이 import될 때 메모리에 로드되는 상수(Constant) 입니다.
즉,
constants.py
│
▼
PATTERN_GROUPUSER_NAME
│
▼
baseuser.py
│
▼
Str(
'uid',
pattern=constants.PATTERN_GROUPUSER_NAME
)
1) 계정 정책 (정규식) 라이브러리 소스를 수정
/usr/lib/python3.12/site-packages/ipalib/constants.py 소스에 사용자 계정의 정규식 정책이 있습니다.
아래 와 같이 수정합니다. ( 주석 라인은 제거 합니다.)
# *********************************************
# /usr/lib/python3.12/site-packages/ipalib/constants.py
# *********************************************
#
# Maximum hostname length in Linux
# It's the max length of uname's nodename and return value of gethostname().
MAXHOSTNAMELEN = 64
# DNS name is 255 octets, effectively 253 ASCII characters.
MAXHOSTFQDNLEN = 253
# regexp definitions
PATTERN_GROUPUSER_NAME = (
# '(?!^[0-9]+$)^[a-zA-Z0-9_.][a-zA-Z0-9_.-]*[a-zA-Z0-9_.$-]?$'
'^[a-zA-Z0-9_.][a-zA-Z0-9_.-]*[a-zA-Z0-9_.$-]?$'
)
ERRMSG_GROUPUSER_NAME = (
'may only include letters, numbers, _, -, . and $'
', refer to \'ipa help {}\' for complete format '
'description'
)
수정 전
PATTERN_GROUPUSER_NAME = (
'(?!^[0-9]+$)^[a-zA-Z0-9_.][a-zA-Z0-9_.-]*[a-zA-Z0-9_.$-]?$'
)
수정 후
PATTERN_GROUPUSER_NAME = (
'^[a-zA-Z0-9_.][a-zA-Z0-9_.-]*[a-zA-Z0-9_.$-]?$'
)
2) FreeIPA 서비스 재시작
ipactl restart
3) 숫자 계정 생성 테스트
# 숫자로 구성된 계정을 생성합니다.
ipa user-add 12345 --first=NumberTest --last=User
# 계정의 패스워드를 등록합니다.
ipa user-mod 12345 --password
# ssh 로그인 테스트
ssh 12345@localhost -p 22
ipa 사용자 수동 등록 실패한 경우를 남겨 봅니다.
ipa 사용자 등록은 다음 두가지 스키마의 영향을 받고 있다.
2안 ) ipaConfig 속성을 수정 하여 계정 등록 (Schema 수정 실패)
3안) 커스텀 속성을 수정하여 계정 등록 (성공) : 우회방법 ( 등록, 수정 성공, 로그인 실패)
다음 두가지 Ldap DB 스키마를 수정해야 하는 과정이 필요하나 (1안은 실패)
# 2안 : ipa user add 관련 정책 <- 등록이 필요하나 수정이 안됨
/etc/dirsrv/slapd-IPARKM-IO/schema/60ipaconfig.ldif
# 3안 : ipa custom 필드명 등록 <- 사용자정의 컬럼 추가
/etc/dirsrv/slapd-IPARKM-IO/schema/99user.ldif
3안) ipaConfig 커스텀 스키마를 수정하여 사용자 계정을 생성하는 방안 (실패)
ㅁ ipaConfig 속성을 수정 하여 등록 (실패)
- 다음과 같이 ipaConfig -> ipatextusernamepattern 속성을 추가 하고자 하였으나 스키마 수정이 실패 하였다
#
# ipaConfig -> ipatextusernamepattern 속성을 추가 하고자 하였으나 실패
#
ldapmodify -Y EXTERNAL -H ldapi:///var/run/slapd-IPARKM-IO.socket <<EOF
dn: cn=ipaConfig,cn=etc,dc=iparkm,dc=io
changetype: modify
replace: objectClass
objectClass: top
objectClass: ipaConfig
objectClass: ipaConfigObject
add: ipatextusernamepattern
ipatextusernamepattern: [a-zA-Z0-9_.][a-zA-Z0-9_.-]*[a-zA-Z0-9_.$-]?$
EOF
2안) 사용자 정의 커스텀 스키마를 수정하여 사용자 계정을 생성하는 방안 (성공)
** 현재 이 방법은 ipa Portal의 계정 등록은 되었으나 , 서버 계정 로그인 연동이 되지 않아 확인중
ipactl restart
ldapmodify -Y EXTERNAL -H 'ldapi://%2fvar%2frun%2fslapd-IPARKM-IO.socket' <<EOF
dn: uid=12345,cn=users,cn=accounts,dc=iparkm,dc=io
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalperson
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
uid: 12345
cn: Number IDTest
sn: IDTest
givenName: Number
uidNumber: 877400004
gidNumber: 877400004
homeDirectory: /home/12345
loginShell: /bin/sh
krbPrincipalName: 12345@IPARKM.IO
EOF
3안 ) 커스텀 속성 생성 후 FreeIPA 관리자 와 로그인 확인 (성공)
# FreeIPA 명령어로 유저 정보가 정상 조회되는지 확인
ipa user-show 12345
ㅁ ipa user-mod 비밀번호 강제 수정
# kinit admin : 관리자 로그인 (인증)
[root@ipa ~]# kinit admin
Password for admin@IPARKM.IO:
# ipa user-mod : 비밀번호 강제 변경 명령어 실행
[root@ipa ~]# ipa user-mod 12345 --password
Password:
Enter Password again to verify:
---------------------
Modified user "12345"
---------------------
User login: 12345
First name: Number
Last name: IDTest
Home directory: /home/12345
Login shell: /bin/sh
Principal alias: 12345@IPARKM.IO
UID: 877400004
GID: 877400004
Job Title: Manager ipa
User authentication types: password
Account disabled: False
Password: True
Member of groups: ipausers, developer
Kerberos keys available: True
ipa 관리 화면에서 계정의 정보는 보이나 로그인 연동이 되지 않는다. 관련해서는 좀더 확인후 업데이트 예정임
'InfraPlatform' 카테고리의 다른 글
| [RHEL/Rocky] 안전한 로컬 Yum Repo 구축 방법 (0) | 2026.07.30 |
|---|---|
| FreeIPA -정책관리 - 사용자 등록과 권한 정책 등록 - sudo command (0) | 2026.07.29 |
| 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 |
| [RHEL/Rocky Linux] FreeIPA로 리눅스 중앙 계정 관리(IdM) 시스템 구축하기 (1) (0) | 2026.07.24 |
| 🚀 Windows WSL + Podman Desktop 로 Ollama + Open WebUI GPU 챗봇 구축하기 (RTX 4070 노트북 (0) | 2026.04.24 |