Эта записка содержит информацию по настройке пакетов Openldap, Samba на CentOS 6 x32.
Данные пакеты помогут настроить доменный контроллер в стиле аля Windows NT.
Преимущества такого доменного контролерра в следующем:
1. Бесплатность как самой ОС Linux, так и пакетов для построения контроллера
2. Единная база учетных записей пользователей. Доступ на такие сервисы как Интернет, общие папки и т.д. разрешается с помощью нее. Что облегчает работу системного администратора.
3. Зашищенность пользовательских компьютеров от вирусов, вследствии использования учетных записей с ограничинными правами (группа "Пользователи").
4. Единная контактная база сотрудников, контрагентов и дочерних предприятий. По мимо локальной адресной книги в Outlook, есть возможность задействовать адресную книгу находящиюся в каталоге OpenLDAP.
5. Простое управление объектами доменного контроллера если задействовать пакет "Gosa"
Минусы этого решения:
1. Не работают групповые политики
2. Более сложная настройка доменного контроллера в отличии Win решения
Многие компании не используют преимущества доменного контроллера на Windows 2003 и выше, а именно полезный инструмент как "Групповые политики". В основном такие компании мелкие или средние. В больших холдингах возможно будет сложно администрировать большой парк машин c помощью Samba+OpenLDAP из за отсутствия групповых политик.
Если у вас маленькая или средная компания, присмотритесь к решению на базе ОС Linux.
Краткое содержание записки:
1. Установка и настройка OpenLDAP
2. Установка и настройка Samba
3. Тестирования
Домен: |
company.local |
IP адрес сервера: |
192.168.50.2 |
Пакеты: |
Openldap и samba |
В моем тестовом сервере я установил графическую оболочку.
Для облегчения редактирования конфигов установите следующие пакеты:
# yum install gedit mc system-config-network-tui setuptool -y
1. Установка и настройка OpenLDAP
# yum install openldap-servers openldap-clients -y
Открываем файл /etc/sysconfig/ldap
# gedit /etc/sysconfig/ldap
Строчка 16: меняем значение на yes
SLAPD_LDAPS=yes
Создайте новый файл /etc/openldap/slapd.conf:
# gedit /etc/openldap/slapd.conf
Вставляем две строчки
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
Удаляем содержимое конфигурации в /etc/openldap/slapd.d/
# rm -rf /etc/openldap/slapd.d/*
Сохраним конфиг файл slapd.conf в базу LDAP
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
Откройте файл /etc/openldap/slapd.d/cn=config/olcDatabase\={0}config.ldif
# gedit /etc/openldap/slapd.d/cn=config/olcDatabase\={0}config.ldif
4 строчку изменить на:
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
Создайте новый файл:
# gedit /etc/openldap/slapd.d/cn=config/olcDatabase\={1}monitor.ldif
Вставьте в него текст:
dn: olcDatabase={1}monitor
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {1}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcMonitoring: FALSE
structuralObjectClass: olcDatabaseConfig
creatorsName: cn=config
modifiersName: cn=config
# chown -R 700 /etc/openldap/slapd.d
# chown -R ldap. /etc/openldap/slapd.d
# /etc/rc.d/init.d/slapd start
Ставим демон в автозагрузку:
# chkconfig slapd on
Создадим начальную конфигурацию:
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/core.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
Сгенерируем пароль:
# slappasswd
Создадим новый файл:
# gedit backend.ldif
Замените в нем секцию “dc=***,dc=***” на ваши значения.
Замените секцию “olcRootPW: ***” на пароль сгенерированный с помощью утилиты slappasswd выше.
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib64/openldap
olcModuleload: back_hdb
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcSuffix: dc=company,dc=local
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=company,dc=local
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcMonitoring: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=company,dc=local" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=company,dc=local" write by * read
# ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif
Создадим новый файл:
# gedit frontend.ldif
Замените в нем секцию “dc=***,dc=***” на ваши значения.
Замените секцию “olcRootPW: ***” на пароль сгенерированный с помощью утилиты slappasswd выше.
dn: dc=company,dc=local
objectClass: top
objectClass: dcObject
objectclass: organization
o: Company Local
dc: Company
dn: cn=admin,dc=company,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
dn: ou=people,dc=company,dc=local
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=company,dc=local
objectClass: organizationalUnit
ou: groups
# ldapadd -x -D cn=admin,dc=company,dc=local -W -f frontend.ldif
Создайте файл:
# gedit ldapuser.sh
Добавления локальных пользователей с диапозоном UID 500-999
Замените суфикс “SUFFIX=***” на ваш предпочитаемый.
Этот файл примерочный.
#!/bin/bash
SUFFIX='dc=company,dc=local'
LDIF='ldapuser.ldif'
echo -n > $LDIF
for line in `grep "x:[5-9][0-9][0-9]:" /etc/passwd | sed -e "s/ /%/g"`
do
UID1=`echo $line | cut -d: -f1`
NAME=`echo $line | cut -d: -f5 | cut -d, -f1`
if [ ! "$NAME" ]
then
NAME=$UID1
else
NAME=`echo $NAME | sed -e "s/%/ /g"`
fi
SN=`echo $NAME | awk '{print $2}'`
if [ ! "$SN" ]
then
SN=$NAME
fi
GIVEN=`echo $NAME | awk '{print $1}'`
UID2=`echo $line | cut -d: -f3`
GID=`echo $line | cut -d: -f4`
PASS=`grep $UID1: /etc/shadow | cut -d: -f2`
SHELL=`echo $line | cut -d: -f7`
HOME=`echo $line | cut -d: -f6`
EXPIRE=`passwd -S $UID1 | awk '{print $7}'`
FLAG=`grep $UID1: /etc/shadow | cut -d: -f9`
if [ ! "$FLAG" ]
then
FLAG="0"
fi
WARN=`passwd -S $UID1 | awk '{print $6}'`
MIN=`passwd -S $UID1 | awk '{print $4}'`
MAX=`passwd -S $UID1 | awk '{print $5}'`
LAST=`grep $UID1: /etc/shadow | cut -d: -f3`
echo "dn: uid=$UID1,ou=people,$SUFFIX" >> $LDIF
echo "objectClass: inetOrgPerson" >> $LDIF
echo "objectClass: posixAccount" >> $LDIF
echo "objectClass: shadowAccount" >> $LDIF
echo "uid: $UID1" >> $LDIF
echo "sn: $SN" >> $LDIF
echo "givenName: $GIVEN" >> $LDIF
echo "cn: $NAME" >> $LDIF
echo "displayName: $NAME" >> $LDIF
echo "uidNumber: $UID2" >> $LDIF
echo "gidNumber: $GID" >> $LDIF
echo "userPassword: {crypt}$PASS" >> $LDIF
echo "gecos: $NAME" >> $LDIF
echo "loginShell: $SHELL" >> $LDIF
echo "homeDirectory: $HOME" >> $LDIF
echo "shadowExpire: $EXPIRE" >> $LDIF
echo "shadowFlag: $FLAG" >> $LDIF
echo "shadowWarning: $WARN" >> $LDIF
echo "shadowMin: $MIN" >> $LDIF
echo "shadowMax: $MAX" >> $LDIF
echo "shadowLastChange: $LAST" >> $LDIF
echo >> $LDIF
done
# sh ldapuser.sh
Открываем файл ldapuser.ldif
# gedit ldapuser.ldif
Строка 13:удаляем
$6$E00SY.VhtcM/6Zi6$3wNUJtRsQjrE0gt0PBiNwrG0XdlttOVfLOmHCg72p3QNKi3BW0/G3452HCQDUTQpkn7ZNkUFks9ruO
В конце файла:удаляем последнею строчку
15436
# ldapadd -x -D cn=admin,dc=company,dc=local -W -f ldapuser.ldif
# gedit ldapgroup.sh
Добавление локальных групп с диапозоном UID 500-999
Замените суфикс “SUFFIX=***” на ваш предпочитаемый.
Этот файл примерочный.
#!/bin/bash
SUFFIX='dc=company,dc=local'
LDIF='ldapgroup.ldif'
echo -n > $LDIF
for line in `grep "x:[5-9][0-9][0-9]:" /etc/group`
do
CN=`echo $line | cut -d: -f1`
GID=`echo $line | cut -d: -f3`
echo "dn: cn=$CN,ou=groups,$SUFFIX" >> $LDIF
echo "objectClass: posixGroup" >> $LDIF
echo "cn: $CN" >> $LDIF
echo "gidNumber: $GID" >> $LDIF
users=`echo $line | cut -d: -f4 | sed "s/,/ /g"`
for user in ${users} ; do
echo "memberUid: ${user}" >> $LDIF
done
echo >> $LDIF
done
# sh ldapgroup.sh
# ldapadd -x -D cn=admin,dc=company,dc=local -W -f ldapgroup.ldif
Настройки для LDAP клиента
# yum -y install openldap-clients nss-pam-ldapd
# gedit /etc/openldap/ldap.conf
BASE dc=company,dc=local
URI ldap://192.168.50.2/
TLS_CACERTDIR /etc/openldap/cacerts
# gedit /etc/nslcd.conf
Строка 131: определите URI, суффикс
uri ldap://192.168.50.2/
base dc=company,dc=local
ssl no
tls_cacertdir /etc/openldap/cacerts
# gedit /etc/pam_ldap.conf
Строка 17: закоментируйте это
host 127.0.0.1
Строка 20: определите суффикс
base dc=company,dc=local
Добавьте:
uri ldap://192.168.50.2/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5
# gedit /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_ldap.so
# add if you need ( create home directory automatically if it's none )
session optional pam_mkhomedir.so skel=/etc/skel umask=077
# gedit /etc/nsswitch.conf
Строка 33: добавить:
passwd: files ldap
shadow: files ldap
group: files ldap
Строка 57: изменить:
netgroup: ldap
Строка 61: изменить:
automount: files ldap
# gedit /etc/sysconfig/authconfig
Строка 18: изменить:
USELDAP=yes
# chkconfig nslcd on
# shutdown -r now
Меняем OpenLDAP настройки
-Устанавливаем samba в первую очередь
# yum -y install samba
# mkdir /tmp/setsamba/
# mkdir /tmp/setsamba/ldif_output
# cd /tmp/setsamba/ldif_output
# gedit schema_convert.conf
Создайте новый
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/samba.schema
# slapcat -f schema_convert.conf -F /tmp/setsamba/ldif_output -n0 -s "cn={12}samba,cn=schema,cn=config" > ./cn=samba.ldif
# gedit cn=samba.ldif
Строки 1,3: измените ( удалите цифры “{12}” )
dn: cn=samba,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: samba
Удалите 186 строку и все что ниже нее
structuralObjectClass: olcSchemaConfig
entryUUID: 761ed782-e76d-102f-94de-7784c8a781ec
creatorsName: cn=config
createTimestamp: 20110320184149Z
entryCSN: 20110320184149.954974Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20110320184149Z
# ldapadd -Y EXTERNAL -H ldapi:/// -f cn=samba.ldif
# gedit samba_indexes.ldif
Создайте новый
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub
# ldapmodify -Y EXTERNAL -H ldapi:/// -f samba_indexes.ldif
# service slapd restart
Измените Samba настройки. Этот Samba PDC сервер должен быть также и LDAP клиентом.
# rpm -Uvh http://mirror-kt.neolabs.kz/epel/6/i386/epel-release-6-7.noarch.rpm
# yum install smbldap-tools -y
# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
# cp /usr/share/doc/smbldap-tools-*/smb.conf /etc/samba/smb.conf
# gedit /etc/samba/smb.conf
# Global parameters
[global]
workgroup = COMPANY
netbios name = PDC
security = user
enable privileges = yes
#interfaces = 192.168.5.11
#username map = /etc/samba/smbusers
server string = Samba Server %v
#security = ads
encrypt passwords = Yes
min passwd length = 3
#pam password change = no
#obey pam restrictions = No
# method 1:
#unix password sync = no
#ldap passwd sync = yes
# method 2:
unix password sync = yes
ldap passwd sync = yes
passwd program = /usr/sbin/smbldap-passwd -u "%u"
passwd chat = "Changing *\nNew password*" %n\n "*Retype new password*" %n\n"
log level = 0
syslog = 0
log file = /var/log/samba/log.%U
max log size = 100000
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
mangling method = hash2
Dos charset = CP932
Unix charset = UTF-8
logon script = logon.bat
logon drive = W:
logon home =
logon path =
domain logons = Yes
domain master = Yes
os level = 65
preferred master = Yes
wins support = yes
# passdb backend = ldapsam:"ldap://ldap1.company.com ldap://ldap2.company.com"
passdb backend = ldapsam:ldap://192.168.50.2/
ldap admin dn = cn=admin,dc=company,dc=local
#ldap admin dn = cn=samba,ou=DSA,dc=company,dc=com
ldap suffix = dc=company,dc=local
ldap group suffix = ou=groups
ldap user suffix = ou=people
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
add user script = /usr/sbin/smbldap-useradd -m "%u"
#ldap delete dn = Yes
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%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'
admin users = sysadmin
ldap ssl = no
# printers configuration
#printer admin = @"Print Operators"
load printers = Yes
create mask = 0640
directory mask = 0750
#force create mode = 0640
#force directory mode = 0750
nt acl support = No
printing = cups
printcap name = cups
deadtime = 10
guest account = nobody
map to guest = Bad User
dont descend = /proc,/dev,/etc,/lib,/lost+found,/initrd
show add printer wizard = yes
; to maintain capital letters in shortcuts in any of the profile folders:
preserve case = yes
short preserve case = yes
case sensitive = no
[netlogon]
path = /home/netlogon/
browseable = No
read only = yes
[profiles]
path = /home/profiles
read only = no
create mask = 0600
directory mask = 0700
browseable = No
guest ok = Yes
profile acls = yes
csc policy = disable
# next line is a great way to secure the profiles
#force user = %U
# next line allows administrator to access all profiles
#valid users = %U "Domain Admins"
[printers]
comment = Network Printers
#printer admin = @"Print Operators"
guest ok = yes
printable = yes
path = /home/spool/
browseable = No
read only = Yes
printable = Yes
print command = /usr/bin/lpr -P%p -r %s
lpq command = /usr/bin/lpq -P%p
lprm command = /usr/bin/lprm -P%p %j
# print command = /usr/bin/lpr -U%U@%M -P%p -r %s
# lpq command = /usr/bin/lpq -U%U@%M -P%p
# lprm command = /usr/bin/lprm -U%U@%M -P%p %j
# lppause command = /usr/sbin/lpc -U%U@%M hold %p %j
# lpresume command = /usr/sbin/lpc -U%U@%M release %p %j
# queuepause command = /usr/sbin/lpc -U%U@%M stop %p
# queueresume command = /usr/sbin/lpc -U%U@%M start %p
[print$]
path = /home/printers
guest ok = No
browseable = Yes
read only = Yes
valid users = @"Print Operators"
write list = @"Print Operators"
create mask = 0664
directory mask = 0775
[public]
path = /datasamba/public
guest ok = yes
browseable = Yes
writable = yes
force create mode = 0775
force directory mode = 0775
[private]
path = /datasamba/private
guest ok = yes
browseable = Yes
writable = yes
force create mode = 0770
force directory mode = 0770
# mkdir /datasamba
# mkdir /datasamba/public
# mkdir /datasamba/private
# mkdir /home/netlogon
# service smb restart
# service nmb restart
# chkconfig smb on
# chkconfig nmb on
# smbpasswd -W
# perl /usr/share/doc/smbldap-tools-*/configure.pl
Нажимайте на все вопросы ENTER, кроме вопросов где надо ввести пароль
# smbldap-populate
Тестирования
-Добавьте в Samba ldap пользователей
Мы добавим три учетные записи.
В группу доменные админы: sysadmin и ivanich
В группу пользователи: petrovich
# smbldap-useradd -a -m sysadmin
# smbldap-groupmod -m sysadmin "Domain Admins"
# smbldap-passwd sysadmin
# smbldap-useradd -a -m ivanich
# smbldap-groupmod -m ivanich "Domain Admins"
# smbldap-passwd ivanich
# smbldap-useradd -a -m petrovich
# smbldap-groupmod -m petrovich "Domain Users"
# smbldap-passwd petrovich
-Настройте ACL для Samba общих папок
# setfacl -m group:Domain\ Admins:rwx /datasamba/private/
# setfacl -m group:Domain\ Users:rwx /datasamba/public/
Найдите компьютер в локальной сети
Добавления Windows XP в домен:
Зайдите на компьютер, далее свойства Мой Компьютер, далее Вкладка Имя Компьютера -> Кнопка Изменить -> Укажем наш домен company -> Enter
На запрос логина и пароля введите : sysadmin/ваш пароль
Аналогичным образом все делается в Windows 7. Только надо в реестре поменять значения параметров:
HKLM\System\CCS\Services\LanmanWorkstation\Parameters DWORD DomainCompatibilityMode = 1 DWORD DNSNameResolutionRequired = 0
Источники:
1. http://www.server-world.info/en/note?os=CentOS_6&p=samba&f=4
2. http://shirker.blog.com/2012/01/20/ldap-samba-phpldapadmin-on-centos-6/