Samba в роли контроллера домена, без использования LDAP [2007]
Итак. Понадобилось поднять домен на самбе. Контора потихоньу уходит с винды, соответственно - надо избавляться. Неделя убитая на чтение чужих статей по связкам типа samba+ldap просветления не приносили. Не работало :))) Руки. Тока чьи - мои или тех кто писал. Наверно мои. Посему пошёл своим путём. На сайте разработчиков samba нашёл описание как сделать с системными пользователями, а не на LDAP. Попробовал - получилось. Что, кратенькко, и описываю. Для начала ставим из портов samba3:
/jails/eliron/var/named/etc/namedb/>cd /usr/home/lissyara/
/usr/home/lissyara/>cd /usr/ports/net/samba3
/usr/ports/net/samba3/>make && make install && make clean
Лезет окошко, в нём выбираем такое:
Options for samba 3.0.23d,1
[ ] LDAP With LDAP support
[X] ADS With Active Directory support
[ ] CUPS With CUPS printing support
[X] WINBIND With WinBIND support
[X] ACL_SUPPORT With ACL support
[ ] FAM_SUPPORT With File Alteration Monitor
[ ] SYSLOG With Syslog support
[ ] QUOTAS With Disk quota support
[ ] UTMP With UTMP accounting support
[ ] MSDFS With MSDFS support
[ ] PAM_SMBPASS With PAM authentication vs passdb backends
[ ] CLUSTER With experimental cluster support
[ ] EXP_MODULES With experimental modules
[ ] POPT With system-wide POPT library
[ ] MAX_DEBUG With maximum debuging
Это я такое выбрал. Вы - что нравится. После установки, рисуем конфиг (/usr/local/etc/smb.conf) для самбы:
[global]
workgroup = GPTEL
netbios name = PDC-GPTEL
server string = SAMBA Domain Controller For GPTEL
# Скрипт добавления пользователя
add user script = /usr/local/etc/samba/add_user_script.sh "%u"
# Скрипт удаления пользователя
delete user script = /usr/sbin/pw userdel "%u" -r
# Скрипт переименованя пользователя
# (следующие две строки - на самом деле одна. невлезает ..)
rename user script =
/usr/local/etc/samba/rename_user_script.sh "%uold" "%unew"
# Скрипт перезапуска самбы (Вообще, в man smb.conf, предлагается
# ребутить или класть всю машину. Перебор, по моему... Хотя -
# у меня это не работает. Такчто - пофиг.)
shutdown script = /usr/local/etc/samba/shutdown_script.sh
# Скрипт добавления новой группы
add group script = /usr/sbin/pw groupadd "%g"
# Скрипт удаления группы
delete group script = /usr/sbin/pw groupdel "%g"
# Скрипт добавления пользователя в группу
# (следующие две строки - на самом деле одна. невлезает ..)
add user to group script =
/usr/local/etc/samba/add_user_to_group_script.sh "%g" "%u"
# Скрипт установки первичной группы для пользователя
set primary group script = /usr/sbin/pw usermod "%u" -g "%g"
# Скрипт удаления пользователя из группы
# (следующие две строки - на самом деле одна. невлезает ..)
delete user from group script =
/usr/local/etc/samba/delete_user_from_group_script.sh "%g" "%u"
# Скрпит для добавления аккаунта компьютера
add machine script = /usr/local/etc/samba/add_machine_script.sh "%u"
# Скрипт проверки пароля (чтобы не пихали 12345 и прочее. Должен вернуть 0
# если пароль нормальный, и что-то другое - если нет. Пароль передаётся
# на стандартный ввод скрпита)
check password script = /path/to/password/check/script.sh
# Скрпит - чё елать при получении сообщений по winpopup (из man`a)
message command = /bin/mail -s 'message from %f on %m' root < %s; rm %s
# Где лежат скрпиты, выполняемые доменными компами при загрузке
logon script = scripts\logon.bat
domain logons = Yes
os level = 85
preferred master = Yes
domain master = Yes
idmap uid = 5000-9999
idmap gid = 5000-9999
# Кого не пускать
# в итоге она у меня раскомментирована, но настройку я делал с закомменченой.
# настоятельно рекомендую расккомментить, после настройки и введения
# самой машины в домен
invalid users = root
interfaces = 192.168.120.253/24
security = user
# Включаем поддержку WINS
wins support = yes
# Указываем виндовый WINS из другого домена - на время, пока он ещё жив
# wins server = 192.168.0.251
dns proxy = yes
time server = True
# Перемещаемые профили (если не указать эти пункты пустыми -
# профили у пользователей будут перемещаемые)
logon path =
logon home =
template homedir =
# логгинг
log level = 10 passdb:10 auth:10 winbind:10
log file = /var/log/samba/log.%m
[IPC$]
path = /tmp
[print$]
comment = Printer Drivers Share
path = /usr/home/samba/drivers
[netlogon]
comment = Network Logon Service
path = /usr/home/samba/netlogon
guest ok = Yes
browseable = No
[Profiles]
comment = Roaming Profile Share
path = /usr/home/samba/profiles
read only = No
profile acls = Yes
Также создаём скрипты, описанные в конфиге: /usr/local/etc/samba/add_user_script.sh
/usr/local/etc/>smbpasswd
New SMB password:
Retype new SMB password:
Failed to find entry for user root.
Failed to modify password entry for user root
/usr/local/etc/>smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root.
Вначале ошибся. Нельзя изменить пароль у несуществующего пользователя :))) Также, надо создать маппинг стандартных виндовых групп на юниксовые. Для этого использовался такой скрипт (с сайта самбы - вообще, всё описанное делалось по тамошним докам и манам):
/usr/home/lissyara/>more samba_group.sh
#!/bin/sh
#!/bin/bash
#### Keep this as a shell script for future re-use
pw groupadd ntadmins
pw groupadd ntusers
pw groupadd computers
net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d
net groupmap add ntgroup="Domain Users" unixgroup=ntusers rid=513 type=d
net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d
net groupmap add ntgroup="Domain Computers" unixgroup=computers type=d
Запускаем:
/usr/home/lissyara/>sh samba_group.sh
Successfully added group Domain Admins to the mapping db as a domain group
Successfully added group Domain Users to the mapping db as a domain group
Successfully added group Domain Guests to the mapping db as a domain group
No rid or sid specified, choosing a RID
Got RID 3007
Successfully added group Domain Computers to the mapping db as a domain group
/usr/home/lissyara/>
А вот на следующем действии, я мучался почти день - нигде не описано, что надо в группу админов добавить хоть одного пользователя. Я добавил себя, простым редактированием файла групп:
После чего втыкаем контроллер домена в его же домен:
/usr/home/lissyara/>net join pdc-gptel
Password:
Joined domain GPTEL.
Собственно и всё. Однако - некоторые комментарии. Первое - если есть системная учётка - то используется существующая. Я вот удалил пользователя `lissyara` - а грохнулся, до кучи, мой аккаунт на фре :) Решается относительно просто - в скрипт переименования и удаления добавляется проверка имени пользователя. Надо - делайте. (Лучше, проверять uid - что меньше тысячи, и дополнительно какие-то имена. Но, всё же маловероятно, что виндовые админы будут делать пользователя bin и прочее..) Второе - для администрирования используем утилиты из NT4, качать отсюда. Там же описание - чё делать. Не очень удобно - но, можно доверить рулить кому-то другому. Из минусов - нельзя вбивать описание и полное имя пользователя... Можно - но руками, или дорабатывать скрипты, чтоб через pdbedit делали это... (если удасться найти параметр в котором оно передаётся...)
Добавлено 2007-05-04: В скриптах фигурирует такая строка: -L "russian" - класс пользователей самбlissyaraы, и компьютеров. Я использовал такой, а вообще имеет смысл завести отдельный класс и урезать его по самое небалуйся..