Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
11:04, 17 мая 2012

OpenLDAP и SAMBA 3 в роли доменного контроллера (Windows NT)

Эта записка содержит информацию по настройке пакетов 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/

3. bachem.wordpress.com

0