콘텐츠로 이동

액티브 디렉토리 인증

필요사항

  • Active Directory에 대한 이해
  • LDAP에 대한 이해

소개

Microsoft의 Active Directory (AD)는 대부분의 기업에서 Windows 시스템과 외부 LDAP 연결 서비스의 사실상의 인증 시스템입니다. 사용자 및 그룹, 접근 제어, 권한, 자동 마운트 등을 구성할 수 있습니다.

이제 Linux를 AD 클러스터에 연결하더라도 언급된 모든 기능을 지원할 수는 없지만 사용자, 그룹 및 접근 제어를 처리할 수 있습니다. 또한 Linux 쪽에서 구성을 조정하고 AD 쪽에서 일부 고급 옵션을 사용하여 SSH 키를 AD를 통해 배포하는 것도 가능합니다.

그러나 이 가이드는 Active Directory 인증을 구성하는 것만 다루며 Windows 쪽에서 추가 구성은 포함되지 않습니다.

SSSD를 사용하여 AD 검색 및 가입

참고 사항

이 가이드 전체에서 도메인 이름으로 ad.company.local이라는 Active Directory 도메인을 나타내는 데 사용됩니다. 이 가이드를 따를 때 실제 AD 도메인이 사용하는 실제 도메인 이름으로 대체하십시오.

Linux 시스템을 AD에 가입하기 위해 첫 번째 단계는 AD 클러스터를 검색하여 양쪽 모두에서 네트워크 구성이 올바른지 확인하는 것입니다.

준비

  • Linux 호스트의 도메인 컨트롤러에서 Linux 호스트로 다음 포트가 열려 있는지 확인하세요.
Service Port(s) Notes
DNS 53 (TCP+UDP)
Kerberos 88, 464 (TCP+UDP) 비밀번호 설정 & 업데이트를 위해 kadmin에서 사용
LDAP 389 (TCP+UDP)
LDAP-GC 3268 (TCP) LDAP 글로벌 카탈로그 - AD에서 사용자 ID를 소싱할 수 있습니다.
  • Rocky Linux 호스트에서 AD 도메인 컨트롤러를 DNS 서버로 구성했는지 확인합니다.

NetworkManager 사용 시:

# 여기서 기본 NetworkManager 연결은 'System eth0'이고 AD입니다. # 서버는 IP 주소 10.0.0.2에서 액세스할 수 있습니다.
[root@host ~]$ nmcli con mod 'System eth0' ipv4.dns 10.0.0.2

  • 양쪽(AD 호스트 및 Linux 시스템)의 시간이 동기화되었는지 확인합니다(chronyd 참조).

Rocky Linux에서 시간을 확인하려면:

[user@host ~]$ date
Wed 22 Sep 17:11:35 BST 2021

  • Linux 측에서 AD 연결에 필요한 패키지를 설치합니다.
[user@host ~]$ sudo dnf install realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation

탐색

이제 Linux 호스트에서 AD 서버를 성공적으로 검색할 수 있어야 합니다.

[user@host ~]$ realm discover ad.company.local
ad.company.local
  type: kerberos
  realm-name: AD.COMPANY.LOCAL
  domain-name: ad.company.local
  configured: no
  server-software: active-directory
  client-software: sssd
  required-package: oddjob
  required-package: oddjob-mkhomedir
  required-package: sssd
  required-package: adcli
  required-package: samba-common

이는 Active Directory DNS 서비스에 저장된 관련 SRV 레코드를 사용하여 검색됩니다.

가입

Linux 호스트에서 Active Directory 설치를 성공적으로 검색한 후 realmd를 사용하여 도메인에 가입할 수 있으며, 이는 adcli 및 기타 도구를 사용하여 sssd의 구성을 조정할 것입니다.

[user@host ~]$ sudo realm join ad.company.local

