Obsah

Samba + LDAP

V tomto článku shrnuji kompletní instalaci Samby s LDAPem v NT doméně. Vzorem mi byl dokument SAMBA3-LDAP-PDF Howto, který již není na internetu k nalezení. Dokument není vázán na žádnou distribuci, možná ale narazíte na rozdíly, takže mi prosím napište (kontakt) a já rád zanesu všechny připomínky.

Instalace balíčků

Budou potřeba tyto balíčky:

Konfigurace LDAPu

Je nutné nakonfigurovat několik věcí: Samba schéma (obvykle je defaultně aktivováno), nastavit DN a nakonec zkontrolovat konfiguraci. První úkon je snadný, je třeba nechat načíst schémata core, cosine, inetorgperson, nis a samba. Toto se provede v konfiguraci /etc/openldap/slapd.conf.

Ještě jednou zkontrolujte, zda je includováno Samba schéma příkazem include (distribuce Red Hat inkludují vše, ale například SUSE jen základ). Musí být zavedeny minimálně schémata nis a samba3, naopak nesmí být zaveden modul rfc2307bis (jinak smbldap-populate hází chybu no global superior – v distribucích SUSE tento modul je implicitně zaveden). Nastavení indexů by mělo být:

index   objectClass     eq
index cn                      pres,sub,eq
index sn                      pres,sub,eq
index uid                     pres,sub,eq
index displayName             pres,sub,eq
index uidNumber               eq
index gidNumber               eq
index memberUid               eq
index   sambaSID              eq
index   sambaPrimaryGroupSID  eq
index   sambaDomainName       eq
index   default               sub

Na stejném místě je třeba také nastavit hodnoty rootdn a nastavit heslo rootpw. K tomuto účelu je nejvhodnější nechat si heslo vygenerovat v SSHA formátu příkazem

#  slappasswd -h {SSHA} -s tajne_heslo

Všimněte si mezery na začátku příkazu (tak se řádek obvykle nedostane do historie).

V souboru slapd.access.conf (nebo slapd.acl – případně některé distribuce toto mají přímo v souboru slapd.conf) zkontrolovat, zda je povolen access to attrs=userPassword, SambaLMPassword, sambaNTPassword sám sobě pro zápis a administrátorovi pro zápis.

access to attrs=userpassword,sambaLMPassword,sambaNTPassword
   by anonymous auth
   by self write
   by dn="cn=Manager,dc=firma,dc=cz" write
   by * none

access to *
    by dn="cn=Manager,dc=firma,dc=cz" write
    by users read
    by self write
    by * read

V tomto souboru také opravte větve LDAPu, v tomto návodu používám Users pro uživatele (někdy bývá nastaveno na People), Computers pro počítače v doméně (bývá někdy Hosts) a Groups pro skupiny (bývá někdy jen Group). Tohoto se držte, vznikají pak nehezké chyby a ztratíte dost času zjišťováním, proč to vlastně nejde.

Nyní můžete spustit LDAP server a nainstalovat si nějaký grafický nástroj pro práci s LDAPem, například program luma.

Konfigurace systému pro autentizaci LDAPem

Na systémech Red Hat je situace snadná, stačí spustit nástroj authconfig a nastavit LDAP (a volby jako je DN, use shadow passwords, use MD5 passwords, use LDAP, server IP).

Na jiných systémech je nutno konfigurovat soubor /etc/pam.d/system-auth (na systémech SUSE je to /etc/pam-d/common-*) a přidat tam následující řádky (ty obsahující „ldap“):

#%PAM-1.0
auth        required      pam_env.so
auth        sufficient    pam_unix.so likeauth nullok
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     sufficient    pam_unix.so
account     sufficient    pam_ldap.so
account     required      pam_deny.so

password    required      pam_cracklib.so retry=3 minlen=2  dcredit=0  ucredit=0
password    sufficient    pam_unix.so nullok use_authtok md5 shadow
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     required      pam_limits.so
session     required      pam_unix.so
session     required      pam_ldap.so

Po každé akci nezapomeňte restartovat nscd, pokud jej používáte.

Nyní nakonfigurujeme soubor /etc/ldap.conf:

host 127.0.0.1
base dc=firma,dc=cz
rootbinddn cn=Manager,dc=firma,dc=cz
nss_base_passwd ou=Users,dc=firma,dc=cz?one
nss_base_shadow ou=Users,dc=firma,dc=cz?one
nss_base_group ou=Groups,dc=firma,dc=cz?one
nss_base_hosts ou=Computers,dc=firma,dc=cz?one
ssl off
pam_password md5

Věnujte zvýšenou pozornost volbám nss_base_, protože někdy tam bývá přednastavena hodnota People místo Users. Již několikrát jsem se napápil, když pak klient hledal ve špatné větvi LDAPu. Musí tam být Users!

