3. Установка и настройка

Установка пакетов

Устанавливаем сервер LDAP:

$ apt-get install slapd

Отвечаем на следующие вопросы:

    DNS domain name: mydomain
    Name of organisation: My Organization
    Admin password: password
    Confirm password: password
    Allow LDAP v2: no

После первой установки slapd, в базе LDAP будет единственная запись администратора cn=admin,dc=mydomain с паролем password.

Устанавливаем phpldapadmin и apache2

$ apt-get install apache2 phpldapadmin

Устанавливаем samba

$ apt-get install samba smbclient smbfs samba-doc

Отвечаем на следующие вопросы:

    Domain Name: MYDOMAIN
    Use Password Encryption: Yes
    Modify smb.conf to use WINS settings via DHCP: No
    How to run Samba: daemons
    Create password database: Yes

Хотя созданный файл smb.conf будет изменет, на вопросы ответить придется.

Устанавливаем smbldap-tools и ldap-utils

$ apt-get install smbldap-tools ldap-utils

Настройка

Настройка slapd

  • Необходимо скопировать файл /usr/share/doc/samba-doc/example/LDAP/samba.schema.gz в папку /etc/ldap/schema/ и распаковать его.
  • В файл /etc/ldap/slapd.conf в конце списка, помеченного строкой
    # Schema and objectClass definitions
    нужно добавить строку
    include /etc/ldap/schema/samba.schema

    В результате файл slapd.conf будет выглядеть примерно так:

    # This is the main slapd configuration file. See slapd.conf(5) for more
    # info on the configuration options.

    #######################################################################
    # Global Directives:

    # Features to permit
    #allow bind_v2

    # 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

    # Where the pid file is put. The init.d script
    # will not stop the server if you change this.
    pidfile /var/run/slapd/slapd.pid

    # List of arguments that were passed to the server
    argsfile /var/run/slapd/slapd.args

    ###################################################################
    # loglevel # Logging description

    loglevel 256

    # Where the dynamically loaded modules are stored
    modulepath /usr/lib/ldap
    moduleload back_bdb

    # The maximum number of entries that is returned for a search operation
    sizelimit 500

    # The tool-threads parameter sets the actual amount of cpu's that is used
    # for indexing.
    tool-threads 1

    #######################################################################
    # Specific Backend Directives for bdb:
    # Backend specific directives apply to this backend until another
    # 'backend' directive occurs
    backend bdb
    checkpoint 512 30

    #######################################################################
    # Specific Directives for database #1, of type bdb:
    # Database specific directives apply to this databasse until another
    # 'database' directive occurs
    database bdb

    # The base of your directory in database #1
    suffix "dc=MYDOMAIN"

    # Where the database file are physically stored for database #1
    directory "/var/lib/ldap"

    # For the Debian package we use 2MB as default but be sure to update this
    # value if you have plenty of RAM
    dbconfig set_cachesize 0 2097152 0

    # Number of objects that can be locked at the same time.
    dbconfig set_lk_max_objects 1500

    # Number of locks (both requested and granted)
    dbconfig set_lk_max_locks 1500

    # Number of lockers
    dbconfig set_lk_max_lockers 1500

    # Indexing options for database #1
    index objectClass eq

    # Save the time that the entry gets modified, for database #1
    lastmod on

    # users can authenticate and change their password
    access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange
    by dn="cn=admin,dc=MYDOMAIN" write
    by self write
    by anonymous auth
    by * none

    # The admin dn has full write access, everyone else
    # can read everything.
    access to *
    by dn="cn=admin,dc=MYDOMAIN" write
    by * read

  • Для проверки нужно выполнить команду slaptest:
    $ slaptest
    config file testing succeeded