이 과정에서 KDC has no support for encryption type는 오류가 발생하면, 이전 암호화 알고리즘을 허용하도록 전역 암호화 정책을 업데이트해 보십시오.

[user@host ~]$ sudo update-crypto-policies --set DEFAULT:AD-SUPPORT

이 과정이 성공하면 Active Directory 사용자의 passwd 정보를 가져올 수 있어야 합니다.

[user@host ~]$ sudo getent passwd administrator@ad.company.local
administrator@ad.company.local:*:1450400500:1450400513:Administrator:/home/administrator@ad.company.local:/bin/bash

참고 사항

getent는 이름 서비스 스위치 라이브러리(NSS)에서 항목을 가져옵니다. 즉, passwd 또는 dig와는 달리 getent hosts 또는 getent passwd 경우와 같이 /etc/hosts 또는 sssd에서 다른 데이터베이스를 쿼리합니다.

realm은 사용할 수 있는 몇 가지 흥미로운 옵션이 있습니다:

옵션 관찰
--computer-ou='OU=LINUX,OU=SERVERS,dc=ad,dc=company.local' 서버 계정을 저장할 OU
--os-name='rocky' AD에 저장된 OS 이름 지정
--os-version='8' AD에 저장된 OS 버전 지정
-U admin_username 관리자 계정 지정

인증 시도 중

이제 사용자들은 Linux 호스트에서 Active Directory로 인증할 수 있어야 합니다.

Windows 10:(자체 OpenSSH 사본 제공)

C:\Users\John.Doe> ssh -l john.doe@ad.company.local linux.host
Password for john.doe@ad.company.local:

Activate the web console with: systemctl enable --now cockpit.socket

Last login: Wed Sep 15 17:37:03 2021 from 10.0.10.241
[john.doe@ad.company.local@host ~]$

이 과정이 성공하면 Linux를 Active Directory를 인증 소스로 사용하도록 성공적으로 구성한 것입니다.

기본 도메인 설정

완전히 기본 설정으로는 사용자명에 도메인을 지정하여 AD 계정으로 로그인해야 합니다 (예: john.doe@ad.company.local). 이러한 동작이 원하지 않는 경우 인증 시간에 도메인 이름을 생략할 수 있도록 SSSD를 특정 도메인으로 기본 설정할 수 있습니다.

이것은 실제로 비교적 간단한 프로세스이며, SSSD 구성 파일에서 구성을 변경하는 것만 필요합니다.

[user@host ~]$ sudo vi /etc/sssd/sssd.conf
[sssd]
...
default_domain_suffix = ad.company.local

default_domain_suffix를 추가함으로써 다른 도메인이 지정되지 않으면 사용자가 ad.company.local 도메인의 사용자로 인증하려는 것으로 추론하도록 SSSD에 지시합니다. 이렇게 하면 john.doe@ad.company.local 대신 john.doe와 같은 방식으로 인증할 수 있습니다.

이 구성 변경을 적용하려면 systemctl을 사용하여 sssd.service unit를 다시 시작해야 합니다.

[user@host ~]$ sudo systemctl restart sssd

마찬가지로 홈 디렉터리가 도메인 이름으로 끝나는 것을 원치 않는 경우 이러한 옵션을 /etc/sssd/sssd.conf 구성 파일에 추가할 수 있습니다.

[domain/ad.company.local]
use_fully_qualified_names = False
override_homedir = /home/%u

sssd 서비스를 다시 시작하는 것을 잊지 마십시오.

특정 사용자로 제한

서버의 액세스를 제한하는 다양한 방법이 있지만 이름에서 알 수 있듯이 이것은 확실히 가장 간단한 방법입니다:

해당 옵션을 /etc/sssd/sssd.conf 구성 파일에 추가하고 서비스를 다시 시작하세요.

access_provider = simple
simple_allow_groups = group1, group2
simple_allow_users = user1, user2

이제 sssd를 사용하여 group1 및 group2, 또는 user1 및 user2의 사용자만 서버에 연결할 수 있습니다!