Do souboru /etc/ldap.secret napíšeme na jednom řádku heslo pro uživatele Manager, pod kterým se bude autorizivat root. Toto heslo později do LDAPu uložíme, mějte na paměti, že soubor musí mít práva 600 (root:root)!

A nyní musíte nastavit /etc/nsswitch.conf a přidat tam hodnoty pro ldap:

passwd:         files compat ldap
shadow:         files ldap
group:          files compat ldap

Pro jistotu restartujte nscd a vyzkoušejte, zda NSS funguje:

# getent passwd tberan
tberan:x:580:580:Tomas Beran:/home/tberan:/bin/csh

Konfigurace Samby

Probíhá v adresáři /etc/samba. Nejprve smb.conf, soubor projděte a upravte dle požadavků:

[global]
# jmeno domeny
workgroup = MYDOMAIN
# jmeno stroje ve win siti
netbios name = MYSERVER
# mapovani uzivatelu (root=>Administrator)
username map = /etc/samba/smbusers
# zmena hesla ve LDAPU = zmena v UNIXu
unix password sync = Yes
# logovani
log level = 2
syslog = 0
log file = /var/log/samba/log.%m
max log size = 2000
# ponechte, pokud mate na serveru spravny cas
time server = Yes
# nutne nastaveni domeny
domain logons = Yes
domain master = Yes
os level = 65
preferred master = Yes
wins support = yes
winbind nested groups = no
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
logon script = logon.bat
logon drive = H:
logon home = \\%L\homes
logon path = \\%L\profiles\%U
# spravna cestina (prepokladam UTF-8 na strane serveru UNIX)
mangling method = hash2
Dos charset = 852
Unix charset = UTF-8
# LDAP
passdb backend = ldapsam:ldap://127.0.0.1/
ldap admin dn = cn=Manager,dc=firma,dc=cz
ldap suffix = dc=firma,dc=cz
ldap group suffix = ou=Groups
ldap user suffix = ou=Users
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
# cesta k nastroji pro zmenu hesla
passwd program = /usr/sbin/smbldap-passwd -u %u
# opravte pro svou distribuci
passwd chat = "Changing UNIX password for*\nNew password*" %n\n "*Retype new password*" %n\n"
# cesty k dalsim nastrojum
add user script = /usr/sbin/smbldap-useradd -m "%u"
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'
dont descend = /proc,/dev,/etc,/lib,/lost+found,/initrd
# guest uzivatel na UNIXu
guest account = nobody
# masky pro vytvyreni (je to komplement)
#create mask = 0744
#directory mask = 0755

# printers configuration
load printers = Yes
printing = cups
printcap name = cups
show add printer wizard = yes

[netlogon]
path = /home/_samba/netlogon/
browseable = No
read only = yes
#valid users = %U @"Domain Admins"

[profiles]
path = /home/_samba/profiles
read only = no
create mask = 0600
directory mask = 0700
browseable = Yes
guest ok = Yes
profile acls = yes
nt acl support = yes
#valid users = %U @"Domain Admins"

[printers]
comment = Network Printers
guest ok = yes
printable = yes
path = /home/_samba/spool/
browseable = No
read only  = Yes

[print$]
path = /home/_samba/printers
guest ok = No
browseable = Yes
read only = Yes
valid users = @"Print Operators"
write list = @"Print Operators"
create mask = 0664
directory mask = 0775

[public]
path = /home/_samba/public
comment = Public files
writable = yes
public = yes
guest ok = yes
guest only = yes
browsable = yes

[homes]
comment = Home Directories
browseable = yes
writable = yes

#vfs objects = vscan-clamav
#vscan-clamav: config-file = /etc/samba/vscan-clamav.conf

Poslední dva řádky odkomentujte jen když chcete aktivovat podporu antiviru ClamAV (může výrazně zpomalit výkon serveru). Nyní vytvořte příslušné adresáře v /home/_samba:

Všechny adresáře musejí mít práva nastavena na 777 a adresář profiles dokonce 1777!

mkdir netlogon && chown root:"Domain Admins" netlogon && chmod 775 netlogon
mkdir printers && chown root:"Domain Admins" printers && chmod 775 printers
mkdir profiles && chown root:"Domain Admins" profiles && chmod 1777 profiles 
mkdir spool && chmod 777 spool

Zkontrolujte, zda v souboru /etc/samba/smbusers jsou tyto aliasy:

root = administrator admin
nobody = guest pcguest smbguest

Do adresáře netlogon můžete umístit logon.bat, ve kterém můžete nadefinovat disky (pozor, soubor musí být CR/LF):

NET USE Q: \\MYSERVER\ISO9001_QA
NET TIME \\MYSERVER /SET /YES

Nyní je třeba nastavit heslo pro účet manager, které jsme jsme ukládali výše v textu do souboru slapd.conf (tajne_heslo).

#  smbpasswd -w tajne_heslo

Nyní můžete otestovat syntaxi konfigurace:

# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[netlogon]"
Processing section "[profiles]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[public]"
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC

Nastartujte Sambu a počkejte pár minut, než se pustíte do další práce (to není vtip, fakt si dejte cígo nebo kafe).

Nastavení smbldap-tools

Tyto nástroje zpřístupňují LDAP pro balík Samba. Nejprve si zjistíme unikátní SID identifikátor:

# net getlocalsid

Nastavte jej v konfiguračním souboru /etc/smbldap-tools/smbldap.conf do proměnné SID, nastavte také hodnoty sambaDomain, suffix, usersdn, computersdn, groupsdn (pozor abyste nezaměnili People za Users – používejte buď to nebo to). Ještě jednou připomínám, abyste vyplnili správné větve pro uživatele, skupiny a počítače – doporučuji hodnoty Users, Groups a Computers.

V tomto souboru také doporučuji nastavit volbu hash_encrypt na CRYPT, protože některé starší distribuce nezvládají novější SSHA.

Podobně v souboru smbldap_bind.conf nastavte heslo pro účet Manager. Pozor – zde nemůžete použít hashed hesla, pouze cleartext. Výše jsem uváděl tajne_heslo – to je ono.

Nyní vytvoříme struktury v LDAPu skriptem smbldap-populate. Ten vypíše několik hlášek o vytvoření struktur a zeptá se na heslo domain roota. Obvykle nastavuji stejné heslo, jako pro Managera.

# smbldap-populate

Nyní je třeba vytvořit hlavní účty sloužící ke správě. Vytvořte soubor smbldap-dsa.ldif:

dn: ou=DSA,dc=firma,dc=cz
objectClass: top
objectClass: organizationalUnit
ou: DSA
description: security accounts for LDAP clients

dn: cn=samba,ou=DSA,dc=firma,dc=cz
objectclass: organizationalRole
objectClass: top
objectClass: simpleSecurityObject
userPassword: tajne_heslo
cn: samba

dn: cn=nssldap,ou=DSA,dc=firma,dc=cz
objectclass: organizationalRole
objectClass: top
objectClass: simpleSecurityObject
userPassword: tajne_heslo
cn: nssldap

dn: cn=smbldap-tools,ou=DSA,dc=firma,dc=cz
objectclass: organizationalRole
objectClass: top
objectClass: simpleSecurityObject
userPassword: tajne_heslo
cn: smbldap-tools

Nyní proveďte (příkaz se zeptá na heslo roota, které jste nastavovali dříve)

# ldapadd -x -h localhost -D "cn=Manager,dc=firma,dc=cz" -f smbldap-dsa.ldif -W

a nastavte těmto účtům vlastní hesla. Pro přehlednost doporučuji pořád jedno a to samé heslo:

#  ldappasswd -x -h localhost -D "cn=Manager,dc=firma,dc=cz" \
-s tajne_heslo -W cn=samba,ou=DSA,dc=firma,dc=cz

Vytváření uživatelů

Je už snadné:

# smbldap-useradd -m user1
# smbldap-passwd user1

Otestujte, zda se můžete do systému přihlásit sshčkem na tohoto uživatele. Pokud nechcete, aby se uživatelé mohli přihlašovat, je nutné nastavit hodnotu loginShell na /bin/false.

Migrace uživatelů

Můžete také uživatele migrovat ze standardních unixových souborů passwd a shadow (včetně hesel). V adresáři /usr/share/doc/smbldap-tools najdete skripty pro migraci z passwd/shadow souborů. Užití je snadné, jen snad podotknu, že musíte přidat parametr -a, aby nástroj vytvořil Samba classy. Příklad:

# ./smbldap-migrate-unix-accounts -a -P ./passwd -S ./shadow -v

Má to však jednu nevýhodu, hesla se importují jen pro PAM, hesla do Samby nejsou tímto nástrojem nastavena. Tudíž je nutné pro všechny uživatele nastavit hesla pomocí smbldap-passwd! Stejně tak musíte vytvořit uživatelské adresáře v /home/Users a nastavit jim správná práva.

Můžete například využít tento skript:

USERS=(
user1
user2
atd
)
PASSWORD=test

for USER in "${USERS[@]}"; do
        echo "Setting user $USER"
        # password
        echo -e "qcm\nqcm\n"|smbldap-passwd $USER >/dev/null
        # group
        smbldap-usermod -g "Domain Users" $USER
        # homedir
        mkdir /home/Users/$USER 2>/dev/null
        chown -R $USER:"Domain Users" /home/Users/$USER
        chmod -R 755 /home/Users/$USER
done

Závěr

Nezapomeňte vždy restartovat Sambu a LDAP, pokud změníte konfiguraci. Pakliže něco zkazíte a potřebujete znovu zinicializovat databázi, vypněte LDAP server a smažte obsah adresáře /var/lib/ldap.

Pokračovat můžete v konfiguraci pošty, antispamu a antiviru.