Samba AD DC

ad dc

Samba jako kontroler domeny + serwer plików

Opisywana tutaj konfiguracja jest niezalecaną przez twórców Samby. Dopuszczają oni jej użycie przy małych domenach gdzie nie ma innych serwerów plików ale mimo to zastrzegają, że mogą wystąpić różne dziwne i niespodziewane sytuacje.

Założenia

Chcemy uruchomić kontroler domeny oparty o Sambę. Nazwa domenty w tym przypadku to domana.lan, REALM w Kerberos to DOMENA.LAN. Trzeba pamiętać o tym, że końcówka domeny .local może narobić problemów. Nazwa netbios środowiska dla systemów Windows to DOMENA. Samba będzie serwerem DNS dla komputerów w sieci lokalnej a zapytania na które nie będzie w stanie odpowiedzieć przekaże do innego DNSa (forwarding).

Sambę instalujemy na świeżym systemie Debian, który nie będzie pełnił żadnych dodatkowych funkcji poza tym, że będzie również serwerem DNS dla komputerów będących członkami domeny. Warto ustawić serwer DHCP w sieci lokalnej tak by jako domyślny adres DNS podawał klientom adres kontrolera domeny a jako dodatkowy jakiś inny by sieć jakkolwiek działał w przypadku kiedy kontroler domeny ma "przerwę".

Wstępna konfiguracja systemu - stałe IP

Ustawić stałe IP w /etc/network/interfaces

allow-hotplug enp1s0
iface enp1s0 inet static
address 192.168.123.1
netmask 255.255.255.0
gateway 192.168.123.254
Rozwiązywanie nazwy domenowej

Musimy do IP przypisać domenę i nazwę hosta w pliku /etc/hosts:

127.0.0.1       localhost
192.168.123.1   dc.domena.lan   dc
NTP - synchronizacja czasu

Do poprawnego działania Kerberos wykorzystuje czas systemowy, potrzebujemy zatem by na wszystkich komputerach w domenie był ten sam czas. Do tego celu wykorzystać możemy NTP.

apt install ntp

Tworzymy plik /etc/ntp.conf o zawartości

server 127.0.0.1
fudge 127.0.0.1 stratum 10
server 0.pool.ntp.org iburst prefer
server 1.pool.ntp.org iburst prefer
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp
ntpsigndsocket /var/lib/samba/ntp_signed/
restrict default kod nomodify notrap nopeer mssntp
restrict 127.0.0.1
restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery

Restartujemy ntp:

service ntp restart

Na klientach Windows synchronizujemy czas wydając polecenie:

net time /set

Komputery z Debianem będą wymagać ntpdate. Synchronizacja odbywa się po wydaniu polecenia ntpdate dc.domena.lan

Instalacja oprogramowania i konfiguracja

Instalujemy niezbędne oprogramowanie:

apt -y install samba krb5-config winbind smbclient

Na pytania odnośnie konfiguracji Kerberos odpowiadamy: domena: domena.lan REALM: DOMENA.LAN Kerberos server for realm: dc.domena.lan Administrative server for realm: dc.domena.lan

Usuwamy domyślną konfigurację SAMBA, jeżeli plik smb.conf będzie istniał to konfiguracja nie powiedzie się.

mv /etc/samba/smb.conf /etc/samba/smb.conf.back

Uruchamiamy provisioning:

samba-tool domain provision --use-rfc2307 --interactive

Na pytania odpowiadamy w następujący sposób:

Realm: DOMENA.LAN

Kerberos realm

Kerberos server for realm

Administrative server for realm

Domain: DOMENA (nazwa dla netbios - maksymalnie 15 znaków)

Server role: dc

DNS backend: SAMBA_INTERNAL (następnie wskazujemy nadrzędny serwer DNS)

Przenosimy wygenerowany plik krb5.conf we właściwe miejsce:

cp /var/lib/samba/private/krb5.conf /etc/

Konfigurujemy autostart właściwych usług Samby:

systemctl stop smbd nmbd winbind
systemctl disable smbd nmbd winbind
systemctl unmask samba-ad-dc
systemctl start samba-ad-dc
systemctl enable samba-ad-dc

Weryfikujemy czy Samba działa:

smbclient -L localhost -U%
samba-tool domain level show
Konfiguracja DNS

W pliku /etc/resolv.conf dodajemy wpisy wskazujace na nowy DNS:

search domena.lan
nameserver 192.168.123.1
Konfiguracja winbindd

Winbindd pozwala na przypisywanie uprawnień do katalogów i plików na serwerze zgodnie z danymi zawartymi w kontrolerze domeny. Dzięki temu nazwy użytkowników i grupy pedą wiodczny przy korzystaniu z np.: ls i będzie się dało korzystać z chown i chgrp.

Dane profili użytkowników winbindd w smb.conf
Konfiguracja podmieniania nazw użytkowników

W pliku /etc/nsswitch.conf edytujemy pierwsze linie dodając w nich na drugiej pozycji winbind. Mogą wyglądać tak:

passwd: files winbind
group:  files winbind

lub tak:

passwd: files winbind systemd
group:  files winbind systemd

UWAGA - nie używać takich samych nazw użytkowników w /etc/passwd jak w domenie.

Przy udostępnianiu zasobu w smb.conf trzeba podać parametr:

vfs objects = dfs_samba4 acl_xattr recycle

jeżeli ta sama instancja jest kontrolerem domeny. Uprawnienia do katalogów będzie można nadawać tylko przez Sambę używając komputerów, które montują zasób.

Weryfikacja

Sprawdzamy czy poniższe polecenia zwrócą adres nasszego serwera SAMBA obsługującego domenę Windows:

host -t A nasza.domena
host -t A dc.nasza.domena
host -t SRV _kerberos._udp.nasza.domena
host -t SRV _ldap._tcp.nasza.domena

