Samba jako Windows doména (LDAP)
V tomto návodu si ukážeme, jak nainstalovat ověřování vůči LDAP serveru vč. nastavení Samby jako PDC (doménového kontroleru).
Výchozí stav
Základní instalace Debianu.
Příprava
Pokud jej nemáme, nainstalujeme si OpenSSH server pro vzdálený terminálový přístup
apt-get install openssh-server
Zkontrolujeme název serveru
hostname -f server.example.loc
LDAP
Instalace
Nainstalujeme LDAP server vč. skriptů na administraci a zadáme heslo admina
apt-get install slapd ldap-utils
Schéma pro Sambu
Je také potřeba nainstalovat schéma pro Sambu, tzn. struktury informací potřebné pro Windows PDC.
Stáhneme balíček s dokumentací, jehož součástí jsou i potřebná schémata
apt-get install samba-doc
a ty následně rozbalíme
tar xvzf /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema
Nastavení
Vygenerujeme SSHA klíče admin hesla, které potřebujeme následně pro zápis do konfiguračního souboru
slappasswd New password: Re-enter new password: {SSHA}pIvoDvRnYaqX7nfwlMIZD8vjxMRXC6Rn
a zeditujeme /etc/ldap/slapd.conf
... # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/samba.schema # The base of your directory in database #1 suffix "dc=example,dc=cz" # rootdn directive for specifying a superuser on the database. This is needed # for syncrepl. rootdn "cn=admin,dc=example,dc=cz" rootpw {SSHA}pIvoDvRnYaqX7nfwlMIZD8vjxMRXC6Rn ...
a /etc/ldap/ldapd.conf
... BASE dc=example,dc=cz ...
Restart a kontrola nastavení
Provedeme tedy restart LDAP serveru
/etc/init.d/slapd restart
a podíváme se, zda je databáze funkční
ldapsearch -xLLL -b "dc=example,dc=cz" dn: dc=example,dc=cz objectClass: top objectClass: dcObject objectClass: organization o: example.cz dc: example dn: cn=admin,dc=example,dc=cz objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator
V tuto chvíli by měla obsahovat jen uzivatele „admin“
Samba
Instalace
Poku ji ještě nemáme nainstalovanou, učiníme tak ted
apt-get install samba smbclient libpam-smbpass
Připravíme si sdílené adresáře
mkdir -v /var/lib/samba/profiles chmod 777 /var/lib/samba/profiles mkdir -v -p /var/lib/samba/netlogon
Zeditujeme /etc/samba/smb.conf
, přidáme vše potřebné
[global] # Domain name .. workgroup = EXAMPLE # Server name - as seen by Windows PCs .. netbios name = SERVER # Be a PDC .. domain logons = Yes domain master = Yes # Be a WINS server .. wins support = true obey pam restrictions = Yes dns proxy = No os level = 35 log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d pam password change = Yes # Allows users on WinXP PCs to change their password when they press Ctrl-Alt-Del unix password sync = no ldap passwd sync = yes # Printing from PCs will go via CUPS .. load printers = yes printing = cups printcap name = cups # Use LDAP for Samba user accounts and groups .. passdb backend = ldapsam:ldap://localhost # This must match init.ldif .. ldap suffix = dc=example,dc=cz # The password for cn=admin MUST be stored in /etc/samba/secrets.tdb # This is done by running 'sudo smbpasswd -w'. ldap admin dn = cn=admin,dc=example,dc=cz # 4 OUs that Samba uses when creating user accounts, computer accounts, etc. # (Because we are using smbldap-tools, call them 'Users', 'Computers', etc.) ldap machine suffix = ou=Computers ldap user suffix = ou=Users ldap group suffix = ou=Groups ldap idmap suffix = ou=Idmap # Samba and LDAP server are on the same server in this example. ldap ssl = no # Scripts for Samba to use if it creates users, groups, etc. add user script = /usr/sbin/smbldap-useradd -m '%u' delete user script = /usr/sbin/smbldap-userdel %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' # Script that Samba users when a PC joins the domain .. # (when changing 'Computer Properties' on the PC) add machine script = /usr/sbin/smbldap-useradd -w '%u' # Values used when a new user is created .. # (Note: '%L' does not work properly with smbldap-tools 0.9.4-1) logon drive = H: logon home = server%U logon path = serverProfiles%U logon script = logon.bat # This is required for Windows XP client .. server signing = auto server schannel = Auto
a otestujeme konfiguraci
testparm
Dále upravíme /etc/samba/smbusers
root = administrator admin nobody = guest pcguest smbguest
a restartujeme Sambu
/etc/init.d/samba restart
Vložíme admin LDAP heslo do Samby
smbpasswd -W Setting stored password for "cn=admin,dc=example,dc=cz" in secrets.tdb New SMB password: Retype new SMB password:
Kontrola nastavení
smbclient -L server -U anonymous% Anonymous login successful Domain=[EXAMPLE] OS=[Unix] Server=[Samba 3.2.5] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers Share IPC$ IPC IPC Service (Samba 3.2.5) Anonymous login successful Domain=[EXAMPLE] OS=[Unix] Server=[Samba 3.5.6] Server Comment --------- ------- SERVER Samba 3.5.6 Workgroup Master --------- ------- EXAMPLE SERVER
smbldap-tools
Instalace
Jedná se o balík scriptů pro připravu LDAP databáze pro Sambu, práce s uživateli, skupinami Samby, atd.
Obsahuje tyto příkazy:
# smbldap-groupadd - add a new group # smbldap-groupdel - delete a group # smbldap-groupmod - modify a group, including adding or removing members # smbldap-groupshow - show the properties of a group, including members # smbldap-passwd - change a user password # smbldap-populate - populate LDAP database, provide stucture necessary for Samba - see below # smbldap-useradd - add a new user account # smbldap-userdel - delete a user account # smbldap-userlist - list users or machines with some info # smbldap-usershow - show information for one user account # smbldap-usermod - modify the Unix and Samba properties of a user account (many properties) # smbldap-userinfo - modify gecos information in a user account (only a few properties)
Mohlo by se hodit i toto:
smbldap-groupmod -m user group # přidá usera do LDAP skupiny group smbldap-groupmod -x user group # odebere usera z LDAP skupiny group
Konfigurace
Pro kontrolu si zjistíme SID domény, bude obsažen v konfiguračním souboru
net getlocalsid SID for domain SERVER is: S-1-5-21-1241301704-697112910-253100804
Rozbalíme soubor /usr/share/doc/smbldap-tools/configure.pl.gz
tar xvzf /usr/share/doc/smbldap-tools/configure.pl.gz
nastavíme práva pro spuštění
chmod +x configure.pl
a spustíme
./configure.pl.gz
Tento script vytvoří soubory v adresáři /etc/smbldap-tools
, kde je uložena konfigurace pro smbldap-tools
. Zkontrolujeme nastavení – vetšinou nabízené výchozí hodnoty při běhu scriptu jsou správné.
Příprava LDAP databáze pro Sambu
vygenerujeme potřebné nastavení Samby v LDAP databázi, vytvoříme základní uživatele a skupiny potřebné pro Sambu v PDC módu. POZOR: Zde se zadává heslo uživatele root, nikoliv LDAP admin!
smbldap-populate Populating LDAP directory for domain EXAMPLE(S-1-5-21-1241301704-697112910-253100804) (using builtin directory structure) entry dc=example,dc=cz already exist. adding new entry: ou=Users,dc=example,dc=cz adding new entry: ou=Groups,dc=example,dc=cz adding new entry: ou=Computers,dc=examples,dc=cz adding new entry: ou=Idmap,dc=example,dc=cz adding new entry: uid=root,ou=Users,dc=example,dc=cz adding new entry: uid=nobody,ou=Users,dc=example,dc=cz adding new entry: cn=Domain Admins,ou=Groups,dc=example,dc=cz adding new entry: cn=Domain Users,ou=Groups,dc=example,dc=cz adding new entry: cn=Domain Guests,ou=Groups,dc=example,dc=cz adding new entry: cn=Domain Computers,ou=Groups,dc=example,dc=cz adding new entry: cn=Administrators,ou=Groups,dc=example,dc=cz adding new entry: cn=Account Operators,ou=Groups,dc=example,dc=cz adding new entry: cn=Print Operators,ou=Groups,dc=example,dc=cz adding new entry: cn=Backup Operators,ou=Groups,dc=example,dc=cz adding new entry: cn=Replicators,ou=Groups,dc=example,dc=cz entry sambaDomainName=EXAMPLE,dc=example,dc=cz already exist. Updating it... Please provide a password for the domain root: Changing UNIX and samba passwords for root New password: Retype new password:
Příkaz ldapsearch -xLLL -b „dc=example,dc=cz“
, by měl již vypsat vygenerované položky v LDAP databázi.
Name Service and PAM
Instalace „Name Service and PAM“ zajisti podporu přihlášení uživatelů uložených v LDAP databázi.
apt-get install libnss-ldap libpam-ldap
Konfigurační údaje při instalaci
ldap://127.0.0.1/ dc=example,dc=cz 3 cn=admin,dc=example,dc=cz LDAP heslo !!! ne root cn=admin,dc=example,dc=cz LDAP admin heslo !!! ne root
editace /etc/nsswitch.conf
# /etc/nsswitch.conf ## example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat ldap group: compat ldap shadow: compat ldap ...
editace /etc/pam.d/common-account
... account sufficient pam_ldap.so account required pam_unix.so
editace /etc/pam.d/common-auth
... auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure editace /etc/pam.d/common-password
... password sufficient pam_ldap.so password required pam_unix.so nullok obscure md5
editace /etc/pam.d/common-account
... session sufficient pam_ldap.so session required pam_unix.so
Kontrola nastavení, vytvoření uživatele v LDAP databázi
Doporučuji po nastavení reboot serveru
shutdown -r now
Vypíšeme si skupiny z /etc/group
, ale i z LDAP databáze
getent group ... crontab:x:102: ssh:x:103: openldap:x:104: sambashare:x:105: Domain Admins:*:512:root Domain Users:*:513: Domain Guests:*:514: Domain Computers:*:515: Administrators:*:544: Account Operators:*:548: Print Operators:*:550: Backup Operators:*:551: Replicators:*:552:
vytvoříme uživatele „test“
smbldap-useradd -a -m -P test
a vypíšeme uživatele
getent passwd sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin openldap:x:102:104:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false root:x:0:0:Netbios Domain Administrator:/home/root:/bin/false nobody:x:65534:65534:nobody:/nonexistent:/bin/sh test:x:1000:513:System User:/home/test:/bin/bash
Udaje o uživatele si necháme vypsat takto
pdbedit -Lw, pdbedit -Lv test
nebo takto
smbldap-usershow test dn: uid=test,ou=Users,dc=example,dc=cz objectClass: top,person,organizationalPerson,inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount cn: test sn: test givenName: test uid: test uidNumber: 1000 gidNumber: 513 homeDirectory: /home/test loginShell: /bin/bash gecos: System User sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 displayName: test sambaSID: S-1-5-21-1241301704-697112910-253100804-3000 sambaPrimaryGroupSID: S-1-5-21-1241301704-697112910-253100804-513 sambaLogonScript: logon.bat sambaProfilePath: serverProfilestest sambaHomePath: servertest sambaHomeDrive: H: sambaLMPassword: 9FDFA4280126E140AAD3B435B51404EE sambaAcctFlags: [U] sambaNTPassword: C5CE8A3C7FF82CC9F22E0B958BA247D5 sambaPwdLastSet: 1235604253 sambaPwdMustChange: 1239492253 userPassword: {SSHA}5BWDqk4P5GzeTxaCjUOBFiD/jlhyenVV shadowLastChange: 14300 shadowMax: 45
Zkontrolujeme připojení uživatele „test“
smbclient -L server -U test Enter test's password: Domain=[EXAMPLE] OS=[Unix] Server=[Samba 3.2.5] Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers Share IPC$ IPC IPC Service (Samba 3.2.5) Anonymous login successful Domain=[EXAMPLE] OS=[Unix] Server=[Samba 3.5.6] Server Comment --------- ------- SERVER Samba 3.5.6 Workgroup Master --------- ------- EXAMPLE SERVER
Nastavení Windows klienta
Po připojení Windows XP do „Samba“ domény se vytvoří v LDAP databázi účet počítače, který bude mít název „Název počítače“ + znak „$“. V našem případě „xp$“. Domovský adresář je připojen jako disk H:. Bylo by tedy vhodné nastavit zástupce „Dokumenty“ tak, aby odkazovaly na tento disk (H:).
Ve vlastnostech počítače zadáme naší doménu „EXAMPLE“ (bez. uvozovek), potvrdíme. Budeme vyzváni k zadání uživ. jména a hesla.
-
Uživatelské jméno: serverroot
-
Heslo: heslo_doménového_admina
Vyrestartujeme Windows a přihlásíme se do domény naším uživatelem „test“.
Po přihlášení a načtení cestovního profilu zkontrolujeme, jestli se nám v „Tento počítač“ namapoval disk H:.
Grafické administrační nástroje
Administrace LDAP v textové konzoli je řekněme nekonfortní a proto jsou zde programy s GUI, které nám práci s LDAP zpříjemní. Existují pro Linux i Windows.
Linux – Luma
Instalace balíčku
apt-get install luma
Nastavení
– Network options
-
Hostname: server.example.loc
-
Port: 389
-
Encryption: No encryption
– Authentification
-
Mechanism: Simple
-
Bind as: cn=admin,dc=example,dc=cz
-
Password: heslo_LDAP_admina
– LDAP options
- Use Base DNs provided by the server
Další postřehy nebo doladění
Zde je pár postřehů a vyladění, které jsem nabyl používáním a instalací
Parametry uživatele
Výchozí hodnota shadowMax
je 45
, tzn. že po uplynutí 45 dnů je uživatel povinný změnit své heslo. Nastavuji tedy hodnotu -1
, což je neomezená doba platnosti hesla.
Samba 3.5.6 a nemožnost přihlášení
Přechodem na verzi Samby 3.5.6, jsem musel změnit parametr v /etc/smb.conf
na
server signing = disabled
jinak se nebylo možné do domény z WinXP přihlásit.
S touto verzí Samby by měly fungovat i Windows 7.
logon.bat a ntconfig.pol
Toto je skript, který se spouští na klientech po přihlášení do domény. Dá se ale nahradit o něco lepším řešením a to souborem /var/lib/samba/netlogon/ntconfig.pol
, který si vygenerujeme ve Windows programu poledit.exe
. Je to NT editor systémových politik ke stažení zde.
Přidání uživatele vč. diskové kvóty
Ukázka vytvoření nového uživatele „test“ s UID 1005
smbldap-useradd -a -m -P -u 1005 -s /bin/bash user quotatool -u user -bq 9500M -l '10000 Mb' /home
Zdroje informací
Ahoj, zkouším to podle postupu, ale nedostanu se přes „smbldap-populate“.
Populating LDAP directory for domain CHMATOS (S-1-5-21-530596446-1238131801-1816637020)
(using builtin directory structure)
Use of uninitialized value $cnsambaUnixIdPool in concatenation (.) or string at /usr/sbin/smbldap-po pulate line 444.
Use of uninitialized value $cnsambaUnixIdPool in concatenation (.) or string at /usr/sbin/smbldap-po pulate line 444.
entry dc=chmatos,dc=tk already exist.
entry ou=Users,dc=chmatos,dc=tk already exist.
entry ou=Groups,dc=chmatos,dc=tk already exist.
entry ou=Computers,dc=chmatos,dc=tk already exist.
entry ou=Idmap,dc=chmatos,dc=tk already exist.
adding new entry: uid=root,ou=Users,dc=chmatos,dc=tk
failed to add entry: objectClass: value #4 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 58.
adding new entry: uid=nobody,ou=Users,dc=chmatos,dc=tk
failed to add entry: objectClass: value #4 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 89.
adding new entry: cn=Domain Admins,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 101.
adding new entry: cn=Domain Users,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 112.
adding new entry: cn=Domain Guests,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 123.
adding new entry: cn=Domain Computers,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 134.
adding new entry: cn=Administrators,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 179.
adding new entry: cn=Account Operators,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 201.
adding new entry: cn=Print Operators,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 212.
adding new entry: cn=Backup Operators,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 223.
adding new entry: cn=Replicators,ou=Groups,dc=chmatos,dc=tk
failed to add entry: objectClass: value #2 invalid per syntax at /usr/sbin/smbldap-populate line 498 , line 234.
adding new entry: CHMATOS,dc=chmatos,dc=tk
failed to add entry: invalid DN at /usr/sbin/smbldap-populate line 498, line 240.
Please provide a password for the domain root:
/usr/sbin/smbldap-passwd: user root doesn’t exist
Nechce mě to pustit vytvořit uživatele, nevíte někdo v čem by mohl být problém?