Настройка samba

  • Файл /etc/samba/smb.conf:
    # Global parameters
    [global]
    wins support = no
    protocol = NT1
    name resolve order = lmhosts host bcast
    dns proxy = no
    dos charset = CP866
    unix charset = UTF-8
    display charset = UTF-8
    workgroup = MYDOMAIN
    server string = linserver Server
    netbios name = LINSERVER
    netbios aliases = linserver
    security = users
    map acl inherit = yes
    inherit acls = yes
    inherit permissions = yes
    encrypt passwords = yes
    null passwords = yes
    enable privileges = yes

    passdb backend = ldapsam:ldap://127.0.0.1
    idmap backend = ldap:ldap://127.0.0.1
    ldap admin dn = cn=admin,dc=mydomain
    ldap suffix = dc=mydomain
    ldap machine suffix = ou=Computers
    ldap user suffix = ou=Users
    ldap group suffix = ou=Groups
    ldap passwd sync = yes
    ldap delete dn = yes
    ldap passwd sync = yes
    ldap ssl = no

    preferred master = yes
    domain master = no
    domain logons = yes

    logon path =
    logon drive = Z:
    logon home = \\%L\SYSVOL\users\%U

    add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
    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'

    interfaces = 127.0.0.0/8 eth0
    hosts allow = 127.0.0.1 192.168.0.0/255.255.255.0
    hosts deny = ALL
    map to guest = Bad User
    guest account = nobody
    log file = /var/log/samba/log.%m
    max log size = 500 # in Kb
    log level = 5
    socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
    socket address = 127.0.0.1 192.168.0.2

    printing = cups
    load printers = yes

    ####### MAIL THE ADMIN A BACKTRACE
    panic action = /usr/share/samba/panic-action %d

    [homes]
    comment = Home Directories
    guest ok = No
    browseable = No
    create mask = 0644
    directory mask = 0775
    writeable = yes
    inherit permissions = Yes

    [profiles]
    path = /home/SYSVOL/profiles
    comment = User Profiles
    guest ok = Yes
    browseable = No
    create mask = 0600
    directory mask = 0700
    writeable = Yes
    profile acls = Yes
    csc policy = disable
    force user = %U
    valid users = %U @"Domain Admins"

    [netlogon]
    comment = User Netlogon
    path = /home/SYSVOL/netlogon
    browseable = No
    write list = MYDOMAIN@"Domain Admins"

    [IPC$]
    # IPC необходимо для нормальной работы Windows-домена:
    # browse network, browse folder и прочее.
    path = /tmp
    hosts allow = 192.168.0.0/24, 127.0.0.1
    hosts deny = 0.0.0.0/0

    Для хранения сценариев регистрации, профилей и домашних папок пользователей LDAP, я создал папку /home/SYSVOL (по аналогии с Windows, мне так удобнее). Соответственно, в ней созданы папки netlogons, profiles, users.

    Параметры domain master = no и domain logons = yes превращают сервер Samba в резервный контроллер домена.

    Параметр logon path = оставлен пустым, т.к. я не хочу хранить профили пользователей рабочих станций на сервере. Если все же требуется хранить профили, то нужно указать путь. По-умолчанию
    logon path = \\%N\%U\profile

  • Проверить файл smb.conf на наличие ошибок можно с помощью команды testparm. Если ошибок нет, Samba надо перезапустить.
  • Далее следует задать Samba пароль администратора (rootdn) LDAP:

    $ smbpasswd -w password
  • Если все операции прошли без ошибок, Samba следует остановить.

    $ /etc/init.d/samba stop

Пакеты для аутентификации Linux

  • Устанавливаем пакет libnss-ldap
    $ apt-get install libnss-ldap
      LDAP Server Host: 127.0.0.1
      DN of Search Base: dc=mydomain
      LDAP Version: 3
      Database requires login: no
      Make config readable by owner only: yes
  • Корректируем в файле /etc/nsswitch.conf параметры passwd, group и shadow:
    passwd: compat ldap
    group: compat ldap
    shadow: compat ldap
  • Устанавливаем пакет libpam-ldap

    $ apt-get install libpam-ldap
      Make local root db admin: yes
      Database requires logging in : no
      Root login account : cn=admin,dc=mydomain
      Root password : password
      Crypt : crypt

    Файл /etc/ldap/ldap.conf должен выглядеть так:

    BASE dc=mydomain
    HOST localhost
  • Для настройки PAM для LDAP надо внести изменения в следующие файлы:

    /etc/pam.d/common-account

    # Закоментировать следующую строку
    #account required pam_unix.so

    # и добавить две строки
    account sufficient pam_ldap.so
    account required pam_unix.so try_first_pass

    /etc/pam.d/common-auth

    # Закоментировать следующую строку
    #auth required pam_unix.so nullok_secure

    # и добавить две строки
    auth sufficient pam_ldap.so
    auth required pam_unix.so nullok_secure use_first_pass

    /etc/pam.d/common-password

    # Закоментировать следующую строку
    #password required pam_unix.so nullok obscure min=4 max=8 md5

    # и добавить две строки
    password sufficient pam_ldap.so
    password required pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass

  • Устанавливаем пакет nscd (name service caching daemon):
    $apt-get install nscd