Jeżeli nie otrzymujemy zwrotek wskazujących na nasz serwer trzeba poprawić konfigurację DNS w naszej sieci.

Weryfikujemy czy serwer SAMBA jest widoczny w sieci i jakie zasoby są dostępne w naszej sieci:
# smbclient -L nasza.domena -N

Inicjalizacja użytkownika w Kerberos

Istotnym jest by w tym polecenie domenę wpisać WIELKIMI LITERAMI
kinit administrator@NASZA.DOMENA

Sprawdzamy przyznane uprawnienia:
# klist

Teraz mamy już w domenie poprawnie działającego użytkownika administrator dla Windows i możemy zacząć pracować z RSA (Remote Server Administration) na Windows. Ewentualnie możnan dodać dodatkowego użytkownika z pomoca serwera SAMBA: # samba-tool user create tmpuser

Użytkowników możemy zweryfikować wydając polecenie:
# samba-tool user list

Konfiguracja DNS

W moim przypadku DNSem jest mikrotik, poniżej konfiguracja jaką należy dodać by DNS działał poprawnie dla domeny Windows. W przypadku posługiwania się innym DNSem należy go skonfigurować tak by w taki sam sposób rozwiązywał nazwy w domenie.

/ip dns static add name=ns.nasza.domena address=adres_mt
/ip dns static add name=nazwa_hosta.nasza.domena address=192.168.x.y
/ip dns static add name=nasza.domena address=192.168.x.y
/ip dns static add name=nasza.domena ns=ns.nasza.domena
/ip dns static add name=_gc._tcp.nasza.domena srv-port=3268 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_kerberos._tcp.dc._msdcs.nasza.domena srv-port=88 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_kerberos._tcp.nasza.domena srv-port=88 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_kerberos._udp.nasza.domena srv-port=88 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_kpasswd._tcp.nasza.domena srv-port=464 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_kpasswd._udp.nasza.domena srv-port=464 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_ldap._tcp.dc._msdcs.nasza.domena srv-port=389 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_ldap._tcp.DomainDnsZones.nasza.domena srv-port=389 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_ldap._tcp.DomainGUID.domains._msdcs.nasza.domena srv-port=389 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_ldap._tcp.gc._msdcs.nasza.domena srv-port=389 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_ldap._tcp.nasza.domena srv-port=389 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_ldap._tcp.pdc._msdcs.nasza.domena srv-port=389 srv-target=nazwa_hosta.nasza.domena srv-weight=100
/ip dns static add name=_msdcs.nasza.domena ns=ns.nasza.domena
/ip dns static add name=DomainDnsZones.nasza.domena address=192.168.x.y
/ip dns static add name=DsaGUID._msdcs.nasza.domena cname=nazwa_hosta.nasza.domena
/ip dns static add name=ForestDnsZones.nasza.domena address=192.168.x.y

nazwa_hosta to nazwa naszego kontrolera domeny a 192.168.x.y to jego adres IP należy jeszcze mieć na uwadze by podać w pierwszym wpisie adres naszego mikrotika.

Dołączanie klienta Windows do domeny

Po zalogowaniu się na komputrze z Windows (w wersji Pro lub wyższej) ustawiamy nazwę hosta dla tego komputera. Następnie uruchamiamy PowerShella z prawami administatora i wydajemy polecenie:
Add-Computer -DomainName "nasza.domena" -Restart

W nowym okienku podajemy login i hasło administratora domeny.

Jeżeli zajdzie potrzeba usunięcia komputera z domeny, która już nie istnieje to w wierszu poleceń należy wydać jako administrator polecenie: netdom remove computername /Domain:domain /UserD:user /PasswordD:* /Force

Natychmiastowe odświeżenie konfiguracji z domeny uzyskamy po wydaniu polecania: gpupdate /Force

To polecenie pozwala też łatwo zweryfikować czy mamy łączność z kontrolerem domeny.

Zdalna administracja

Microsoft strasznie pokombinował z instalacją narzędzi do zdalnej administracji od Windows 10 w wersji 1809. Na tą chwilę najłatwiej zainstalować RSAT używając PowerShella z uprawnieniami administratora wydając polecenie:
Get-WindowsCapability -Name RSAT* -Online | where State -EQ NotPresent | Add-WindowsCapability –Online

Ewentualnie należy wybrać opcję Dodaj funkcję opcjonalną a następnie dodać narzędzia administracji zdalnej:

  • do zarządzania zasadami grupy
  • usług Active Directory Domain Services
  • DNS Server Tools
  • usług pulpitu zdalnego

Główne zadania administracyjne wykonujemy za pomocą aplikacji nazwanej Użytkownicy i komputery usługi Active Directory. Warto na wstępie wybrać w tej aplikacji Widok/Opcje zaawansowane.

Zarządzanie politykami domeny możemy wywołać przez Zarządzaj zasadami grupy po kliknięciu prawym przyciskiem w Obiekty zasad grup dla danej domeny i wybraniu Edytuj. Edytor zasad grupy

Zmiana hasła Administratora z poziomu Samby
samba-tool user setpassword Administrator
Sprawdzanie parametrów hasesł w domenie
samba-tool domain passwordsettings show
Zmiana ustawień haseł w domenie
samba-tool domain passwordsettings set --complexity=on \
                                              --store-plaintext=off \
                                              --history-length=24 \
                                              --min-pwd-length=7 \
                                              --min-pwd-age=0 \
                                              --max-pwd-age=180 \
                                              --account-lockout-duration=30 \
                                              --account-lockout-threshold=10 \
                                              --reset-account-lockout-after=30
ipconfig /flushdns
gpupdate /force

Poprzedni wpis Następny wpis