1. LDAP 서버 인증 및 접근 제어권한 설정
LDAP 서브시스템을 활용하여 시스템 인증을 수행하기 위해서는 먼저 디렉토리 관리자 계정의 암호 저장 방식을 일치시키고, 특정 바인딩 사용자를 위한 접근 통제 목록 (ACI) 을 정의해야 합니다. 특히 NIS 에서 마이그레이션되는 경우 암호 해시 방식이 CRYPT 인 경우가 많으므로, 이를 지원하거나 표준화된 SSHA 방식으로 변환하는 과정이 필요합니다.
또한, 보안 강화를 위해 무차별 대입 공격 방지를 목적으로 기본 제공되는 익명 접근 권한을 제한하고, 전용 서비스 계정 (예: bind-user) 을 생성하여 리눅스 클라이언트가 서버와 통신할 때 사용할 수 있도록 권한을 위임합니다.
관리자 콘솔을 통해 새로운 ACI 규칙을 등록할 때에는 기존 기본 권한 설정과 충돌이 발생하지 않도록 순서를 재정비한 후 저장해야 하며, 설정 변경 시 적용되지 않는 오류를 방지하기 위해 세션을 새로 연결하여 확인하는 것이 권장됩니다.
2. 전통적 NIS 데이터의 LDIF 형식 변환 및 로드
기존에 NIS(Yellow Pages) 를 사용하던 환경에서 LDAP 으로 전환하려면 클라이언트 설정을 일관성 있게 맞추고 데이터를 변환해야 합니다. 먼저 서버 단말에서 도메인 이름을 설정하여 NIS 바인딩 테스트가 정상적으로 수행될 환경을 구축합니다.
[root@idm-srv ~]# echo "internal.org" > /etc/domainname
[root@idm-srv ~]# cat >> /etc/yp.conf << EOF
domain internal.org server idm-srv.internal.org
EOF
[root@idm-srv ~]# systemctl restart rpcbind ypbind
[root@idm-srv ~]# yptest
다음으로 NIS 맵을 추출하여 LDIF 파일로 변환하는 스크립트를 준비합니다. 이 과정은 `migrationtools` 패키지를 활용하며, 각 사용자 정보 파일 (passwd, shadow, group) 을 표준 형식에 맞춰 전처리가 필요합니다.
[root@idm-srv ~]# ypcat passwd > /tmp/acc_list.txt
[root@idm-srv ~]# ypcat group > /tmp/grp_list.txt
[root@idm-srv ~]# awk -F':' '{print $1":"$2":0:99999:7:::"}' /tmp/acc_list.txt > /tmp/shad_list.txt
마이그레이션 도구 내부의 헬퍼 파일을 수정하여 대상 LDAP 의 도메인 서픽스 (Suffix) 와 이메일 도메인을 명시합니다. 이때 조직 단위 (OU) 가 People 과 Groups 여야 하는지 확인하고 필요한 경우 보조 클래스 설정을 inetOrgPerson 으로 업데이트합니다.
[root@idm-srv ~]# cp /usr/share/migrationtools/*.pl /root/backup/
[root@idm-srv ~]# sed -i 's/\$DEFAULT_BASE = .*/\$DEFAULT_BASE = "dc=idm-srv,dc=internal,dc=org";/' /usr/share/migrationtools/migrate_common.ph
[root@idm-srv ~]# perl /usr/share/migrationtools/migrate_base.pl > /tmp/suffix.ldif
생성된 LDIF 파일에는 불필요한 기본 OU 정보가 포함될 수 있으므로, 실제 임포트 전에 해당 섹션을 삭제하고 사용자 및 그룹 데이터를 각각 변환하여 디렉토리 트리 구조에 추가합니다. 이때 CA 인증서 정보를 클라이언트 측으로 배포하여 통신 암호화를 보장합니다.
[root@idm-srv ~]# grep -v "^dn:" /tmp/suffix.ldif | head -n -3 > /tmp/clean_suffix.ldif
[root@idm-srv ~]# perl /usr/share/migrationtools/migrate_passwd.pl /tmp/acc_list.txt > /tmp/users.ldif
[root@idm-srv ~]# perl /usr/share/migrationtools/migrate_group.pl /tmp/grp_list.txt > /tmp/groups.ldif
[root@idm-srv ~]# LDAPTLS_CACERT=/etc/openldap/certs/root.pem ldapadd -x -f /tmp/clean_suffix.ldif
[root@idm-srv ~]# ldapadd -x -W -f /tmp/users.ldif -c
3. 클라이언트 단말의 인증 프로토콜 통합
클라이언트 머신은 원격 LDAP 서버로부터 사용자 정보를 조회받아야 하므로, 네트워크 경로 설정을 먼저 확정합니다. 이후 필수 패키지인 `nss_ldap`, `openldap-clients`, `sssd` 등을 설치하여 명세서 서비스 (NSS) 와 인증 관리 모듈 (PAM) 을 활성화합니다.
구성 방법은 명령줄 도구를 사용하는 것부터 시작하지만, 최근에는 `authconfig` 를 통한 자동화된 생성이나 직접 설정 파일 편집 방식을 혼용하기도 합니다.
[root@linux-client ~]# echo "192.168.10.5 idm-srv.internal.org" >> /etc/hosts
[root@linux-client ~]# dnf install -y nss-pam-ldapd sssd openldap-clients
핵심 설정 파일인 `/etc/nslcd.conf` 에는 LDAP 서버 URI, 바인딩 DN, 그리고 암호화된 연결 (StartTLS 또는 SSL) 을 위한 신뢰 루트 인증서 경로를 지정합니다. 이는 시스템이 사용자 검색 시 어떤 자격 증명을 사용할지 결정하는 부분입니다.
[root@linux-client ~]# cat > /etc/nslcd.conf << 'EOF'
uri ldap://idm-srv.internal.org
base dc=idm-srv,dc=internal,dc=org
binddn uid=bindservice,dc=idm-srv,dc=internal,dc=org
bindpw [PASSWORD]
ssl start_tls
tls_cacertfile /etc/openldap/certs/ca-bundle.crt
EOF
NSS 스위치 구성 파일에서는 이름 조회 순서에 `ldap` 를 명시적으로 추가하고, PAM 설정에서 시스템 인증 체인에 LDAP 모듈이 삽입되도록 갱신합니다. SSSD 를 병행 사용하는 경우에도 `sssd.conf` 내의 `auth_provider` 와 `id_provider` 를 ldap 으로 지정한 뒤 캐싱 옵션을 적절히 조정해야 합니다.
[root@linux-client ~]# echo "passwd: files ldap" >> /etc/nsswitch.conf
[root@linux-client ~]# sed -i 's/# pam_unix.so/pam_ldap.so/g' /etc/pam.d/system-auth
[root@linux-client ~]# systemctl restart nslcd sssd
사용자가 로그인 시도 시 홈 디렉토리가 자동으로 생성되지 않을 수 있으므로, `pam_mkhomedir` 모듈을 SSH 구성에 추가하여 처음 접속 시 임시 디렉터리를 할당하도록 조치해야 합니다.
4. 분산 환경에서의 홈 디렉토리 공유 설정
다수의 클라이언트 간 동일한 계정을 사용하더라도 각 서버별로 로컬 홈 디렉토리가 생성되면 데이터 동기화가 불가능해집니다. 이를 해결하기 위해 NFS(Network File System) 와 자동 마운트 도구인 Autofs 를 결합하여 중앙 집중식 홈 디렉터를 구성합니다.
서버 측에서는 공유될 대상 디렉토리를 생성하고 `exports` 파일에 네트워크 범위를 지정합니다. 이후 RPC 서비스를 재가동하여 수출 정책을 활성화합니다.
[root@idm-srv ~]# mkdir -p /home/shared_users
[root@idm-srv ~]# echo "/home/shared_users 192.168.10.0/24(rw,sync,no_root_squash)" >> /etc/exports
[root@idm-srv ~]# exportfs -av && systemctl enable --now nfs-server rpcbind
방화벽 설정 시 NFS 관련 포트 (111, 2049 등) 를 열어야 하지만, modern firewall 은 서비스 네임을 지원하는 경우가 많아 다음과 같이 적용하면 됩니다.
[root@idm-srv ~]# firewall-cmd --zone=public --add-service=nfs --permanent
[root@idm-srv ~]# firewall-cmd --reload
클라이언트 측은 Autofs 설정을 통해 사용자가 실제 액세스 요청이 있을 때만 원격 폴더를 동적으로 마운팅하도록 유도합니다. `auto.master` 에 매핑 규칙을 등록하고, 세부 정책 파일에서는 와일드카드를 사용하여 모든 사용자의 하위 디렉토리를 대응합니다.
[root@linux-client ~]# echo "/home/shared_users /etc/auto.nfs-home" >> /etc/auto.master
[root@linux-client ~]# echo "* -fstype=nfs,rw 192.168.10.5:/home/shared_users/&" > /etc/auto.nfs-home
[root@linux-client ~]# systemctl restart autofs
테스트 단계에서는 특정 LDAP 계정으로 전환 (su -) 하여 현재 작업 디렉토리 경로가 NFS 공유 경로와 일치하는지, 그리고 다른 사용자의 디렉토리 생성 시 권한이 올바른지 검증합니다.
5. 로컬 시스템 계정 동기화 확장 예제
이미 존재하는 로컬 계정을 LDAP 으로 마이그레이션하거나 양방향 동기화를 고려할 때는 `migrationtools` 를 다시 활용합니다. 기존 `/etc/passwd` 나 `/etc/shadow` 에 포함된 사용자 패턴을 필터링하여 LDIF 형식으로 변환한 후 디렉토리에 업로드합니다.
[root@local-node ~]# for i in {1..10}; do useradd ldap${i} <<<"$i"; done
[root@local-node ~]# cut -d: -f1,2 /etc/passwd | grep ldap > /tmp/batch-users.txt
[root@local-node ~]# perl /usr/share/migrationtools/migrate_passwd.pl /tmp/batch-users.txt > /tmp/imp_users.ldif
[root@local-node ~]# ldapadd -x -W -D "cn=admin,..." -f /tmp/imp_users.ldif
이와 같은 과정을 거침으로써 온프레미스 환경에서도 중앙 집중식 계정 관리 인프라를 탄탄하게 구축할 수 있으며, 향후 클라우드 하이브리드 환경으로의 확장에도 기반이 마련됩니다.