Am instalat un nou controler de domeniu găzduit de Samba 4.11 pe Ubuntu 20.04 (folosind pachete ubuntu). Am configurat autentificarea sistemului pentru a utiliza acreditările AD cu utilizarea winbind. Pe alte servere (membri) folosesc de obicei sssd în loc de winbind, dar înțeleg că nu pot folosi sssd pe un server care rulează samba ca DC.
La început, funcționează bine. Serverul funcționează ca DC așa cum ar trebui. Mă pot conecta cu acreditările mele AD la server cu SSH.
Problema este când mă conectez la această mașină cu Ansible. Ansible face multe conexiuni SSH una după alta (una pentru fiecare sarcină). De asemenea, se ridică ca root cu sudo aproape de fiecare dată. Când rulez playbook-ul meu, eșuează la o sarcină aleatorie din cauza acestei erori Timeout (62s) în așteptarea solicitării de escaladare a privilegiilor
. Dacă încerc să mă conectez manual la SSH în acest moment, acesta doar expiră. După câteva secunde, mă pot conecta din nou.
Problema nu apare atunci când utilizați un cont local în loc de un cont de domeniu.
Singurele jurnale relevante pe care le-am găsit sunt în log.windbindd
Buturuga:
[2021/10/12 16:06:57.312913, 5] ../../source3/winbindd/winbindd.c:1204(remove_timed_out_clients)
Client inactiv a expirat, închiderea șosetei 38, pid 568531
[2021/10/12 16:07:09.933655, 3] ../../source3/winbindd/winbindd_getpwnam.c:59(winbindd_getpwnam_send)
winbindd_getpwnam_send: [nss_winbind (567486)] getpwnam EXEMPLU\myuserid
[2021/10/12 16:07:12.326288, 5] ../../source3/winbindd/winbindd.c:1204(remove_timed_out_clients)
Client inactiv a expirat, închiderea șosetei 34, pid 568806
[2021/10/12 16:07:12.326413, 5] ../../source3/winbindd/winbindd.c:1209(remove_timed_out_clients)
Solicitarea clientului a expirat, închiderea șosetei 39, pid 568806
[2021/10/12 16:07:12.326451, 1] ../../source3/winbindd/winbindd_dual.c:337(wb_child_request_cleanup)
wb_child_request_cleanup: păstrați subreq orfan[0x563394622e40]
[2021/10/12 16:07:14.044393, 3] ../../source3/winbindd/winbindd_misc.c:429(winbindd_interface_version)
winbindd_interface_version: [nss_winbind (568806)]: solicitați versiunea interfeței (versiunea = 31)
[2021/10/12 16:07:14.044847, 3] ../../source3/winbindd/winbindd_getpwnam.c:59(winbindd_getpwnam_send)
winbindd_getpwnam_send: [nss_winbind (568806)] getpwnam EXEMPLU\myuserid
^C
Am scris un mic script care face doar un sudo la fiecare 1000ms, apoi 500ms, apoi 100ms încercând să imite ceea ce face Ansible. Am observat că procesul de samba ia aproximativ 30% CPU atunci când scriptul este setat să circule la fiecare 1000ms, 50% când scriptul rulează la 500ms și 70% când rulează la 100ms. Din păcate, nu am reușit să reproduc timeout de autentificare când rulez scriptul.
#!/bin/bash
în timp ce [ adevărat ]; do
timp sudo echo 1
somn 0.1
Terminat
Configurare Samba:
[global]
nume netbios = DC4
tărâm = AD.EXAMPLE.CA
grup de lucru = EXEMPLU
dns forwarder = 10.3.0.3
rol server = controler de domeniu Active Directory
idmap_ldb:utilizați rfc2307 = da
directorul pid = /run/samba
director de stat = /data/samba
binddns dir = /data/samba/bind-dns
directorul socket ntp signd = /data/samba/ntp_signd
private dir = /data/samba/private
calea usershare = /data/samba/usershares
tls activat = da
tls keyfile = tls/key.pem
tls certfile = tls/cert.pem
tls cafile = /usr/local/share/ca-certificates/internal_ca.crt
nivelul log = 5
dimensiune maximă a jurnalului = 1000000
scriptul de verificare a parolei = python3 /usr/local/bin/check_password_hibpwnd.py
permit actualizări dns = nonsecure
ntlm auth = da
shell de șablon = /bin/bash
template homedir = /home/ad.example.ca/%u
# a încercat acest lucru pentru a reduce sarcina, fără efecte
conectare offline winbind = da
winbind enumerare utilizatori = nr
winbind enum groups = nr
grupuri imbricate winbind = false
[netlogon]
cale = /data/samba/sysvol/ad.example.ca/scripts
numai citire = Nu
[sysvol]
cale = /data/samba/sysvol
numai citire = Nu
nsswitch config (tocmai am adăugat winbind
pentru passwd
și grup
intrări):
# /etc/nsswitch.conf
#
# Exemplu de configurare a funcționalității GNU Name Service Switch.
# Dacă aveți instalate pachetele `glibc-doc-reference' și `info', încercați:
# `info libc "Name Service Switch"' pentru informații despre acest fișier.
passwd: fișiere systemd winbind
grup: fișiere systemd winbind
umbră: fișiere
gshadow: fișiere
gazde: fișiere dns
rețele: fișiere
protocoale: fișiere db
servicii: fișiere db
eteri: fișiere db
rpc: fișiere db
netgroup: nis
Actualizați! Am descoperit că configurarea sudo pentru a nu necesita parola utilizatorului pentru a crește privilegiul funcționează bine. Aceasta nu este o soluție acceptabilă, dar poate că aceasta poate spune ceva cuiva care ar putea ajuta la diagnosticarea problemei.