Установка пакетов
Устанавливаем сервер 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 descriptionloglevel 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 = nopreferred master = yes
domain master = no
domain logons = yeslogon path =
logon drive = Z:
logon home = \\%L\SYSVOL\users\%Uadd 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.2printing = 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