[f0s@mail] /home/f0s/> cd /usr/ports [f0s@mail] /usr/ports/> cvsup -g -L 2 /usr/local/etc/supfile &&
make fetchindex
Далее устанавливаем OpenLDAP сервер. Он нам потребуется для хранения в нем информации об учетных записях групп, пользователей и машин домена, а также здесь будут хранится записи dns и располагаться настройки dhcp (в ближайшем будущем планирую там держать jabber, адресную книгу и почту). Надеюсь вы уже поняли все преимущества данной фичи? Единая точка администрирования всей сети (не нужно ходить по разным конфигам, и добавлять новых юзеров, боясь забыть прописать кого-нибудь в одной из нужных прог, а здесь все в одном каталоге, никогда не запутаешься. Да и удалять тоже просто :), масштабируемость, безопасность, поддержка различных операционных систем (есть возможность рулить всем даже с виндовой машины клиентом под учеткой root'a).
[f0s@mail] /usr/ports/> cd /usr/ports/net/openldap23-server/ [f0s@mail] /usr/ports/net/openldap23-server/> make config
из опций я выбрал в общем-то все по дефолту: TCP_WRAPPERS, BDB, DYNAMIC_BACKENDS, SLURPD
[f0s@mail] /usr/ports/net/openldap23-server/> make install clean [f0s@mail] /usr/ports/net/openldap23-server/> rehash
Далее редактируем конфиг OpenLDAP сервера:
[f0s@mail] /usr/ports/> more /usr/local/etc/openldap/slapd.conf: include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/etc/openldap/schema/misc.schema include /usr/local/etc/openldap/schema/nis.schema include /usr/local/etc/openldap/schema/openldap.schema # схемы самбы берутся из самбы (потом скопируем), схемы dns и dhcp # тоже позже скопируем. пока строчки закоментарим #include /usr/local/etc/openldap/schema/samba.schema #include /usr/local/etc/openldap/schema/dnszone.schema #include /usr/local/etc/openldap/schema/dhcp.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args # Load dynamic backend modules: modulepath /usr/local/libexec/openldap moduleload back_ldbm access to attrs=userPassword by self write by anonymous auth by * none access to * by self write by anonymous read by * none ####################################################################### # BDB database definitions ####################################################################### database ldbm suffix "dc=artpaint,dc=spb,dc=ru" rootdn "cn=root,dc=artpaint,dc=spb,dc=ru" # # пароль на рута можно сгенерировать с помощью slappasswd # rootpw {SSHA}H2jF/C3atuiJywZT4LW4kTYtLG2yKiRk directory /var/db/openldap-data index objectClass eq index cn eq
Все. Теперь выставляем права на директорию с данными лдап:
[f0s@mail] /usr/ports/net/openldap23-server/> cd /var/db [f0s@mail] /var/db/> chmod 0700 openldap-data
Теперь сделаем так, чтобы это все дело запускалось. Добавляем в rc.conf такие строчки:
[f0s@mail] /var/db/> more /etc/rc.conf | grep -E "slapd|ldap" slapd_enable="YES" slapd_flags="-h 'ldapi://%2fvar%2frun%2fopenldap%2fldapi/ \ ldap://192.168.10.8/ ldap://127.0.0.1/'" slapd_sockets="/var/run/openldap/ldapi"
В данном случае 192.168.10.8 - это IP адрес данной машины, где собсно я и устанавливаю OpenLDAP. Теперь запускаем сервер:
[f0s@mail] /var/db/> usr/local/etc/rc.d/slapd start Starting slapd.
И проверяем, запустился ли:
[f0s@mail] /var/db/> ps -ax | grep slap 911 ?? Is 0:06,06 /usr/local/libexec/slapd -h
ldapi://%2fvar%2frun%2fop 39335 p2 RV 0:00,00 grep slap (csh)
Есть контакт :) Теперь добавляем данные в ldap, для этого создаем файл main.ldif
[f0s@mail] /var/db/> cd /usr/local/etc/openldap [f0s@mail] /usr/local/etc/openldap/> more main.ldif dn: dc=artpaint,dc=spb,dc=ru objectClass: dcObject objectClass: organization objectClass: top dc: artpaint o: artpaint dn: ou=users,dc=artpaint,dc=spb,dc=ru objectClass: top objectClass: organizationalUnit ou: users dn: ou=groups,dc=artpaint,dc=spb,dc=ru objectClass: top objectClass: organizationalUnit ou: groups dn: ou=computers,dc=artpaint,dc=spb,dc=ru objectClass: top objectClass: organizationalUnit ou: computers
Теперь добавляем:
[f0s@mail] /usr/local/etc/openldap/> ldapadd -x -D \ ? "cn=root,dc=artpaint,dc=spb,dc=ru" -w password -f main.ldif adding new entry "dc=artpaint,dc=spb,dc=ru" adding new entry "ou=users,dc=artpaint,dc=spb,dc=ru" adding new entry "ou=groups,dc=artpaint,dc=spb,dc=ru" adding new entry "ou=computers,dc=artpaint,dc=spb,dc=ru" [f0s@mail] /usr/local/etc/openldap/> rm main.ldif
Продолжаем. Устанавливаем nss_ldap, чтобы система видела юзеров и группы, которые находятся в LDAP.
[f0s@mail] /usr/local/etc/openldap/> cd /usr/ports/net/nss_ldap/ [f0s@mail] /usr/ports/net/nss_ldap/> make install clean [f0s@mail] /usr/ports/net/nss_ldap/> rehash [f0s@mail] /usr/ports/net/nss_ldap/> more /usr/local/etc/nss_ldap.conf host 127.0.0.1 base dc=artpaint,dc=spb,dc=ru uri ldap://mail.artpaint/ ldap_version 3 port 389 scope one timelimit 30 bind_timelimit 10 bind_policy soft nss_connect_policy persist idle_timelimit 3600 nss_paged_results yes pagesize 1000 nss_base_passwd ou=users,dc=artpaint,dc=spb,dc=ru?one nss_base_group ou=groups,dc=artpaint,dc=spb,dc=ru?one nss_base_passwd ou=computers,dc=artpaint,dc=spb,dc=ru?one nss_base_shadow ou=users,dc=artpaint,dc=spb,dc=ru?one
С этим все. Далее редактируем:
[f0s@mail] /usr/ports/net/nss_ldap/> more /etc/nsswitch.conf group: files ldap hosts: files dns networks: files passwd: files ldap shadow: files ldap shells: files
Теперь можно установить набор скриптов для работы с пользователям в LDAP. Но в приниципе необязательно. Итак:
[f0s@mail] /usr/ports/net/nss_ldap/>cd /usr/ports/net/ldapscripts/ [f0s@mail] /usr/ports/net/ldapscripts/>make install clean [f0s@mail] /usr/ports/>more /usr/local/etc/ldapscripts/ldapscripts.conf SERVER="127.0.0.1" BINDDN="cn=root,dc=artpaint,dc=spb,dc=ru" BINDPWD="вписываете_ваш_пароль_в_открытом_виде" SUFFIX="dc=artpaint,dc=spb,dc=ru" # Global suffix GSUFFIX="ou=groups" # Groups ou (just under $SUFFIX) USUFFIX="ou=users" # Users ou (just under $SUFFIX) MSUFFIX="ou=computers" # Machines ou (just under $SUFFIX) GIDSTART="10000" # Group ID UIDSTART="10000" # User ID MIDSTART="20000" # Machine ID USHELL="/usr/sbin/nologin" UHOMES="/home/samba/homes/%u" ASKGECOS="no" CREATEHOMES="yes" HOMESKEL="/etc/skel" HOMEPERMS="700" PASSWORDGEN="head -c8 /dev/random | uuencode -m - | \ sed -n -e '2s|=*$||;2p' | sed -e 's|+||g' -e 's|/||g'" RECORDPASSWORDS="yes" PASSWORDFILE="/var/log/ldapscripts_passwd.log" LOGFILE="/var/log/ldapscripts.log" LDAPSEARCHBIN="/usr/local/bin/ldapsearch" LDAPADDBIN="/usr/local/bin/ldapadd" LDAPDELETEBIN="/usr/local/bin/ldapdelete" LDAPMODIFYBIN="/usr/local/bin/ldapmodify" LDAPMODRDNBIN="/usr/local/bin/ldapmodrdn" LDAPPASSWDBIN="/usr/local/bin/ldappasswd" GETENTPWCMD="" GETENTGRCMD="" GTEMPLATE="" UTEMPLATE="" MTEMPLATE=""
Ставим права на конфиг:
[f0s@mail]/usr/ports/net/ldapscripts/>cd /usr/local/etc/ldapscripts [f0s@mail]/usr/local/etc/ldapscripts/>chmod 0640 ldapscripts.conf [f0s@mail]/usr/local/etc/ldapscripts/>chown root:wheel ldapscripts.conf
Добавляем группы в ldap:
[f0s@mail] /usr/> ldapaddgroup admins Successfully added group admins to LDAP [f0s@mail] /usr/> ldapaddgroup users Successfully added group people to LDAP [f0s@mail] /usr/> ldapaddgroup computers Successfully added group computers to LDAP [f0s@mail] /usr/> ldapadduser admin admins Successfully added user admin to LDAP Successfully set password for user admin Successfully created home directory for user admin
Группы создались. Ставим самбу. Обратите внимание, что самба не должна быть 3.0.25. Либо ставим раннюю версию, к примеру 3.0.24, либо 3.0.25а и выше. В 3.0.25 серьезный баг - проблемы с "password expiration", будете долго думать в чем дело :) Итак,
[f0s@mail] /usr/> cd /usr/ports/net/samba3/ [f0s@mail] /usr/ports/net/samba3/> make config
В конфиге выбираем в общем-то тоже почти дефолт: LDAP, CUPS, WINBIND, QUOTAS, UTMP, POPT
[f0s@mail] /usr/ports/net/samba3/> make install clean [f0s@mail] /usr/ports/net/samba3/> rehash
Копируем схему samba.schema в /usr/local/etc/openldap/schema/
[f0s@mail]/usr/> cp /usr/local/share/examples/samba/LDAP/samba.schema \ ? /usr/local/etc/openldap/schema/samba.schema
Cнимаем коментарий на эту схему в slapd.conf и перезапускаем slapd.
[f0s@mail] /usr/ports/net/samba3/> /usr/local/etc/rc.d/slapd restart
Редактируем smb.conf:
[global] # имя домена workgroup = artpaint # типа коментарий самба сервера server string = mail.artpaint #имя компа с самбой в сетевом окружении netbios name = mail security = user hosts allow = 192.168.10. 192.168.20. 192.168.0. 127. load printers = no log file = /var/log/samba/log.%m max log size = 50 acl compatibility = win2k encrypt passwords = yes admin users = admin passdb backend = ldapsam:ldap://127.0.0.1/ # здесь описываем лдап ldap suffix = dc=artpaint,dc=spb,dc=ru ldap user suffix = ou=users ldap group suffix = ou=groups ldap machine suffix = ou=computers ldap admin dn = "cn=root,dc=artpaint,dc=spb,dc=ru" ldap delete dn = no ldap ssl = off winbind uid = 10000-20000 winbind gid = 10000-20000 winbind separator = @ winbind use default domain = yes # делаем PDC socket options = TCP_NODELAY local master = yes os level = 64 domain master = yes preferred master = yes domain logons = yes # если хоиите юзать логон скрипты, то раскоментариваете ; logon script = %m.bat ; logon script = %U.bat # путь к перемещаемому профилю logon path = \\%L\profiles # путь к хомякам юзеров logon home = \\%L\HOME logon drive = H: wins support = yes dns proxy = yes display charset = koi8-r unix charset = koi8-r dos charset = cp866 timeserver = yes # скрипты для добавления юзеров и групп (юзается в usermgr от nt4) add machine script = /usr/local/bin/ldapaddmachine '%u' computers add user script = /usr/local/bin/ldapadduser '%u' users add group script = /usr/local/bin/ldapaddgroup '%g' add user to group script = /usr/local/bin/ldapaddusertogroup '%u' '%g' delete user script = /usr/local/bin/ldapdeleteuser '%u' delete group script = /usr/local/bin/ldapdeletegroup '%g' delete user from group script = /usr/local/bin/ldapdeleteuserfromgroup '%u' '%g' set primary group script = /usr/local/bin/ldapsetprimarygroup '%u' '%g' rename user script = /usr/local/bin/ldaprenameuser '%uold' '%unew' # делаем шару на хомяки [HOME] comment = Home Directories path = /home/samba/homes/%U read only = no public = no writable = yes create mask = 0600 browseable = no directory mask = 0700 # делаем шару на нетлогон (для запуска скриптов) [netlogon] comment = Network Logon Service path = /usr/local/etc/samba/netlogon guest ok = yes writable = no share modes = no browseable = no # делаем шару на перемещаемые профили [profiles] create mask = 0600 directory mask = 0700 path = /home/samba/profiles/%u writeable = yes browseable = no locking = no csc policy = disable # эта строчка необходима
[global] # имя домена workgroup = artpaint # типа коментарий самба сервера server string = mail.artpaint #имя компа с самбой в сетевом окружении netbios name = mail security = user hosts allow = 192.168.10. 192.168.20. 192.168.0. 127. load printers = no log file = /var/log/samba/log.%m max log size = 50 acl compatibility = win2k encrypt passwords = yes admin users = admin passdb backend = ldapsam:ldap://127.0.0.1/ # здесь описываем лдап ldap suffix = dc=artpaint,dc=spb,dc=ru ldap user suffix = ou=users ldap group suffix = ou=groups ldap machine suffix = ou=computers ldap admin dn = "cn=root,dc=artpaint,dc=spb,dc=ru" ldap delete dn = no ldap ssl = off winbind uid = 10000-20000 winbind gid = 10000-20000 winbind separator = @ winbind use default domain = yes # делаем PDC socket options = TCP_NODELAY local master = yes os level = 64 domain master = yes preferred master = yes domain logons = yes # если хоиите юзать логон скрипты, то раскоментариваете ; logon script = %m.bat ; logon script = %U.bat # путь к перемещаемому профилю logon path = \\%L\profiles # путь к хомякам юзеров logon home = \\%L\HOME logon drive = H: wins support = yes dns proxy = yes display charset = koi8-r unix charset = koi8-r dos charset = cp866 timeserver = yes # скрипты для добавления юзеров и групп (юзается в usermgr от nt4) add machine script = /usr/local/bin/ldapaddmachine '%u' computers add user script = /usr/local/bin/ldapadduser '%u' users add group script = /usr/local/bin/ldapaddgroup '%g' add user to group script = /usr/local/bin/ldapaddusertogroup '%u' '%g' delete user script = /usr/local/bin/ldapdeleteuser '%u' delete group script = /usr/local/bin/ldapdeletegroup '%g' delete user from group
script = /usr/local/bin/ldapdeleteuserfromgroup '%u' '%g' set primary group script = /usr/local/bin/ldapsetprimarygroup '%u' '%g' rename user script = /usr/local/bin/ldaprenameuser '%uold' '%unew' # делаем шару на хомяки [HOME] comment = Home Directories path = /home/samba/homes/%U read only = no public = no writable = yes create mask = 0600 browseable = no directory mask = 0700 # делаем шару на нетлогон (для запуска скриптов) [netlogon] comment = Network Logon Service path = /usr/local/etc/samba/netlogon guest ok = yes writable = no share modes = no browseable = no # делаем шару на перемещаемые профили [profiles] create mask = 0600 directory mask = 0700 path = /home/samba/profiles/%u writeable = yes browseable = no locking = no csc policy = disable # эта строчка необходима
# чтобы отключить автономное кеширование # просто так :) чтобы можно было на тачку заходить [IPC$] path = /tmp hosts allow = 192.168.10.0/24 192.168.20.0/24 192.168.0.0/24 127.0.0.1 hosts deny = 0.0.0.0/0
Теперь добавляем в автозапуск самбу
[f0s@mail] /home/samba/> echo samba_enable=\"YES\" >> /etc/rc.conf [f0s@mail] /home/samba/> echo winbindd_enable=\"YES\" >> /etc/rc.conf
Здесь используются перемещаемые профили, то есть все настройки юзеров на сервере и домашние папки тоже. Очень удобно. Обратите внимание на опции касающиеся хостов которым разрешено/запрещено коннектится - иначе будете долго разбираться почему не заходит в домен. Теперь необходимо созать каталоги samba/homes && samba/profiles в /home, и проверить права на них:
[f0s@mail] /home/samba/> chown root:users * [f0s@mail] /home/samba/> ll drwxr-xr-x 15 root users 512 18 июл 09:02 homes drwxr-xr-x 15 root users 512 18 июл 09:03 profiles
Сами домашние папки и профили должны быть с правами 0700, группу на них ставлю users.
[f0s@mail] /home/samba/homes/> ll drwx------ 3 admin users 512 18 июл 17:11 admin drwx------ 2 andreeva users 512 17 июл 12:27 andreeva drwx------ 3 f0s users 512 19 июл 15:30 f0s [.skip.] drwx------ 3 vinogradov users 512 16 июл 16:30 vinogradov
Теперь укажем самбе пароль от пользователя в ldap:
[f0s@mail] /home/samba/homes/> smbpasswd -w password Setting stored password for "cn=root,dc=artpaint,dc=spb,dc=ru"
in secrets.tdb
Создаем каталог для скриптов:
[f0s@mail] /usr/local/etc/samba/> mkdir netlogon
и проверяем права на файлы в каталоге самбы:
[f0s@mail] /usr/local/etc/samba/> ll drwxr-xr-x 2 root wheel 512 15 июн 12:37 netlogon -rw------- 1 root wheel 4096 19 июл 15:34 schannel_store.tdb -rw------- 1 root wheel 8192 12 июл 16:56 secrets.tdb
Добавляем юзера admin:
[f0s@mail] /home/samba/homes/> smbpasswd -a admin New SMB password: Retype new SMB password: Added user admin.
Делаем сопоставление групп группам NT
[f0s@mail] /home/> net groupmap add ntgroup="Domain Admins" \ ? unixgroup=admins rid=512 type=domain Successfully added group admins to the mapping db as a domain group [f0s@mail] /home/> net groupmap add ntgroup="Domain Users" \ ? unixgroup=users rid=513 type=domain Successfully added group people to the mapping db as a domain group [f0s@mail] /home/> net groupmap add ntgroup="Domain Computers" \ ? unixgroup=computers rid=515 type=domain Successfully added group computers to the mapping db as a domain group
Обратите внимание. Здесь есть параметр RID, он означает:
Чтобы ввести виндовую машину в домен, правый клик на "мой компьютер", далее там выбираем "является членом домена.. ARTPAINT", вводим имя и пароль админа. Тачка в домене :) Для удобства администрирования устанавливаем сразу же программку ldapadmin (теперь мы будем ей пользоваться). Скачать можно тут: http://www.lissyara.su/scripts/redirect_link.php?link=http://ldapadmin.sourceforge.net/ Добавим самбу в свой домен:
[f0s@mail] /usr/> net rpc join -S mail -U admin%password