Microsoft Active Directory

Siehe auch

Begriffe:

  • AD: Active Directory

  • DC: Domain Controller

  • PDC: Primary Domain Controller

  • ADDC: Active Directory Domain Controller

Installation

Manchmal braucht sogar ein Linux-Systemadministrator ein Windows Active Directory um gewisse Themen zu testen. Dazu ist hier die Installation eines AD-Test-Setups unter Windows beschrieben.

Falls schon eine Windows Server Installation vorhanden ist, kann dieser Schritt übersprungen werden. Ansonsten lohnt es sich, das VDH von https://www.microsoft.com/en-us/evalcenter/download-windows-server-2022 herunterzuladen, in ein QCOW2-Image umzuwandeln und dann via KVM laufenzulassen:

wget https://software-static.download.prss.microsoft.com/pr/download/20348.169.amd64fre.fe_release_svc_refresh.210806-2348_server_serverdatacentereval_en-us.vhd
qemu-img convert -p -f vpc -O qcow2 20348.169.amd64fre.fe_release_svc_refresh.210806-2348_server_serverdatacentereval_en-us.vhd 20348.169.amd64fre.fe_release_svc_refresh.210806-2348_server_serverdatacentereval_en-us.qcow2

sudo cp 20348.169.amd64fre.fe_release_svc_refresh.210806-2348_server_serverdatacentereval_en-us.qcow2 /var/lib/libvirt/images/WIN-AD01.qcow2
sudo chown qemu:qemu /var/lib/libvirt/images/WIN-AD01.qcow2

Nachdem im KVM eine VM erstellt wurde (Empfehlung: 2 CPUs & 4 GB RAM), müssen nach dem Boot nur noch die Spracheinstellungen vorgenommen und ein Passwort für den Administrator vergeben werden.

Als nächstes muss sichergestellt werden, dass der Windows Server eine statische IP hat. Dazu rechts in der Taskbar das Netzwerk-Icon rechtsklicken > Open Network & Internet Settings > Change Adapter Options > Ethernet > Properties:

  • IPv6: deaktivieren

  • IPv4 > Properties: Fixe IP vergeben

Hostname setzen und RDP aktivieren:

Server Manager > Local Server:

  • Computer name > Change > Computer name: WIN-AD01

  • Remote Desktop: Allow remote connections to this computer

NTP-Server aktivieren:

net stop w32time
w32tm /config /syncfromflags:manual /manualpeerlist:"0.pool.ntp.org, 1.pool.ntp.org, 2.pool.ntp.org"
w32tm /config /reliable:yes
net start w32time
w32tm /query /configuration

AD-Rolle aktivieren:

Server Manager > Dashboard > Add roles and features > Next

  • Role-based or feature-based installation > Next

  • Select a server from the server pool: WIN-AD01 > Next

  • Server Roles: „Active Directory Domain Services“ anwählen > Add Features > Next > Next > Next > Install

Und den Server zum DC promoten:

Server Manager > Dashboard > Warnungsymbol oben rechts > Promote this server to domain controller

  • Add new forest > Root domain name: example.loc > Next

  • DSRM password: setzen > Next

  • DNS Options > Next

  • Additional Options > Next

  • Paths > Next

  • Review Options > Next > Install

Nun kann den ersten User anlegen:

Server Manager > Tools > Active Directory Users and Computers > Domain auswählen > Users rechtsklicken > New > User

AD-Join (RHEL 8)

update-crypto-policies --set DEFAULT:AD-SUPPORT

# hostname needs to be fully qualified and end with the AD domain
hostnamectl set-hostname linux01.example.loc

# use ADDC as DNS server
nmcli connection edit Wired\ connection\ 1
systemctl restart NetworkManager

# double check and test
cat /etc/resolv.conf
dig +short SRV _ldap._tcp.example.loc
# 0 100 389 win-ad01.example.loc.
dig +short SRV _kerberos._tcp.example.loc
# 0 100 88 win-ad01.example.loc.
dig +short SRV _kerberos._udp.example.loc
# 0 100 88 win-ad01.example.loc.

