В началоСетевые сервисы → Руководство по настройке Samba в режиме PDC с использованием LDAP
Gentoo-doc HOME Пред.: Файл сервер Samba в домене Win2kВ началоУровень выше: Сетевые сервисыСлед.: Мониторинг работы системы

9. Руководство по настройке Samba в режиме PDC с использованием LDAP

9.1. Устанавливаемые пакеты

Установим нужные пакеты:

# USE="ldap acl ldapsam pam gdbm samba ssl tcpd winbind" emerge samba openldap acl nss_ldap pam_ldap

ВАЖНО: Версия nss_ldap должна быть не ниже 250-r1 (>=sys-auth/nss_ldap-250-r1)

9.2. OpenLDAP

Конфигурирование OpenLDAP

Для примера используется домен amber.global.com который является дочерним доменом домена global.com, который работает под управлением Win2003 Server.

Примечание: Не решенной задачей осталось создание доверительных отношений между доменами и включение домена amber в лес global.com

Файл: /etc/openldap/slapd.conf

include /etc/openldap/schema/core.schema

 include /etc/openldap/schema/cosine.schema

 include /etc/openldap/schema/inetorgperson.schema

 include /etc/openldap/schema/misc.schema

 include /etc/openldap/schema/nis.schema

 include /etc/openldap/schema/openldap.schema

 include /etc/openldap/schema/samba.schema

 pidfile                        /var/run/openldap/slapd.pid

 argsfile                /var/run/openldap/slapd.args

 access to dn.base=""

                by self write

                by * auth

 access to attr=userPassword

                by self write

                by * auth

 access to attr=shadowLastChange

                by self write

                by * read

 access to *

                by * read

                by anonymous auth

 #loglevel 1

 database        ldbm

 suffix          "dc=amber,dc=global,dc=com"

 rootdn          "cn=Manager,dc=amber,dc=global,dc=com"

 # Пароль rootpw лучше всего указывать в зашифрованном виде.

 # Для генерации шифрованного пароля используйте утилиту slappasswd

 # Например: slappasswd -h {MD5}

 # rootpw = secret

 rootpw                {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==

 directory        /var/lib/openldap-ldbm

 index objectClass           eq

 index cn                    eq,subinitial

 index sn                    eq,subinitial

 index uid                   eq,subinitial

 index displayName           eq,subinitial

 index uidNumber             eq

 index gidNumber             eq

 index memberUID             eq

 index sambaSID              eq

 index sambaPrimaryGroupSID  eq

 index sambaDomainName       eq

Файл: /etc/openldap/ldap.conf

HOST 127.0.0.1

BASE dc=sanaa,dc=global,dc=com

Проверяем разрешения на каталоги /var/lib/openldap-*

ls -la /var/lib/

ВАЖНО:

drwx------   2 ldap     ldap      104 Июн  8 18:31 openldap-data

drwx------   2 ldap     ldap       72 Июн  8 18:31 openldap-ldbm

drwx------   2 ldap     ldap       72 Июн  8 18:31 openldap-slurp

9.3. Запуск сервера OpenLDAP

пока работаем без шифрования трафика, так как сервер LDAP и SAMBA работают на одном сервере, подправляем конфиг чтобы LDAP слушал 389 порт только на localhost.

Файл: /etc/conf.d/sldap

# conf.d file for the openldap-2.1 series

#

# To enable both the standard unciphered server and the ssl encrypted

# one uncomment this line or set any other server starting options

# you may desire.

#

# OPTS="-h 'ldaps:// ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

OPTS="-h 'ldap://127.0.0.1'"

и запускаем OpenLDAP

/etc/init.d/slapd start

9.4. SAMBA

Миграция OpenLDAP

Существует 2 пути создания учетных записей пользователей: домен уже существует и создание нового домена. В первом случае самбу нужно настроить в режиме BDC, перенести все учетные записи, и потом изолировав PDC, перезапустить самбу в режиме PDC. Во втором случае все еще проще, самбу сразу запускаем в режиме PDC и создаем стандарные учетные записи при помощи замечательного пакета smbldap-tools.

emerge smbldap-tools

/etc/init.d/samba start

Code: configure.pl

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

       smbldap-tools script configuration

       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Before starting, check

 . if your samba controller is up and running.

 . if the domain SID is defined (you can get it with the 'net getlocalsid')

 . you can leave the configuration using the Crtl-c key combination

 . empty value can be set with the "." character

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Looking for configuration files...

Samba Configuration File Path [/etc/samba/smb.conf] >

The default directory in which the smbldap configuration files are stored is shown.

If you need to change this, enter the full directory path, then press enter to continue.

Smbldap-tools Configuration Directory Path [/etc/smbldap-tools/] >

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Let's start configuring the smbldap-tools scripts ...

. workgroup name: name of the domain Samba act as a PDC

  workgroup name [amber] >

. netbios name: netbios name of the samba controler

  netbios name [neptun] >

. logon drive: local path to which the home directory will be connected

 (for NT Workstations). Ex: 'H:'

  logon drive [U:] >

. logon home: home directory location (for Win95/98 or NT Workstation).

  (use %U as username) Ex:'\\neptun\%U'

  logon home (press the "." character if you don't want homeDirectory) [\\%L\users\%U] >

. logon path: directory where roaming profiles are stored. Ex:'\\neptun\profiles\%U'

  logon path (press the "." character if you don't

  want roaming profile) [\\%L\Profiles\%a\%U] >

. home directory prefix (use %U as username) [/home/%U] >

. default users' homeDirectory mode [700] >

. default user netlogon script (use %U as username) [] >

   default password validation time (time in days) [45] > 900

. ldap suffix [dc=amber,dc=global,dc=com] >

. ldap group suffix [ou=Groups] >

. ldap user suffix [ou=Users] >

. ldap machine suffix [ou=Users] >

. Idmap suffix [ou=Idmap] >

. sambaUnixIdPooldn: object where you want to store the next uidNumber

  and gidNumber available for new users and groups

  sambaUnixIdPooldn object (relative to ${suffix}) [sambaDomainName=amber] >

. ldap master server: IP adress or DNS name of the master (writable) ldap server

  ldap master server [127.0.0.1] >

. ldap master port [389] >

. ldap master bind dn [cn=Manager,dc=amber,dc=global,dc=com] >

. ldap master bind password [] >  

. ldap slave server: IP adress or DNS name of the slave ldap server: can also

  be the master one

  ldap slave server [127.0.0.1] >

. ldap slave port [389] >

. ldap slave bind dn [cn=Manager,dc=amber,dc=global,dc=com] >

. ldap slave bind password [] >  

. ldap tls support (1/0) [0] >

. SID for domain amber: SID of the domain (can be obtained with 'net getlocalsid neptun')

  SID for domain amber [S-1-5-21-1918777035-593721947-2697221154] >

. unix password encryption: encryption used for unix passwords

  unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA) [SSHA] > MD5

. default user gidNumber [513] >

. default computer gidNumber [515] >

. default login shell [/bin/bash] >

. default skeleton directory [/etc/skel] >

. default domain name to append to mail adress [] >

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

backup old configuration files:

  /etc/smbldap-tools/smbldap.conf->/etc/smbldap-tools/smbldap.conf.old

  /etc/smbldap-tools/smbldap_bind.conf->/etc/smbldap-tools/smbldap_bind.conf.old

writing new configuration file:

  /etc/smbldap-tools/smbldap.conf done.

  /etc/smbldap-tools/smbldap_bind.conf done.

Если мы не хотим, что бы у всех пользователей профили были перемещаемыми, то в файле /etc/smbldap-tools/smbldap.conf установим следующее значение: Файл: /etc/smbldap-tools/smbldap.conf

 ...

 userProfile=""

 ...

 

Инициализируем каталоги самбы в LDAP:

smbldap-populate -a Administrator -k 0 -m 0

Конфигурация SAMBA

Файл: /etc/samba/smb.conf

[global]

        workgroup = amber

        netbios name = neptun

        realm = amber.global.com

        nt acl support = yes

        acl compatibility = win2k

        map acl inherit = yes

        server string = Samba Server %v

        interfaces = eth0

        bind interfaces only = yes

        hosts allow = 192.168.7. 127.

        log file = /var/log/samba/log.%m

        debug level = 9

        max log size = 500

        socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192

        security = user

        os level = 250

        passdb backend = ldapsam:"ldap://127.0.0.1/"

        enable privileges = yes

       

        passwd program = /usr/sbin/smbldap-passwd "%u"

        passwd chat = *new*password* %n\n *new*password* %n\n *successfully*

        passdb expand explicit = no

        unix password sync = no

        ldap passwd sync = no

       

        ldap suffix = dc=amber,dc=global,dc=com

        ldap admin dn = cn=Manager,dc=amber,dc=global,dc=com

        ldap user suffix = ou=Users

        ldap group suffix = ou=Groups

# Т.к. для самбы компьютеры и пользователи — одно и то же,

# и искать она в дальнейшем записи компьютеров будет в пользователях,

# то для избежания дальнейших проблем при добавлении рабочих станций

# к домену мы вместо следующей строки

#

#        ldap machine suffix = ou=Computers

#

# напишем другую:

        ldap machine suffix = ou=Users

        ldap idmap suffix = ou=Idmap

        idmap backend = ldapsam:ldap://127.0.0.1/

        idmap uid = 10000-20000

        idmap gid = 10000-20000

       

        ldap delete dn = Yes

        ldap ssl = no

       

       

        add user script = /usr/sbin/smbldap-useradd -n -a "%u"

        delete user script = /usr/sbin/smbldap-userdel "%u"

       

        add group script = /usr/sbin/smbldap-groupadd -p "%g"

        delete group script = /usr/sbin/smbldap-userdel "%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"

       

       

        add machine script = /usr/sbin/smbldap-useradd -w "%u"

       

        #PDC

        domain master = yes

        preferred master = yes

        #BDC

#        domain master = no

#        preferred master = no

        domain logons = Yes

       

        logon script =

# Если хотите, что бы профили всех пользователей были перемещаемыми

# и хранились на сервере (со всеми гигабайтами фильмов и личных фотографий)

# то укажите такое значение следующего параметра:

#

#        logon path = \\%L\Profiles\%a\%U

#

# Если вы не хотите гонять профили по сети, оставьте значение пустым,

# (но ни в коем случае не комментируйте эту строку, она просто получит

# значение по умолчанию), вот так:

        logon path =

        logon drive = U:

        logon home = \\%L\users\%U

       

       

#============================ Share Definitions ==============================

[netlogon]

    comment = Network Logon Service

    path = /var/lib/samba/netlogon

    browseable = yes

    guest ok = yes

    writable = no

    share modes = no

[Profiles]

    admin users = admin

    create mode = 600

    directory mode = 700

    path = /var/lib/samba/profiles

    browseable = yes

    guest ok = yes

    writable = yes

[homes]

  comment = Home Directories

  browseable = no

  read only = no

[public]

  path = /pub

  guest ok = yes

  read only = no

[users]

  path = /home/users

  writable = yes

  printable = no

 

Добавим запуск winbind с самбой (если нужно): Файл: /etc/conf.d/samba

 ...

 daemon_list="smbd nmbd winbind"

 ...

 

Введём пароль рабочей станции:

smbpasswd -w secret

Введём контроллёр домена, собственно в домен

net rpc join -S neptun -U Administrator

9.5. Настройка системы на авторизацию в LDAP

--ladserg 14:05, 28 июля 2006 (UTC) У меня честно говоря не получилось сделать авторизацию пользователей samba через LDAP без настройки поддержки авторизации системных пользователей в LDAP, пришлось настраивать и это.

Сначала поправим файл /etc/ldap.conf, приведя его примерно к следующему виду:

Файл: /etc/ldap.conf

 host 127.0.0.1

 base dc=amber,dc=global,dc=com

 ldap_version 3

 rootbinddn cn=Manager,dc=amber,dc=global,dc=com

 bind_timelimit 10

 bind_policy soft

 pam_filter objectClass=posixAccount

 pam_password exop

 nss_base_passwd         ou=Users,dc=tty,dc=perm,dc=ru?one

 nss_base_shadow         ou=Users,dc=tty,dc=perm,dc=ru?one

 nss_base_group          ou=Groups,dc=tty,dc=perm,dc=ru?one

 nss_base_hosts          ou=Hosts,dc=tty,dc=perm,dc=ru?one

 nss_base_services       ou=Services,dc=tty,dc=perm,dc=ru?one

 nss_base_networks       ou=Networks,dc=tty,dc=perm,dc=ru?one

 nss_base_protocols      ou=Protocols,dc=tty,dc=perm,dc=ru?one

 nss_base_rpc            ou=Rpc,dc=tty,dc=perm,dc=ru?one

 nss_base_ethers         ou=Ethers,dc=tty,dc=perm,dc=ru?one

 nss_base_netmasks       ou=Networks,dc=tty,dc=perm,dc=ru?one

 nss_base_bootparams     ou=Ethers,dc=tty,dc=perm,dc=ru?one

 nss_base_aliases        ou=Aliases,dc=tty,dc=perm,dc=ru?one

 nss_base_netgroup       ou=Netgroup,dc=tty,dc=perm,dc=ru?one

 ssl off

 nss_reconnect_tries 4

 nss_reconnect_sleeptime 1

 nss_reconnect_maxsleeptime 16

 nss_reconnect_maxconntries 2

 

Сим мы скажем nss_ldap где и как искать зписи пользователей и групп.

Теперь сзодадим файл /etc/ldap.secret и при помощи лбого текстого редактора в plain/text виде занесём туда пароль пользователя, который выше у нас указан в опции rootbinddn, нпример пароль secret:

Файл: /etc/ldap.secret

secret

Затем непременно установим на него нужные права:

Code: Установка прав на файл /etc/ldap.secret

 #chmod 600 /etc/ldap.secret

 #chown root:root /etc/ldap.secret

Далее приведём файл /etc/pam.d/system-auth к следующему виду:

Файл: /etc/pam.d/system-auth

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

 account    required     pam_unix.so

 password   required     pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3

 password   sufficient   pam_unix.so nullok md5 shadow use_authtok

 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_mkhomedir.so skel=/etc/skel/ umask=077

 session    optional     pam_ldap.so

 

Обратите внимание на строку:

session required pam_mkhomedir.so skel=/etc/skel/ umask=077

Она заставляет систему создавать домашние каталоги для тех пользоватей у которых они ещё не созданы, при этом в новый каталог помещается содержимое директории /etc/skel/ и задаётся маска каталога 0x700

После чего правим файл /etc/nsswitch.conf, приводя его к следующему виду:

Файл: /etc/nsswitch.conf

 passwd:      files ldap

 shadow:      files ldap

 group:       files ldap

 hosts:       files dns

 networks:    files dns

 services:    db files

 protocols:   db files

 rpc:         ldap [NOTFOUND=return] db files

 ethers:      ldap [NOTFOUND=return] db files

 netmasks:    files

 netgroup:    ldap [NOTFOUND=return] files

 bootparams:  files

 automount:   files

 aliases:     files

Предупреждение: Ни в коем случае не добавляйте значение ldap к следующим базам: hosts, networks, protocols, services. Иначе вы рискуете не дождаться следующей загрузки системы.

Всё, теперь мы указали системе брать пользователей как из системных файлов, так и из LDAP.

Перезагрузим наш компьютер, дабы убедиться что система грузится нормально. Если система останавливается на загрузке udev, то смотрите ошибки в файле /etc/nsswitch.conf, может вы указали использовать ldap не в той базе.

9.6. Управление пользователями

Ранее мы установили пакет smbldap-tools, теперь рассмотрим возможность управления пользователями с его помощью.

Создание пользователя

smbldap-useradd [-o] [-a] [-b] [-w] [-i] [-u uid] [-g gid ] [-G groups,,,]

 [-n] [-d home] [-s shell] [-c gecos] [-m [-k]] [-t] [-P] [-A 0|1] [-B 0|1]

 [-C sambaHomePath] [-D sambaHomeDrive] [-E sambaLogonScript] [-F sambaProfilePath]

 [-H sambaAcctFlags] [-N surname] [-S family name] [-M local mailAddress,,,]

 [-T mailToAddress] [-?] user

Где:

 user — системное имя создаваемого пользователя

 -o   — add the user in the organizational unit (relative to the user suffix)

 -a   — is a Windows User (otherwise, Posix stuff only)

 -b   — is a AIX User

 -w   — is a Windows Workstation (otherwise, Posix stuff only)

 -i   — is a trust account (Windows Workstation)

 -u   — uid

 -g   — gid

 -G   — список групп пользователя, разделённых запятой.

 -n   — do not create a group

 -d   — домашний каталог пользователя (по умолчанию /home/имя_пользователя)

 -s   — оболочка пользователя (по умолчанию /bin/false)

 -c   — отображаемое в Windows имя пользователя

 -m   — создать домашний каталог и скопировать в него файлы из /etc/skel

 -k   — указать иной каталог, из которого будут копироваться файлы при

        создании домашнего каталога пользователя (используется с ключём -m)

 -t   — time. Wait 'time' seconds before exiting (when adding Windows Workstation)

 -P   — ends by invoking smbldap-passwd

 -A   — возможность менять пароль пользователем, значение 0 если нет, 1 если да

 -B   — пользователь должен поменять пароль, значение 0 если нет, 1 если да

 -C   — домашний каталог samba (например '\\PDC-SRV\homes')

 -D   — буква диска для монтирования домашнего каталога samba (например 'H:')

 -E   — скрипт, выполняемый при входе в систему

 -F   — каталог профиля пользователя (например '\\PDC-SRV\profiles\foo')

 -H   — sambaAcctFlags (samba account control bits like '[NDHTUMWSLKI]')

 -N   — настоящее имя пользователя (для русских ещё и отчество)

 -S   — фамилия пользователя

 -M   — local mailAddress (comma seperated)

 -T   — mailToAddress (forward address) (comma seperated)

 -?   — отобразить помощь

Например создание пользователя ladserg:

smbldap-useradd -a -c 'Serg Alex Lad' -N 'Serg Alex' -S 'Lad' -s /bin/bash ladserg

К сожалению подружить smbldap-tools с русским мне не удалось, даже при использовании кодировки UTF-8.

Итак, в приведённом выше примере будет создан пользователь с системным именем ladserg, фамилией Lad, именем Serg Alex, оболочкой /bin/bash, домашним каталогом /home/ladserg. Флаг -a укажет, что пользователь также будет являться пользователем домена.

Изменение пароля

smbldap-passwd [-s] [-u] [-h] username

Где:

 username       — имя пользователя

 -h, -?, --help — показать помощь

 -s             — обновить только samba пароль

 -u             — обновить только UNIX пароль

Например:

smbldap-passwd ladserg

После чего дважды будет запрошен пароль.

Теперь можно попробовать зайти в систему под учётной записью только что созданного пользователя.

Модификация пользователя

smbldap-usermod [-a] [-c comment] [-d home_dir] [-e expiration_date]

 [-g initial_group] [-r new_login_name] [-p passwd] [-s shell] [-u uid [ -o]] [-x]

 [-A canchange] [-B mustchange] [-C smbhome] [-D homedrive] [-E scriptpath]

 [-F profilepath] [-G group[,...]] [-H acct‐flags] [-N canonical_name]

 [-S surname] [-P] login

Где:

 -c    - Полное имя

 -d    - Домашний каталог

 -r    - новое имя пользователя (cn, sn и dn будут обновлены)

 -u    - uid

 -o    - uid может быть не уникальным

 -g    - gid

 -G    - список групп пользователя, разделённых запятой.

 -s    - оболочка

 -N    - настоящее имя пользователя (для русских ещё и отчество)

 -S    - фамилия пользователя

 -P    - ends by invoking smbldap-passwd

For samba users:

 -a    - add sambaSAMAccount objectclass

 -e    - expire date ("YYYY-MM-DD HH:MM:SS")

 -A    - возможность менять пароль пользователем, значение 0 если нет, 1 если да

 -B    - пользователь должен поменять пароль, значение 0 если нет, 1 если да

 -C    - домашний каталог samba (например '\\PDC-SRV\homes')

 -D    - буква диска для монтирования домашнего каталога samba (например 'H:')

 -E    - скрипт, выполняемый при входе в систему

 -F    - каталог профиля пользователя (например '\\PDC-SRV\profiles\foo')

 -H    - sambaAcctFlags (samba account control bits like '[NDHTUMWSLKI]')

 -I    - disable an user. Can't be used with -H or -J

 -J    - enable an user. Can't be used with -H or -I

 -M    - mailAddresses (comma seperated)

 -T    - mailToAddress (forward address) (comma seperated)

 -?|-h — отобразить помощь

Например команда:

smbldap-usermod -A 1 ladserg

Позволит пользователю ladserg менять пароль. А команда:

smbldap-usermod -a slad-adm

Добавит к учётной записи пользователя slad-adm класс sambaSAMAccount, что сделает его пользователем samba.

Удаление пользователя

smbldap-userdel [-r|-R|-?] username

Где:

 -r    удалить домашний каталог

 -R    удалить домашний каталог с запросом на удаление каждого файла

 -?    отобразить помощь

Например команда:

smbldap-userdel -r slad-adm

удалит пользователя slad-adm, и его домашний каталог.

Управление пользователями в оффтопике

Если вы вводите в домен компьютеры под управлением Windows, то вам пригодятся пара утилит, архив которых можно скачать отсюда:

ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE

Пред.: Файл сервер Samba в домене Win2kВ началоУровень выше: Сетевые сервисыСлед.: Мониторинг работы системы
В началоСетевые сервисы → Руководство по настройке Samba в режиме PDC с использованием LDAP