adcli를 사용하여 AD와 상호작용

adcli는 Active Directory 도메인에서 작업을 수행하는 CLI 도구입니다.

  • 아직 설치되지 않았다면 필요한 패키지를 설치하세요:
[user@host ~]$ sudo dnf install adcli
  • Active Directory 도메인에 가입한 적이 있는지 테스트하세요:
[user@host ~]$ sudo adcli testjoin
Successfully validated join to domain ad.company.local
  • 도메인에 대한 고급 정보 얻기:
[user@host ~]$ adcli info ad.company.local
[domain]
domain-name = ad.company.local
domain-short = AD
domain-forest = ad.company.local
domain-controller = dc1.ad.company.local
domain-controller-site = site1
domain-controller-flags = gc ldap ds kdc timeserv closest writable full-secret ads-web
domain-controller-usable = yes
domain-controllers = dc1.ad.company.local dc2.ad.company.local
[computer]
computer-site = site1
  • 자문 도구보다 더 많은 기능을 제공하므로 adcli를 사용하여 도메인을 상호작용할 수 있습니다. 사용자 또는 그룹 관리, 암호 변경 등을 수행할 수 있습니다.

예: 'adcli'를 사용하여 컴퓨터 정보 가져오기:

참고

이번에는 -U 옵션을 사용하여 관리자 사용자명을 제공합니다.

[user@host ~]$ adcli show-computer pctest -U admin_username
Password for admin_username@AD: 
sAMAccountName:
 pctest$
userPrincipalName:
 - not set -
msDS-KeyVersionNumber:
 9
msDS-supportedEncryptionTypes:
 24
dNSHostName:
 pctest.ad.company.local
servicePrincipalName:
 RestrictedKrbHost/pctest.ad.company.local
 RestrictedKrbHost/pctest
 host/pctest.ad.company.local
 host/pctest
operatingSystem:
 Rocky
operatingSystemVersion:
 8
operatingSystemServicePack:
 - not set -
pwdLastSet:
 133189248188488832
userAccountControl:
 69632
description:
 - not set -

예: adcli를 사용하여 사용자 비밀번호 변경하기:

[user@host ~]$ adcli passwd-user user_test -U admin_username
Password for admin_username@AD: 
Password for user_test: 
[user@host ~]$ 

문제 해결

때때로 네트워크 서비스가 SSSD보다 늦게 시작되어 인증에 문제가 발생할 수 있습니다.

SSSD를 다시 시작하기 전까지는 AD 사용자가 연결할 수 없습니다.

이 경우에는 systemd의 서비스 파일을 재정의하여 이 문제를 해결해야 합니다.

다음 내용을 /etc/systemd/system/sssd.service에 복사합니다.

[Unit]
Description=System Security Services Daemon
# SSSD must be running before we permit user sessions
Before=systemd-user-sessions.service nss-user-lookup.target
Wants=nss-user-lookup.target
After=network-online.target


[Service]
Environment=DEBUG_LOGGER=--logger=files
EnvironmentFile=-/etc/sysconfig/sssd
ExecStart=/usr/sbin/sssd -i ${DEBUG_LOGGER}
Type=notify
NotifyAccess=main
PIDFile=/var/run/sssd.pid

[Install]
WantedBy=multi-user.target

다음 재부팅에서 서비스는 요구 사항 이후에 시작되며 모든 것이 정상적으로 진행될 것입니다.

Active Directory에서 나가기

가끔 AD를 떠나야 할 필요가 있습니다.

다이 경우 realm으로 진행하고 더 이상 필요하지 않은 패키지를 제거할 수 있습니다:

[user@host ~]$ sudo realm leave ad.company.local
[user@host ~]$ sudo dnf remove realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation

Author: Hayden Young

Contributors: Steven Spencer, Sambhav Saggi, Antoine Le Morvan, Krista Burdine