Sekundär DC (PDC)-server DC01
På fabric-servern:
sudo virt-install --virt-type kvm --name dc02 \
--location \
https://deb.debian.org/debian/dists/bullseye/main/installer-amd64/ \
--memory 1024 \
--vcpus 1 \
--disk pool=vmdisks,size=25,format=qcow2 \
--network bridge=br0 \
--hvm \
--graphics none \
--console pty,target_type=serial \
--extra-args "console=ttyS0"
Konfigurera Debian
Redigera nano /etc/network/interfaces och ställa in en statisk IP-adress:
# /etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug ens2
iface ens2 inet static
address 10.115.100.5/24
gateway 10.115.100.1
# /etc/resolv.conf
search yourdomain.com
nameserver 10.115.100.4
Ställ in systemspråket på engelska för att göra det lättare att upptäcka problem i loggfilerna:
apt install locales-all
localectl set-locale LANG=en_US.utf8
localectl status
Uppdatera Debian och installera de nödvändiga administrationsverktygen:
apt update
apt install wget sudo screen nmap telnet tcpdump rsync net-tools dnsutils htop \
apt-transport-https vim gnupg lsb-release
Skapa nano /etc/sudoers.d/10-nopasswd och lägg till:
%emir ALL=(ALL) NOPASSWD: ALL
Konfigurera VIM
Öppna nano /etc/vim/vimrc och ersätt hela innehållet med:
runtime! debian.vim
syntax on
set background=dark
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
filetype plugin indent on
set encoding=utf-8
set nobackup
set nowritebackup
set showcmd
set updatetime=300
set showmatch
set ignorecase
set smartcase
set incsearch
set tabstop=2
set softtabstop=2
set shiftwidth=2
set expandtab
if filereadable("/etc/vim/vimrc.local")
source /etc/vim/vimrc.local
endif
Skapa en konfigurationsfil för Vim för användare nano ~/.vimrcoch lägg till:
set mouse=
set nocompatible
set cursorline
set nocursorcolumn
set nowrap
set showmode
set hlsearch
set wildmenu
set wildmode=list:longest
set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx
Starta om systemet och logga in som vanlig användare
I mitt fall emir.
Ställ in samma Vim-användarinställningar som ovan för den aktuella användaren.
Samba AD
För att underlätta installationen och konfigurationen bör du byta till root-användaren sudo su
Om du har klienter med Windows 11 22H2 eller senare måste du uppgradera Samba till den senaste versionen. Redigera vim /etc/apt/sources.list och lägg till följande längst ner i filen:
deb http://deb.debian.org/debian bullseye-backports main
Installera paketen
export DEBIAN_FRONTEND=noninteractive
apt update
apt -t bullseye-backports install samba winbind libnss-winbind krb5-user smbclient ldb-tools python3-cryptography
unset DEBIAN_FRONTEND
Konfigurera Kerberos
Öppna /etc/krb5.conf, ta bort innehållet och lägg till följande:
[libdefaults]
default_realm = YOURDOMAIN.COM
dns_lookup_kdc = false
dns_lookup_realm=false
[realms]
YOURDOMAIN.COM = {
kdc = 127.0.0.1
kdc = 10.115.100.4
}
Starta om värddatorn
Efter omstarten ska du kontrollera att Kerberos är korrekt konfigurerat och att du får ett TGT:
kinit administrator
klist
Konfigurera Samba som en sekundär domänkontrollant
Ta bort konfigurationsfilen /etc/samba/smb.conf som skapades automatiskt vid paketinstallationen:
sudo su
rm -f /etc/samba/smb.conf
Lägg till domänkontrollanten som medlem i domänen.
samba-tool domain join yourdomain.com DC -U administrator --realm=YOURDOMAIN.COM -W YOURDOMAIN.COM
Ändra DNS-inställningarna så att de pekar på sig själva i /etc/resolv.conf:
search yourdomain.com
nameserver 127.0.0.1
nameserver 10.115.100.4
Lägg till DNS-vidarebefordraren i /etc/samba/smb.conf:
[global]
...
dns forwarder = 8.8.8.8
...
Aktivera automatisk start av AD-tjänsten:
systemctl unmask samba-ad-dc
systemctl enable samba-ad-dc
systemctl disable winbind nmbd smbd
systemctl mask winbind nmbd smbd
Som standard skapar Samba-AD-konfigurationen en exempelfil med namnet krb5.conf i katalogen /var/lib/samba/private.
Den här filen används som standard av vissa Samba-anrop.
Det är bäst att ersätta den med en symbolisk länk till /etc/kbr5.conf för att undvika vissa biverkningar.
rm /var/lib/samba/private/krb5.conf
ln -s /etc/krb5.conf /var/lib/samba/private/krb5.conf
Starta om Samba:
pkill -9 smbd
pkill -9 nmbd
pkill -9 winbindd
systemctl restart samba-ad-dc
Kontrollera att DNS-posterna har skapats:
samba_dnsupdate --verbose --use-samba-tool
Installera och konfigurera NTP för Samba-AD
Installera NTP-paketen och välj en tidsserver på Internet:
apt install chrony
echo 'server 0.pool.ntp.org iburst' > /etc/chrony/sources.d/org-ntp-server.sources
echo 'server 1.pool.ntp.org iburst' >> /etc/chrony/sources.d/org-ntp-server.sources
echo 'server 2.pool.ntp.org iburst' >> /etc/chrony/sources.d/org-ntp-server.sources
echo 'allow 10.115.100.0/24' > /etc/chrony/conf.d/ad-dc.conf
echo 'ntpsigndsocket /var/lib/samba/ntp_signd' >> /etc/chrony/conf.d/ad-dc.conf
echo 'hwclockfile /etc/adjtime' >> /etc/chrony/conf.d/ad-dc.conf
chronyc reload sources
Ändra ägaren till den katalog som innehåller Samba-socketen som används för att autentisera NTP-tjänsten och starta om NTP:
chgrp -R _chrony /var/lib/samba/ntp_signd
systemctl restart chrony
Bind-DLZ
Även om Samba-AD som standard har en egen inbyggd DNS-server rekommenderas det att använda Bind-DLZ.
Installera bind
För enkelhetens skull gör så här: sudo su
sudo apt install bind9 bind9utils
Redigera vim /etc/bind/named.conf och lägg till include "/var/lib/samba/bind-dns/named.conf";
Ändra avsnittet med inställningar i filen vim /etc/bind/named.conf.options (kom ihåg att ändra vidarebefordraren):
options {
directory "/var/cache/bind";
forwarders {
172.31.1.13;
172.31.1.15;
172.31.1.44;
};
allow-transfer {
172.31.1.13;
172.31.1.15;
172.31.1.44;
};
also-notify {
172.31.1.13;
172.31.1.15;
172.31.1.44;
};
allow-query { any; };
dnssec-validation no;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
minimal-responses yes;
};
Inaktivera IPv6-bindning i det lokala nätverket i vim /etc/default/named:
# run resolvconf?
RESOLVCONF=no
# startup options for the server
OPTIONS="-4 -u bind"
Och vim /etc/samba/smb.conf, lägg till följande rad och kommentera ut raden med DNS-vidarebefordrare:
# Global parameters
[global]
server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
idmap_ldb:use rfc2307 = yes
dns zone transfer clients allow = 172.31.1.13, 172.31.1.15, 172.31.1.44
netbios name = DC01
realm = YOURDOMAIN.COM
server role = active directory domain controller
workgroup = YOURDOMAIN.COM
[sysvol]
path = /var/lib/samba/sysvol
read only = No
[netlogon]
path = /var/lib/samba/sysvol/yourdomain.com/scripts
read only = No
Skapa två kataloger i /var/lib/samba:
sudo mkdir -p /var/lib/samba/bind-dns/dns
sudo chmod 770 /var/lib/samba/bind-dns
sudo chown -R root:bind /var/lib/samba/bind-dns
sudo chmod -R g+w /var/lib/samba/bind-dns
Konfigurera dynamiska uppdateringar av DNS-poster och starta om tjänsterna samba och bind:
samba_upgradedns --dns-backend=BIND9_DLZ
Kontrollera den angivna versionen named -v
BIND 9.16.37-Debian (version med utökat stöd)
Redigera vim /var/lib/samba/bind-dns/named.conf Öppna filen och ta bort kommentartecknen framför modulen för din version av BIND. I mitt fall är det:
database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_16.so";
systemctl restart samba-ad-dc
systemctl restart bind9
Se till att det är Bind-servern som lyssnar på port 53:
netstat -tapn | grep 53
tcp 0 0 10.115.100.5:53 0.0.0.0:* LISTEN 5291/named
Testa lokala och rekursiva sökningar:
dig @localhost microsoft.com
dig @localhost dc01.yourdomain.com
dig -t SRV @localhost _ldap._tcp.yourdomain.com
Konfigurera SYSVOL
Skapa ett nyckelpar för root på målservern och kopiera den offentliga nyckeln till källservern:
Tillåt inloggning som root via SSH vim /etc/ssh/sshd_config på båda servrarna och starta om sshd-tjänsten (detta är endast en tillfällig åtgärd):
# Add following line on the bottom. Will be removed leater.
PermitRootLogin yes
Det första steget är att skapa ett nyckelpar på klientdatorn (DC02):
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@dc01
Gör på samma sätt på dc01
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@dc02
Hämta innehållet i \srvads\sysvol och kopiera det till den nya AD-servern från den sekundära domänkontrollanten.
Kör kommandot:
sudo -i
rsync -aP root@dc01:/var/lib/samba/sysvol/ /var/lib/samba/sysvol/
Ta bort PermitRootLogin yes från /etc/ssh/sshd_config på båda servrarna och starta om sshd.
Replikering
Konfiguration på domänkontrollanten med FSMO-rollen PDC-emulator
Konfigurera SSH-kontroll
Om det fjärranslutna systemet tillämpar hastighetsbegränsningar för inkommande SSH-anslutningar kommer Unison att misslyckas om du försöker köra det på detta sätt. Därför skapar vi den första SSH-anslutningen som en controlpath-fil på den angivna platsen, och alla efterföljande anslutningar kommer att återanvända den första anslutningen.
mkdir ~/.ssh/ctl
cat << EOF > ~/.ssh/ctl/config
Host *
ControlMaster auto
ControlPath ~/.ssh/ctl/%h_%p_%r
ControlPersist 1
EOF
Inställningar för Sysvolsync – loggfiler
Gör följande på DC1 så att du kan kontrollera vad som händer under synkroniseringen. Lägg gärna till den här filen i logrotate, eftersom loggfilens storlek inte begränsas.
touch /var/log/sysvol-sync.log
chmod 640 /var/log/sysvol-sync.log
Konfigurera standardvärden för Unisons körparametrar
Kör följande på DC1
install -o root -g root -m 0750 -d /root/.unison
cat << EOF > /root/.unison/default.prf
# Unison preferences file
# Roots of the synchronization
#
# copymax & maxthreads params were set to 1 for easier troubleshooting.
# Have to experiment to see if they can be increased again.
root = /var/lib/samba
# Note that 2 x / behind DC2, it is required
root = ssh://root@DC2//var/lib/samba
#
# Paths to synchronize
path = sysvol
#
#ignore = Path stats ## ignores /var/www/stats
auto=true
batch=true
perms=0
rsync=true
maxthreads=1
retry=3
confirmbigdeletes=false
servercmd=/usr/bin/unison
copythreshold=0
copyprog = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --inplace --compress
copyprogrest = /usr/bin/rsync -XAavz --rsh='ssh -p 22' --partial --inplace --compress
copyquoterem = true
copymax = 1
logfile = /var/log/sysvol-sync.log
EOF
Konfigurera SysVol på DC2
Installera Unison apt install unison och kör det första testet:
KÖR DETTA FRÅN DC01
/usr/bin/rsync -XAavz --log-file /var/log/sysvol-sync.log --delete-after -f"+ */" -f"- *" /var/lib/samba/sysvol root@DC02:/var/lib/samba && /usr/bin/unison
Lägg till i Crontab på DC1
*/5 * * * * /usr/bin/unison -silent
När du försöker synkronisera mappen på nytt
Varning: Följ stegen nedan, annars kan det hända att mappen sysvol blir tom.
- Inaktivera Cron på DC1, till exempel genom att lägga till ett ”#” på raden med crontab -e
- Kontrollera med kommandot
ps -auxom rsync eller unison för närvarande körs. Om så är fallet, vänta tills det är klart ELLER avsluta processen (om det är en zombieprocess). - Ta bort hash-filerna på både DC1 och DC2 i katalogen /root/.unison
- Kontrollera nu din sysvol och synkronisera om
- Kontrollera att allt fungerar som det ska igen
- Aktivera cron på DC1 igen
Transport Layer Security
Flytta de certifikat som vi tidigare har genererat och kopierat från CA-servern:
sudo mv ca.crt dc02.* /etc/samba/tls/
sudo chown root:root /etc/samba/tls/*
sudo cp /etc/samba/tls/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Redigera vim /etc/samba/smb.conf och lägg till:
[global]
...
tls enabled = yes
tls keyfile = /etc/samba/tls/dc02.key
tls certfile = /etc/samba/tls/dc02.crt
tls cafile = /etc/samba/tls/ca.crt
...
Starta om Samba och kontrollera TLS:
sudo systemctl restart samba-ad-dc.service
sudo openssl s_client -showcerts -connect dc02.yourdomain.com:636 -CAfile /etc/samba/tls/ca.crt