====== 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 ([[wiki:kontakt]]) a já rád zanesu všechny připomínky.
===== Instalace balíčků =====
Budou potřeba tyto balíčky:
* **Red Hat**: openldap openldap-servers openldap-clients samba samba-client samba-common smbldap-tools
* **Debian**: slapd samba samba-doc smbfs ldap-utils ldapscripts libnss-ldap libpam-ldap nscd libnet-ldap-perl libcrypt-smbhash-perl smbldap-tools
* **SUSE**: smbldap-tools balík existuje až od verze 10.1, ve starších verzích jsou alespoň zdrojové kódy v samba-doc (závislot na balíkách perl-ldap, perl-Crypt-SmbHash, Unicode::Map a Unicode::MapUTF8 -- tyto je nutno instalovat v SUSE ze cpanu, jsou tam další závislosti, použijte nástroj //cpan install//)
===== 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'':
* netlogon -- do tohoto adresáře umístěte netlogon.bat, ve kterém můžete namapovat disky. Lze také vytvořit pro každou stanici nebo každého uživatele jiný logon skript (použijete proměnnou Samby pro název souboru -- například ''%U'');
* printers -- ovladače tiskáren pro Windows;
* profiles -- cestovní profily;
* spool -- tisková fronta.
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 [[postfix_dovecot_pam_nss|konfiguraci]] pošty, antispamu a antiviru.
{{tag>linux}}
~~DISCUSSION~~