Самба как контроллер домена без использования LDAP [2009]
Это - обновление старой
одноимённой статьи. Как и старая - эта полностью копи-пастная - всё
работает "из коробки" =) Причина обновления - недоработки старой
статьи, кривости в некоторых местах (дополнительные параметры
пользователя не редактировались). Ну и столкнулся с практической
реализаций решения - попросили сделать в одной конторе. Задача -
поднять домен с целью централизованного хранения учётных записей
пользователей, выполнения каких-то скриптов при логине и т.п. Больше
оно и не может - ибо уровень домена - NT4.
server$ cd /usr/ports/net/samba3 server$ make install clean
В вылезшем окошке выбираем следующие опции:
[X] WINBIND With WinBIND support [X] ACL_SUPPORT With ACL support [X] SYSLOG With Syslog support [X] QUOTAS With Disk quota support [X] UTMP With UTMP accounting support [X] POPT With system-wide POPT library [X] PCH With precompiled headers optimization
Рисуем конфиг /usr/local/etc/smb.conf:
# [global] workgroup = SRO netbios name = SERVER server string = SAMBA Domain Controller For SRO
# Скрипт добавления пользователя 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
# added by lissyara 2009-09-04 in 08:50 passdb backend = tdbsam:/usr/local/etc/samba/passdb.tdb # added by lissyara 2009-09-04 in 09:36 display charset = koi8-r unix charset = koi8-r dos charset = koi8-r
# Где лежат скрпиты, выполняемые доменными компами при загрузке #logon script = scripts\logon.bat logon script = net_map.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 = \\lissyara\profiles\%U logon path = logon home = template homedir =
[netlogon] path = /nethome/samba/netlogon read only = no browseable = yes
[profiles] path = /nethome/samba/profiles browseable = yes create mask = 0600 directory mask = 0700 read only = no guest ok = yes
Набор шар - опционален, обязательны лишь первые три. Далее - рисуем
описанные в конфиге скрипты по управлению пользователями и группами,
но, не забываем добавить в /etc/rc.conf такую строку:
samba_enable="YES"
Скрипт добавления пользователя для компьютера добавляемого в домен - add_machine_script.sh:
echo "renamed user '$1' --> '$2' ($@) in `date +%Y-%m-%d` \ `date +%H:%M:%S`" >> /tmp/`basename $0`.log
Скрипт перезапуска сервиса - shutdown_script.sh:
#!/bin/sh
# Перезапукаем самбу (в бакгроунде - обязательно!) /usr/local/etc/rc.d/samba restart &
В принципе, все эти скрипты не обязательны. Все они состоят из одной
строки, и прекрасно вставляются в конфиг самбы. Вот тока логгировать
так проще, при отладке и т.п. Ну и потом по-быстрому глянуть - чё
происходило на машине - тоже можно. Так что - ваш выбор - что хотите
логгировать - через скрипты, что не хотите - пямо в конфиг команду
вписывайте. На мой взгляд - как мимнимум - добавление/удаления
пользователей, тоже самое для модификации групп пользователя.
Написанные скрипты делаем исполняемыми и запускаем самбу:
Заводим пользователя root в самбе (в принципе, опять же, не
обязательно - можно дальше действовать от административного
пользователя, котрый и будет позднее постоянно использоваться. Но - на
этом этапе так будет прощще):
server$ smbpasswd -a root New SMB password: Retype new SMB password: Added user root.
Рисуем скрипт добавления нужных системных групп, и маппинга виндовых групп на системные:
#!/bin/sh #!/bin/bash #### Keep this as a shell script for future re-use
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
Как вы его обзовёте и куда положите - ваше дело. Использоваться он будет лишь один раз. Запускаем:
server$ 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
Добавляем в администраторов будущего домена нужных пользователей (они,
разуммется должны уже быть в системе. Я добавляю рута и nik - человек
который будет на том конце провода заниматься машинками с виндой):
Зачем рута? Просто все кому делал первым делом пытались залезть на
виндовые машины и порулить доменом именно им. (с учётом что я не
описываю как заводил того же nik в самбе - так же как и рута - вполне
наверно логично...)
Вводим контроллер домена в домен:
server$ net join server Password: Joined domain SRO. server$
Всё. Для верности можно рестартануть самбу и пытаться ввести в домен
машины/залогиниться на них юзерами (опять же - если дословно по статье
сделано - то только root получиться. ибо в самбе пока больше нет других
пользователей).
Оговорки и примечания. В общем - повторяюсь то же что и к
предыдущей статье - при удалении пользователя из самбы - грохается
системная учётка. Делайте проверку, или юзайте отдельную учётку. При
наличии в системе учётки совпадающей по логину с создаваемой - новйо не
создаётся - используется существующая.
Сразу отвечаю на впорос - почему не самба 3.3 а 3.0. В 3.3 скрипты,
по какой-то причине, выполняются от обычного пользователя, который в
винде галки ставит - nik в данном случае. Естессно они не работают.
Либо sudo мутить, и ловить остальные глюки, либо - использовать
проверенное решение. Я предпочёл последнее.
Для администрирования качаем утилиты отсюда. Если у кого-то не качается - идите в старую статью - там есть другой линк.