Установка контроллера домена на Samba (ОС FREEBSD)
При написании использовал куски из других статей. Копирайты стоят внизу.
Возникла необходимость поднять домен на виртуальной машине с freebsd. В принципе поднятие на виртуалке ничем не отличается от поднятия на реальном сервере, поэтому заострять внимание на этом не буду.
Ставим как обычно из портов
# usr/ports/net/samba3/make
# usr/ports/net/samba3/make installПеред началом компиляции самба выдаст меню, в котором нужно включить необходимые вам опции.
После инсталляции прописываем в
/etc/rc.conf следующую строку:
samba_enable=”YES”затем прописываем в файле
/usr/local/etc/smb.conf настройки самбы.
Вот мой конфиг:
[global]
dns proxy = No
Ldap ssl = No
workgroup = TESTDOMAIN
netbios name = testserver
os level = 33
server string = TEST SERVER
domain master = yes
domain logons = yes
local master = yes
encrypt passwords = yes
smb passwords = yes
smb passwd file = /usr/local/etc/samba/smbpasswd
preferred master = yes
log level = 1
log file = /var/log/samba/workstations/%m.log
max log size = 50
# Скрипт добавления пользователя
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"
[printers]
comment = All printers
path = /var/spool/samba
printable = yes
browsable = no
[homes]
comment = Home Directories
read only = no
browsable = no
[netlogon]
path = /usr/home/samba/netlogon
guest ok = Yes
browsable = no
Writable = no
[Profiles]
Comment – Roaming Profile Share
Path = /usr/home/samba/profiles
Read only = no
Browsable = no
Create mask = 0600
Directory mask = 0700
Небольшое замечание. Сначала в конфиге прописал опцию
unix password sync = 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 -m -g nt_users -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/nt_workstations \
-s /sbin/nologin -m \
-g nt_workstations -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
После того как скрипты написаны, делаем их исполняемыми при помощи chmod:
# cd /usr/local/etc/samba/ # chmod u+x имя_скриптапроверяем стали ли исполняемыми:
# ls –lстартуем самбу.
# /usr/local/etc/rc.d/samba startПроверяем.
# ps -ax | grep smbдолжно быть что-то типа:
1810 ?? Ss 0:06.16 /usr/local/sbin/nmbd -D -s /usr/local/etc/smb.conf
1816 ?? Is 0:00.33 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
1818 ?? I 0:00.00 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
3652 p0 S+ 0:00.04 /bin/csh -c ps -ax | grep smb
Следующий шаг – создание групп пользователей. Создаём 3 группы:
# pw groupadd nt_workstation
# pw groupadd nt_admins
# pw groupadd nt_usersсопоставляем созданные группы с windows-группами при помощи утилиты net:
• Гости:
# net groupmap add rid=514 ntgroup="Domain Guests" unixgroup=nobody • Пользователи:
# net groupmap add rid=513 ntgroup="Domain Users" unixgroup=users • Windows станции:
# net groupmap add rid=515 ntgroup="Domain Computers" unixgroup=nt_workstations • Администраторы:
# net groupmap add rid=512 ntgroup="Domain Admins" unixgroup=nt_adminsЧисло после rid= - это числовой идентификатор основных Windows групп.
Создадим пользователя "test", который будет администратором домена (первичная группа - nt_admins)
# adduser test
# pw groupmod nt_admins -m testДобавляем пользвоателя test в самбу:
# smbpasswd -a test
Проверяем, вошёл ли пользователь в группу “Domain Admins”
# net rpc group members "Domain Admins" -U test
TESTDOMAIN\testПо умолчанию у группы Domain Admins нет никаких прав кроме кроме назначать и удалять привелегии другим. Дадим группе Domain Admins все права
# net rpc rights grant "Domain Admins" SeMachineAccountPrivilege
SeTakeOwnershipPrivilege SeBackupPrivilege SeRestorePrivilege SeRemoteShutdownPrivilege
SePrintOperatorPrivilege SeAddUsersPrivilege SeDiskOperatorPrivilege –U test
Вводим сервер в домен:
# net rpc join -U test
Joined domain TESTDOMAIN
Проверяем:
# net rpc testjoin
Join to 'TESTDOMAIN' is OK
test1# net rpc info -U test
Password:
Domain Name: TESTDOMAIN
Domain SID: S-1-5-21-2743657024-3976055885-1262507069
Sequence number: 1216150908
Num users: 1
Num domain groups: 4
Num local groups: 0 Ввод в домен с Windows-машины:
1. ПКМ на иконке "Мой компьютер", выбрать пункт "Свойства"
2. Перейти на вкладку "Имя компьютера"
3. Нажать кнопку "Изменить"
4. Выбрать пункт "Является членом домена:"
5. Ввести название домена (у меня TESTDOMAIN), кнопка "ОК"
6. Ввести имя и пароль пользователя, который имеет право на добавление ПК в домен (в примере test)
7. Перезагрузить
8. В окне ввода имени пароля, нажать кнопку "Параметры" и выбрать домен (в примере TESTDOMAIN)
Добавляем в домен пользовательские машины:
# net rpc user add comp1$ -U test
# net rpc user add comp2$ -U test
# net rpc user add comp3$ -U test
Затем добавляем юзеров:
# net rpc user add user1 -U test
# net rpc user add user2 -U test
# net rpc user add user3 -U testСледует учесть, что при вводе машины в домен следует добавлять в конце её имени знак $. При вводе пользователя ничего добавлять не надо.
Не забудьте включить добавленных пользователей в группу nt_users:
# pw groupmod nt_users -m user1
# net rpc group addmem "Domain Users" user3 -U test Список комманд для управления доменом
Ниже собраны комманды используемые для управления доменом и получения о нем информации. Чтобы не вводить новые названия, оставил их из примера.
Управление
1. Добавить/удалить сопоставление:
# net groupmap {add,delete} ntgroup="Domain Users " unixgroup=nt_users2. Добавить/удалить пользователя:
# net rpc user {add,delete} user1 -U test3. Добавить/удалить компьютер:
# net rpc user {add,delete} comp1$ -U test4. Добавить/убрать пользователя в доп. группу:
# net rpc group {addmem,delmem} "Domain Users" user1 -U test5. Сменить основную группу пользователя:
# usermod -g nt_users user36. Установить пароль для пользователя:
# smbpasswd user17. Ввести сервер в домен:
# net rpc join –U test8. Проверить на вход в домен:
# net rpc testjoin9. Добавить права определенной группе:
# net rpc rights grant "Domain Admins" SeMachineAccountPrivilege SeTakeOwnershipPrivilege SeBackupPrivilege SeRestorePrivilege SeRemoteShutdownPrivilege SePrintOperatorPrivilege SeAddUsersPrivilege SeDiskOperatorPrivilege -U testИнформация
1. Список сопоставлений:
# net groupmap list2. Список всех пользователей:
# net rpc user -U test3. Список всех групп:
# net rpc group -U test4. Список пользователей принадлежащих определенной группе:
# net rpc group members "Domain Users" -U test5. Список компьютеров (группа "Domain Computers"):
# net rpc group members "Domain Computers" –U test6. Группы, которым принадлежит определенный пользователь:
# net rpc user info user3 -U test7. Общая информация о домене:
# net rpc info -U testПри написании использовал следующие статьи:
http://www.samba.org.ua/articles/?section=1&articleid=113&oc=1
http://www.lissyara.su/?id=1167 Т.к. другие службы поднимать не нужно было, то я их не описывал. Но всё это есть по приведённым ссылкам