# use ADDC as NTP server
vim /etc/chrony.conf
# server win-ad01.example.loc iburst
systemctl restart chronyd.service
chronyc sources
chronyc tracking

reboot

dnf install -y samba-common-tools realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
realm discover example.loc
# example.loc
#   type: kerberos
#   realm-name: EXAMPLE.LOC
#   domain-name: example.loc
#   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-tools

realm join --user Administrator example.loc

# check
realm list
getent passwd administrator@example.loc
# administrator@example.loc:*:647200500:647200513:Administrator:/home/administrator@example.loc:/bin/bash

Damit die User sich ohne @example.loc anmelden können muss default_domain_suffix = example.loc gesetzt werden:

/etc/sssd/sssd.conf
[sssd]
domains = example.loc
config_file_version = 2
services = nss, pam
default_domain_suffix = example.loc
...
systemctl restart sssd

Nun kann der Zugang via SSH getestet werden:

ssh Administrator@IP

AD-Join (Debian 12)

# hostname needs to be fully qualified and end with the AD domain
hostnamectl set-hostname debian12-20.example.loc

# use ADDC as DNS server
vim /etc/resolv.conf
echo 'prepend domain-name-servers IP-OF-ADDC;' >> /etc/dhcp/dhclient.conf
systemctl restart networking

# double check and test
cat /etc/resolv.conf
dig +short SRV _ldap._tcp.example.loc
# 0 100 389 win-ad01.example.loc.
dig +short SRV _kerberos._tcp.example.loc
# 0 100 88 win-ad01.example.loc.
dig +short SRV _kerberos._udp.example.loc
# 0 100 88 win-ad01.example.loc.

# use ADDC as NTP server
echo 'NTP=IP-OF-ADDC' >> /etc/systemd/timesyncd.conf
systemctl restart systemd-timedated.service

reboot

apt install adcli libnss-sss libpam-sss oddjob oddjob-mkhomedir packagekit realmd samba-common-bin sssd sssd-tools krb5-user
realm discover example.loc
# example.loc
#   type: kerberos
#   realm-name: EXAMPLE.LOC
#   domain-name: example.loc
#   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-tools

realm join --user Administrator example.loc

# check
realm list
getent passwd administrator@example.loc
# administrator@example.loc:*:647200500:647200513:Administrator:/home/administrator@example.loc:/bin/bash

# enable mkhomedir
pam-auth-update --enable mkhomedir

Damit die User sich ohne @example.loc anmelden können muss default_domain_suffix = example.loc gesetzt werden:

/etc/sssd/sssd.conf
[sssd]
domains = example.loc
config_file_version = 2
services = nss, pam
default_domain_suffix = example.loc
...
systemctl restart sssd

Nun kann der Zugang via SSH getestet werden:

ssh Administrator@IP

SSH-Keys im AD hinterlegen

Sollen SSH-Schlüssel im AD abgelegt werden, kann entweder ein FreeIPA-Server zwischen die Linux-Clients und das Windows Active Directory geschaltet werden, oder der SSH-Schlüssel kann als zusätzliches Attribut im AD abgelegt werden.

SSH-Key hinterlegen:

Server Manager > Tools > Active Directory Users and Computers:

  • View > „Advanced Features“ aktivieren

  • User auswählen und bearbeiten > Attribute Editor > altSecurityIdentities > Edit: SSH-Key eintragen und hinzufügen

SSSD-Konfiguration anpassen:

/etc/sssd/sssd.conf
[sssd]
...
services = nss, pam, ssh
...

[domain/example.loc]
...
ldap_user_extra_attrs = altSecurityIdentities
ldap_user_ssh_public_key = altSecurityIdentities
systemctl stop sssd; rm -rf /var/lib/sss/{db,mc}/*; systemctl start sssd

SSH-Konfiguration anpassen:

/etc/ssh/sshd_config
...
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody
...
sshd -t && systemctl restart sshd

SSH-Zugang testen:

ssh myuser@IP

SSH-Keys auf dem Linux-Client anzeigen lassen:

sss_ssh_authorizedkeys myuser@example.loc