Samba в роли PDC на системных учетках
На предприятии, где я работал, решил развернуть классический домен контроллер на SAMBA. Клиентов около 50-ти, ОС Windows XP. Приступим..
Реалии:
SAMBA Version 3.0.35
Устанавливать будем, как обычно с портов:
[root@router /usr/ports/net/samba3]# make config && make install clean
В выпадающем окне выбираем:
[X] WINBIND With WinBIND support
[X] ACL_SUPPORT With ACL support
Далее настроим конфиг самбы:
# Название домена
workgroup = SH1
# Имя сервера
netbios name = PDCSERV
# Описание
server string = Primary Domain Controller
# Скрипт добавления пользователя
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 = /usr/bin/mail -s 'message from %f on %m' admin < %s; rm %s
# Где лежат скрпиты, выполняемые доменными компами при загрузке
logon script = logon.bat
# Разрешить обработку входов в домен
domain logons = Yes
# Уровень ОС. Чем выше номер, тем выше вероятность стать главным браузером сети
os level = 255
# При запуске устраивает перевыборы с наибольшим шансом для себя
preferred master = Yes
# Мой сервер является обозревателем домена
domain master = Yes
# Samba сразу берет на себя роль мастер-браузера
local master = yes
# Параметр определяет диапазон пользовательских идентификаторов, выделяющихся для сопоставления SIDов UNIX
# пользователей SIDам NT пользователей. Этот диапазон идентификаторов не должен пересекаться
# с локальными или NIS пользователями, иначе возможны конфликты.
idmap uid = 5000-9999
idmap gid = 5000-9999
# Кого не пускать
# в итоге она у меня раскомментирована, но настройку я делал с закомменченой.
# настоятельно рекомендую расккомментить, после настройки и введения
# самой машины в домен
invalid users = root
# Список сетевых интерфейсов, которым разрешен доступ к серверу
interfaces = 192.168.1.1
# Список сетей, которым разрешен доступ к нашему серверу
hosts allow = 192.168.1. 127.
# Доменная аутентификация
security = user
# Включаем поддержку WINS(сервер)
wins support = yes
# Указываем виндовый WINS из другого домена - на время, пока он ещё жив
#wins server = 192.168.1.1
dns proxy = yes
#Сервер времини сихронизировать будем с помощью .bat файла
time server = yes
# Перемещаемые профили (если не указать эти пункты пустыми -
# профили у пользователей будут перемещаемые)
logon path =
logon home =
template homedir =
# логгинг
log level = 10 passdb:10 auth:10 winbind:10
log file = /var/log/samba/log.%m
display charset = koi8-u
unix charset = koi8-u
dos charset = cp866
### Начало файловых шар ###
# в этом каталоге будут размещаться стартовые скрипты logon.bat
[netlogon]
comment = Network Logon Service
path = /usr/home/samba/netlogon
guest ok = Yes
browseable = no
write list = vlymar
admin users = vlymar
# перемещаемые профили
[Profiles]
comment = Roaming Profile Share
path = /usr/home/samba/profiles
read only = No
profile acls = Yes
browseable = no
# сетевой диск "Z", в котором будут находиться директории пользователей домена с правами "755". Опишу какие параметры, что означают.
#название ресурса
[public]
#комментарий к ресурсу
comment = Директории пользователей домена
#путь к месторасположению ресурсу
path = /home/samba/public
# запрещаем пользователям сохранять на сетевом диске файлы с такими расширениями
veto files = /*.avi/*.mp3/*.mkv/*.wav/*.wma/*.fly/*.mpg/*.mpeg/*.vob/*.3gp/*.exe/*.reg/
# говорим удалять эти файлы
delete veto files = yes
# обеспечивает отображение в сети Windows
browseable = yes
# разрешаем запись
writable = yes
# если этот параметр задан в yes на общем ресурсе, то для подключения к ресурсу не требуется пароль.
guest ok = yes
# ниже перечислены параметры отвечающие за создание каталогов и файлов пользователями с правами "755"
create mask = 0755
force create mode = 0755
security mask = 0755
directory mask = 0755
force directory mode = 0755
directory security mask = 0755
# сетевой диск "O", в котором будут находиться директории с доступом по отделам с правами "070"
[otdel]
comment = Директории c доступом по отделах
path = /home/samba/otdel
veto files = /*.avi/*.mp3/*.mkv/*.wav/*.wma/*.fly/*.mpg/*.mpeg/*.vob/*.3gp/*.exe/*.reg/
delete veto files = yes
browseable = yes
writable = yes
guest ok = yes
create mask = 0770
force create mode = 0770
security mask = 0770
directory mask = 0770
force directory mode = 0770
directory security mask = 0770
# мои шары
[software]
comment = Софт
path = /mnt/ad4/distrib
browseable = yes
guest ok = yes
create mask = 0755
force create mode = 0755
write list = @ntadmins
read list = @ntusers
[pictures]
comment = Графика
path = /mnt/ad4/pictures
browseable = yes
guest ok = yes
create mask = 0755
force create mode = 0755
write list = @ntadmins
read list = @ntusers
[music]
comment = Музыка
path = /mnt/ad4/music
browseable = yes
guest ok = yes
create mask = 0755
force create mode = 0755
write list = @ntadmins
read list = @ntusers
[films]
comment = Фильмы
path = /mnt/ad4/films
browseable = yes
guest ok = yes
create mask = 0755
force create mode = 0755
# Cписок пользователей имеющих доступ к сервису на чтение/запись. Если соединяющийся пользователь находится в этом списке тогда, он получит доступ на запись независимо от точо установлен параметр read only (только чтение). Список может содержать названия группы, используется синтаксис @group. Заметьте, что если пользователи одновременно находятся в списке только для чтения и в списке на чтение/запись, они получат доступ и на запись.
write list = @ntadmins, vlymar
# Это список пользователей, которым открыт доступ “только для чтения”. Если такой пользователь присоединится к ресурсу — он не получит доступ на запись, независимо от того выставлено ли на самом ресурсе “только для чтения”.
read list = @ntusers
# Это – список пользователей, которым будут предоставлять административные привилегии на общем ресурсе. Это означает, что они работают с файлами как суперпользователь (root).
admin users = vlymar
# Если параметр установлен в yes(только для чтения), то пользователь не сможет создавать или изменять файлы в этой директории.
read only = yes
[upload]
comment = Обменник для всех, автоматическое удаление через 7 дней
path = /mnt/ad4/tmp
browseable = yes
writable = yes
guest ok = yes
create mask = 0777
force create mode = 0777
write list = @ntadmins, @ntusers
Создадим необходимые скрипты, которые используются в конфиге самбы:
# скрипт добавления пользователей
/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
#-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/rc.d/samba restart &
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/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
# скрипт добавления пользователя в группу
list_current_users="`pw groupshow $1 | awk -F ':' '{print $4}'`"
echo $list_current_users
pw groupmod $1 -M $list_current_users,$2
делаем их исполняемыми, даем права "755".
Для автоудаления устаревших файлов с шары "Upload" через 7 дней, добавим задание в крон:
Создаем необходимые директории:
Займемся созданием стартовых скриптов, которые будут применяться по политике домена:
[root@router /home/samba/netlogon]# ls -l
total 14
-rwxrwxrwx 1 ftp ftp 49 3 окт 14:33 lock.cmd
-rwxr-xr-x 1 vlymar ntusers 1142 16 июл 08:37 lock.reg
-rwxrwxrwx 1 vlymar ntusers 149 3 окт 14:33 logon.bat
-rwxr-xr-x 1 root wheel 249 18 май 2009 proxy.vbs
-rwxr-xr-x 1 vlymar it_ot 63 1 окт 14:07 share.bat
-rwxr-xr-x 1 vlymar ntusers 32 1 окт 2009 time.bat
-rwxr-xr-x 1 ftp ftp 1142 16 июл 08:37 unlock.reg
Создадим эти файлы:
[root@router /]# touch /home/samba/netlogon/proxy.bat
[root@router /]# touch /home/samba/netlogon/time.bat
[root@router /]# touch /home/samba/netlogon/share.bat
[root@router /]# touch /home/samba/netlogon/lock.cmd
Главным стартовым скриптом является logon.bat, который будет выполнять все остальные наши скрипты. Главное правило, все эти файлы нужно создавать в Windows ОС, можно в блокноте, так как они будут выполняться в ней!
Wscript \\PDCSERV\netlogon\proxy.vbs
call \\PDCSERV\netlogon\time.bat
call \\PDCSERV\netlogon\lock.cmd
Reg-файл с помощью которого мы указываем proxy-сервер в IE:
prefix = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\"
wshShell.regWrite prefix & "ProxyServer", "proxy.sh1:3128"
wshShell.regWrite prefix & "ProxyEnable", 1
Подключаем сетевые ресурсы (диск "Z" и "O"):
net use O: \\PDCSERV\otdel -y
Синхронизируем время на клиентах с нашим NTP-сервером:
Блокируем USB порты:
start/wait regedit -s \\PDCSERV\netlogon\auto.reg
Сам reg-файл:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor]
"Type"=dword:00000001
"Start"=dword:00000004
"ErrorControl"=dword:00000001
"DisplayName"="Драйвер запоминающих устройств для USB"
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,55,00,53,00,42,00,53,00,54,00,4f,\
00,52,00,2e,00,53,00,59,00,53,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor\Enum]
"Count"=dword:00000000
"NextInstance"=dword:00000000
Отключаем скриптом auto.reg автозапуск флешек и другого..:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom]
"AutoRun"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"NoDriveTypeAutoRun"=dword:000000FF
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoDriveTypeAutoRun"=dword:000000FF
Назначим им права "755" :
Добавим самбу в rc.conf:
Проверим для уверенности smb.conf на ошибки программой testparam:
Processing section "[netlogon]"
Processing section "[Profiles]"
Processing section "[public]"
Processing section "[otdel]"
Processing section "[software]"
Processing section "[pictures]"
Processing section "[music]"
Processing section "[films]"
Processing section "[upload]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
Press enter to see a dump of your service definitions
как видим все в полном порядке.
Пробуем запускать samba:
Removing stale Samba tdb files: ....... done
Starting nmbd.
Starting smbd.
Starting winbindd.
[root@router /etc]#
Добавим пользователя root в самбу:
New SMB password:
Retype new SMB password:
Added user root.
[root@router /etc]#
Создадми карту стандартных виндовых групп на юниксовые:
#!/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
Выполняем его:
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 3013
Successfully added group Domain Computers to the mapping db as a domain group
[root@srv /usr/local/etc/samba]#
Добавим себя в группу "Администраторы домена" - ntadmins:
Смело можно добавлять наш PDC в домен:
Password:
Joined domain SH1.
Немного поговорим о сетевых дисках "Z" и "O".
Диск "Z", является пользовательским сетевым диском с разграниченными правами на каждого юзера "755".
Например:
total 62
.....
drwxr-xr-x 4 nivanchenko ntusers 512 30 сен 12:08 Иванченко Николай
.....
Диск "O", является пользовательским сетевым диском с правами по группам, информация доступна в пределах своего отдела.
Создаем группу buh_ot, и добавляем в нее пользователей этой группы:
total 18
....
d---rwx--- 2 root buh_ot 512 1 окт 13:17 Бухгалтерия
....
Для добавления учетной записи пользователя домена я использую скрипт.
Для просмотра списка пользователей и групп домена используйте:
[root@router /]#wbinfo -g
Часть конфигов взята с статьи lissyara - Samba в роли контроллера домена, без использования LDAP.
Для просмотра SID домена необходимо выполнить:
SID for domain PDCSERV is: S-1-5-21-2769215453-6741887692-3979662434
Прикрепленный файл | Размер |
---|---|
add_machine_script.sh | 271 байт |
add_user_script.sh | 252 байта |
add_user_to_group_script.sh | 184 байта |
delete_user_from_group_script.sh | 439 байтов |
rename_user_script.sh | 1.87 кб |
samba_group.sh | 433 байта |
shutdown_script.sh | 98 байтов |
lock.cmd | 49 байтов |
lock.reg | 1.12 кб |
logon.bat | 149 байтов |
proxy.vbs | 249 байтов |
share.bat | 63 байта |
time.bat | 32 байта |
unlock.reg | 1.12 кб |
auto.reg | 343 байта |
- Войдите на сайт для отправки комментариев
- Версия для печати