Документация по ОС FreeBSD Четверг, 25.04.2024, 09:44
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Samba

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
#!/bin/sh

# скрипт добавления пользователей
/usr/sbin/pw useradd "$1" -d /usr/home/samba/profiles/"$1" \
 -s /sbin/nologin -L "russian" -m -g ntusers -c "$1"
# отладка
echo "added user '$1' in `date +%Y-%m-%d` `date +%H:%M:%S`" >> /tmp/`basename $0`.log

/usr/local/etc/samba/rename_user_script.sh
#!/bin/sh
#-xv

# Старое имя пользователя
old_username="$1"
# Новое имя пользователя
new_username="$2"

# Достаём строку из /etc/master.passwd - есть ли такой юзер, и какие у него данные.
user_data=`grep "^${old_username}:" /etc/master.passwd` > /dev/null 2>&1

# Достаём имя пользователя
user_from_passwd="`echo ${user_data} | awk -F ':' '{print $1}'`" > /dev/null 2>&1

# Проверяем существование пользователя
if [ ${user_from_passwd} = ${old_username} ] > /dev/null 2>&1
then
# echo "Есть ссучий юзер!"
 # Пользователь есть. Достаём поля из его строки данных.
 user_uid="`echo ${user_data} | awk -F ':' '{print $3}'`"
 user_gid="`echo ${user_data} | awk -F ':' '{print $4}'`"
 user_login_class="`echo ${user_data} | awk -F ':' '{print $5}'`"
 user_geos="`echo ${user_data} | awk -F ':' '{print $8}'`"
 user_home_dir="`echo ${user_data} | awk -F ':' '{print $9}'`"
 #echo "Данные пользователя"
 #echo "UID = ${user_uid}"
 #echo "GID = ${user_gid}"
 #echo "LoginClass = ${user_login_class}"
 #echo "INFO = ${user_geos}"
 #echo "HOME = ${user_home_dir}"
 # Проверяем, нет ли нового с таким же именем
 new_from_passwd="`echo ${user_data} | \
 awk -F ':' '{print $1}'`" > /dev/null 2>&1
 if [ ${user_from_passwd} = ${new_username} ] > /dev/null 2>&1
 then
 #echo "Уже есть cсучий юзер!!"
 exit 1;
 else
 # Удаляем старого
 pw userdel ${old_username}
 # Заводим нового
 pw useradd "${new_username}" -d "${user_home_dir}" \
 -s /sbin/nologin -L "${user_login_class}" -g "${user_gid}" \
 -u "${user_uid}" -c "${user_geos}"
 # выходим
 #echo "Успешно переименован ${old_username} --> ${new_username}"
 fi
else
 echo "Ноу cсучий юзер!!"
 exit 1;
fi

/usr/local/etc/samba/shutdown_script.sh
#!/bin/sh

# Перезапукаем самбу (в бакгроунде - обязательно!)
/usr/local/etc/rc.d/samba restart &

/usr/local/etc/samba/delete_user_from_group_script.sh
#!/bin/sh

list_current_users="`pw groupshow $1 | awk -F ':' '{print $4}'`"
echo "Текущие пользователи: $list_current_users" >> \
/tmp/delete_user_from_group_script.sh.log

new_list_users="`echo ${list_current_users} | \
 awk -F $2 '{print $1$2 }' | tr -s ',,' ','`"

echo "Новые пользователи: $new_list_users" >> \
/tmp/delete_user_from_group_script.sh.log
echo "" >> /tmp/delete_user_from_group_script.sh.log


pw groupmod $1 -M $new_list_users

/usr/local/etc/samba/add_machine_script.sh
#!/bin/sh

# скрипт добавления машины
/usr/sbin/pw useradd "$1" -d /usr/home/samba/profiles/all_computers \
 -s /sbin/nologin -L "russian" -m \
 -g computers -c "computer_account"

# отладка
echo "added komp '$1' in `date +%Y-%m-%d` `date +%H:%M:%S`" >> /tmp/`basename $0`.log

/usr/local/etc/samba/add_user_to_group_script.sh
#!/bin/sh

# скрипт добавления пользователя в группу
list_current_users="`pw groupshow $1 | awk -F ':' '{print $4}'`"
echo $list_current_users
pw groupmod $1 -M $list_current_users,$2

   После того, как нарисовали, делаем их исполняемыми, и - можно запускать samba:
/usr/home/lissyara/>/usr/local/etc/rc.d/samba start
Removing stale Samba tdb files: ....... done
Starting nmbd.
Starting smbd.
Starting winbindd.
/usr/home/lissyara/>

   Проверяем - чё взлетело, а что нет:
/usr/home/lissyara/>ps -axj | grep smb
root 17309 1 17309 17309 0 IsJ ?? 0:00,01 /usr/local/sbin/smbd
root 17315 17309 17309 17309 0 IJ ?? 0:00,00 /usr/local/sbin/smbd
root 17343 14912 17342 14910 2 R+J p2 0:00,00 grep smb
/usr/home/lissyara/>ps -axj | grep nmbd
root 17302 1 17302 17302 0 SsJ ?? 0:00,01 /usr/local/sbin/nmbd
root 17304 17302 17302 17302 0 IJ ?? 0:00,00 /usr/local/sbin/nmbd
root 17346 14912 17345 14910 2 R+J p2 0:00,00 grep nmbd
/usr/home/lissyara/>ps -axj | grep winb
root 17316 1 17316 17316 0 IsJ ?? 0:00,00 /usr/local/sbin/winbi
root 17317 17316 17316 17316 0 IJ ?? 0:00,00 /usr/local/sbin/winbi
root 17410 14912 17409 14910 2 R+J p2 0:00,00 grep winb
/usr/home/lissyara/>

   Всё нормально. Заводим пользователя root в самбе:
/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/>cat /etc/group | grep ntadmins
ntadmins:*:1001:lissyara
/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ы, и компьютеров. Я использовал такой, а вообще имеет смысл завести отдельный класс и урезать его по самое небалуйся..



Источник: http://www.lissyara.su/?id=1167
Категория: Samba | Добавил: oleg (30.05.2008) | Автор: lissyara
Просмотров: 1780 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024