Domů > Linuxové zápisky pro správce > Samba jako Windows doména (LDAP)

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
...

/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

http://luma.sourceforge.net/

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í

http://www.abclinuxu.cz/blog/mizoun/2009/3/samba-plus-ldap
https://help.ubuntu.com/community/OpenLDAP-SambaPDC-OrgInfo-Posix

  1. 19.02.2013 na 06:35 | #1

    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?

  1. Žádné zpětné odkazy