Домен NT4 на SAMBA
Доброго времени, уважаемые читатели www.k-max.name! Сегодня я хочу предоставить небольшое HOWTO организации контроллера домена уровня NT4 на основе пакета SAMBA. Данная реализация отлично подходит для офиса в 15-20 машин с разграничением доступа к ресурсам на основе групп пользователей + небольшой стартовый скрипт (logon).
Исходные данные
Для понимания того, что тут будет происходить, настоятельно рекомендую ознакомиться с о статьями:
Созданный ниже сервер вполне неплохо справлялся со своими задачами на следующей железке с конфигурацией: CPU 800Mhz, ОЗУ 384Мб, HDD 100Гб.
Конфигурируемая сеть будет иметь следующие параметры:
- имя домена NT4: domain
- имя сервера – контроллера домена: samba
- ip и маска интерфейса сервера: 192.168.3.1/24
- клиенты будут получать сетевые настройки по DHCP.
- сетевые имена будут выдаваться WINS сервером, которого для маленькой сети без доступа в интернет вполне предостаточно
- хранилищем аутентификационных данных пользователей будет файл /etc/passwd (+shadow) и база паролей samba – smbpasswd
- доступ к ресурсам сервера будет осуществляться на основе прав доступа пользователей и групп UNIX, присоединенных (to map или примапленных) к учетным данным SAMBA (читай – Windows).
Задача
Настроить доменную авторизацию уровня NT4 в сети Windows. Организовать 2 группы пользователей с полным доступом к своим каталогам, одному пользователю предоставить полный доступ ко всем каталогам.
Настройка домена NT4
1. Настраиваем имя машины на samba
server:~# echo samba > /etc/hostname #чтобы имя подхватилось после перезагрузки server:~# echo samba > /proc/sys/kernel/hostname #чтобы имя заработало сейчас server:~# bash samba:~#
2. Добавляем запись для сервера samba в файл /etc/hosts (так же возможно добавление и других сетевых ресурсов, например принетров):
samba:~# cat /etc/hosts 127.0.0.1 localhost 192.168.3.1 samba
3. Устанавливаем пакеты samba и dhcp сервер.
4. Настраиваем сетевой интерфейс:
samba:~# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 08:00:27:bf:0d:02 inet addr:192.168.3.1 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:febf:d02/64 Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 frame:0 TX packets:89 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:356 (356.0 B) TX bytes:13070 (12.7 KiB)
5. Настраиваем DHCP сервер в соответствии с конфигом:
samba:~# cat /etc/dhcp3/dhcpd.conf default-lease-time 86400; max-lease-time 172800; default-lease-time 86400; option subnet-mask 255.255.255.0; option ntp-servers 192.168.3.1; # раскомментируйте опции DNS, только если на # хосте с SAMBA установлен и настроен DNS #option domain-name "DOMAIN"; #option domain-name-servers 192.168.3.1; option netbios-name-servers 192.168.3.1; option netbios-node-type 8; ### ЗАМЕТКА ### # netbios-node-type=8 данный параметр устанавливает # "Гибридный режим" взаимодействия с сервером WINS # на основе Unicast запросов, тем самым снижая # нагрузку на сеть, уменьшая UDP broadcast трафик на 90% ############ subnet 192.168.3.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.3.128 192.168.3.254; option routers 192.168.3.1; allow unknown-clients; }
6. Настраиваем конфиг SAMBA (например с помощью редактора vim) в соответствии со следующим содержимым:
samba:~# cat /etc/samba/smb.conf [global] workgroup = DOMAIN username map = /etc/samba/smbusers name resolve order = wins bcast hosts add user script = /usr/sbin/useradd -m -G users '%u' delete user script = /usr/sbin/userdel -r '%u' add group script = /usr/sbin/groupadd '%g' delete group script = /usr/sbin/groupdel '%g' add user to group script = /usr/sbin/usermod -a -G '%g' '%u' add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u' logon script = scripts\login.bat logon path = logon drive = X: domain logons = Yes preferred master = Yes wins support = Yes interfaces = 192.168.3.1 127.0.0.1 [homes] comment = Домашние каталоги пользователей valid users = %S read only = No browseable = No [netlogon] comment = Сетевой Logon сервис path = /data/%U valid users = %S read only = No [Отдел1] comment = Файлы отдела 1 path = /data/otdel1 valid users = %G read only = No [Отдел2] comment = Файлы отдела 2 path = /data/otdel2 valid users = %G read only = No
В основном, все параметры были рассмотрены в прошлых статьях о SAMBA. В данном конфиге добавились следующие параметры:
- username map – указывает файл соответствия пользователей UNIX, пользователям Windows,
- name resolve order – указывает порядок разрешения имен (в нашем случае имена обнаруживаются сначала в WINS базе, затем через broadcast запрос, затем файл hosts),
- параметры завершающиеся на … script = – указывают команду добавления пользователя, если пользователь добавляется через утилиту srvtools (о ней ниже) или командный интерфейс Windows (команды net),
- logon script – задает путь загрузочного скрипта,
- logon path – устанавливает каталог хранения служебных параметров пользователя (Рабочий стол, NTuser.dat и т.д.), своеобразный перемещаемый профиль,
- logon drive – заставляет подключить домашний каталог пользователя как диск Х:,
- domain logons – это, собственно, и есть тот параметр, заставляющий самбу действовать как контроллер домена,
- preferred master – заставляет самбу работать мастер браузером в своей рабочей группе,
- interfaces – указывает самбе на каких интерфейсах работать (слушать о отвечать на запросы).
Параметр valid users в настройках сервисов задает разрешения на доступ к сервисам, если указан %G, значит доступ на основании группы, параметр %S – задает возможность работать от авторизовавшегося пользователя.
Сервис [homes] предоставляет доступ к домашним каталогам пользователей. Сервис [netlogon] определяет сервис сетевого входа, при этом указывает размещение данного сервиса в структуре каталогов в виде path = /data/имя_пользователя. Если поместить в каталог /data/имя_пользователя/scripts файл login.bat, то он будет использоваться как логон-скрипт.
7. Добавляем пользователя root в базу smbpasswd:
samba# smbpasswd -a root New SMB password: Retype new SMB password: Added user root. samba#
Пароль root‘а должен соответствовать паролю учетной записи UNIX. Данный пользователь будет администратором домена Windows NT4. Никогда не удаляйте эту учетную запись из базы smbpasswd после того, как будут инициализированы группы домена Windows. Если удалить эту учетную запись, система будет не функциональна и Samba не сможет больше управляться.
8. Создаем файл соответствия пользователей, позволяющий учетной записи root обозначаться как эквивалент учетной записи Administrator в сетевой среде Windows. /etc/samba/smbusers такого содержания:
samba:~# cat /etc/samba/smbusers #### # User mapping file #### # Формат записей # ----------- # Unix_ID = Windows_ID # # Примеры: # root = Administrator # janes = "Jane Smith" # jimbo = Jim Bones # # Пояснение: если имя включает пробел, оно должно быть заключено # в кавычки. В примере имя 'jimbo' будет присоединено к именам Windows # 'Jim' и 'Bones', потому что между нити есть пробел, но нет кавычек ####################################################################### root = Administrator #### # End of File ####
9. Создаем и присоединяем группы домена Windows к группам UNIX:
samba:~# samba:~# # Добавляем группы UNIX, на основании которых будет разграничение доступа к ресурсам, samba:~# # для примера достаточно 2-е группы (1. - otdel1, 2. - otdel2) samba:~# samba:~# groupadd otdel1 samba:~# groupadd otdel2 samba:~# samba:~# # Присоединение стандартных групп домена Windows к группам Unix samba:~# samba:~# net groupmap add ntgroup="Domain Admins" unixgroup=root type=d No rid or sid specified, choosing a RID Got RID 1003 Successfully added group Domain Admins to the mapping db as a domain group samba:~# net groupmap add ntgroup="Domain Users" unixgroup=users type=d No rid or sid specified, choosing a RID Got RID 1004 Successfully added group Domain Users to the mapping db as a domain group samba:~# net groupmap add ntgroup="Domain Guests" unixgroup=nogroup type=d No rid or sid specified, choosing a RID Got RID 1005 Successfully added group Domain Guests to the mapping db as a domain group samba:~# samba:~# # Присоединение вручную добавленных групп к группам UNIX samba:~# samba:~# net groupmap add ntgroup="Группа 1" unixgroup=otdel1 type=d No rid or sid specified, choosing a RID Got RID 1006 Successfully added group Группа 1 to the mapping db as a domain group samba:~# net groupmap add ntgroup="Группа 2" unixgroup=otdel2 type=d No rid or sid specified, choosing a RID Got RID 1007 Successfully added group Группа 2 to the mapping db as a domain group samba:~# samba:~# # Проверка того, что получилось: samba:~# samba:~# net groupmap list | sort Domain Admins (S-1-5-21-3104487160-181875607-2722010074-1003) -> root Domain Guests (S-1-5-21-3104487160-181875607-2722010074-1005) -> nogroup Domain Users (S-1-5-21-3104487160-181875607-2722010074-1004) -> users Группа 1 (S-1-5-21-3104487160-181875607-2722010074-1006) -> otdel1 Группа 2 (S-1-5-21-3104487160-181875607-2722010074-1007) -> otdel2
10. Для каждого пользователя домена, необходимо создать его учетную запись в UNIX и SAMBA с ОДИНАКОВЫМИ ПАРОЛЯМИ И ИМЕНАМИ! А так же, пользователей необходимо добавить в соответствующие группы:
samba:~# samba:~# # Добавление пользователей в UNIX с созданием структуры домашнего каталога (-m), samba:~# # комментарием (-c) и включением в дополнительную группу (-G) samba:~# samba:~# useradd -m user1 -c "Пользователь отдела 1" -G otdel1 samba:~# useradd -m user2 -c "Пользователь отдела 2" -G otdel2 samba:~# useradd -m god -c "Пользователь для доступа ко всему" samba:~# samba:~# # Задание пользователям UNIX паролей samba:~# samba:~# passwd user1 Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён samba:~# passwd user2 Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён samba:~# passwd god Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён samba:~# samba:~# # добавление созданных пользователей UNIX в базу smbpasswd samba:~# samba:~# smbpasswd -a user1 New SMB password: Retype new SMB password: Added user user1. samba:~# smbpasswd -a user2 New SMB password: Retype new SMB password: Added user user2. samba:~# smbpasswd -a god New SMB password: Retype new SMB password: Added user god. samba:~# samba:~# samba:~# # Проверка пользователей на принадлежность к нужным группам: samba:~# samba:~# id user1 uid=1003(user1) gid=1006(user1) группы=1006(user1),1004(otdel1) samba:~# id user2 uid=1004(user2) gid=1007(user2) группы=1007(user2),1005(otdel2)
11. Подготавливаем набор каталогов общего доступа и назначаем прав и владельцев (если необходимо, можно подключить отдельный раздел и прописать в /etc/fstab для автоматического монтирования):
samba:~# mkdir -p /data/{otdel1,otdel2} samba:~# chown -R root:root /data samba:~# chown -R god:otdel1 /data/otdel1 samba:~# chown -R god:otdel2 /data/otdel2 samba:~# samba:~# # Устанавливаем права доступа владельцу и группе - rwx (чтение, samba:~# # запись, исполнение), остальным - rx (чтение/исполнение) samba:~# samba:~# chmod -R ug+rwx,o+rx-w /data
12. Устанавливаем запуск Samba и DHCP при старте системы и перезапускаем их теми способами, которые актуальны для вашей системы. На примере Debian:
samba:~# update-rc.d dhcp3-server defaults Adding system startup for /etc/init.d/dhcp3-server ... /etc/rc0.d/K20dhcp3-server -> ../init.d/dhcp3-server /etc/rc1.d/K20dhcp3-server -> ../init.d/dhcp3-server /etc/rc6.d/K20dhcp3-server -> ../init.d/dhcp3-server /etc/rc2.d/S20dhcp3-server -> ../init.d/dhcp3-server /etc/rc3.d/S20dhcp3-server -> ../init.d/dhcp3-server /etc/rc4.d/S20dhcp3-server -> ../init.d/dhcp3-server /etc/rc5.d/S20dhcp3-server -> ../init.d/dhcp3-server samba:~# update-rc.d samba defaults Adding system startup for /etc/init.d/samba ... /etc/rc0.d/K20samba -> ../init.d/samba /etc/rc1.d/K20samba -> ../init.d/samba /etc/rc6.d/K20samba -> ../init.d/samba /etc/rc2.d/S20samba -> ../init.d/samba /etc/rc3.d/S20samba -> ../init.d/samba /etc/rc4.d/S20samba -> ../init.d/samba /etc/rc5.d/S20samba -> ../init.d/samba samba:~# /etc/init.d/dhcp3-server restart Stopping DHCP server: dhcpd3 failed! Starting DHCP server: dhcpd3. samba:~# /etc/init.d/samba restart Stopping Samba daemons: nmbd smbd. Starting Samba daemons: nmbd smbd. samba:~#
13. Настраиваем NSS (диспетчер разрешения имен, name service switch), чтобы обрабатывать разрешение имен, основанное на WINS:
samba:~# cat /etc/nsswitch.conf | grep host #hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 - оригинальная строка hosts: files wins # измененная для использования wins
На этом настройка закончена.
Проверка работоспособности
Давайте теперь проверим, что у нас получилось.
1. Проверка корректной конфигурации smb.conf (в случае ошибок будет выводиться предупреждение и скорее всего сервис samba не сможет запуститься):
samba:~# testparm -s Load smb config files from /etc/samba/smb.conf rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) Processing section "[homes]" Processing section "[netlogon]" Processing section "[Отдел1]" Processing section "[Отдел2]" Loaded services file OK. Server role: ROLE_DOMAIN_PDC [global] workgroup = DOMAIN interfaces = 192.168.3.1, 127.0.0.1 username map = /etc/samba/smbusers syslog = 0 name resolve order = wins bcast hosts add user script = /usr/sbin/useradd -m -G users '%u' delete user script = /usr/sbin/userdel -r '%u' add group script = /usr/sbin/groupadd '%g' delete group script = /usr/sbin/groupdel '%g' add user to group script = /usr/sbin/usermod -a -G '%g' '%u' add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u' logon script = scripts\login.bat logon path = logon drive = X: domain logons = Yes preferred master = Yes wins support = Yes [homes] comment = Домашние каталоги пользователей valid users = %S read only = No browseable = No [netlogon] comment = Сетевой Logon сервис path = /data/%U valid users = %S read only = No [Отдел1] comment = Файлы отдела 1 path = /data/otdel1 valid users = %G read only = No [Отдел2] comment = Файлы отдела 2 path = /data/otdel2 valid users = %G read only = No
2. Проверка запущен ли демон:
samba:~# ps ax | grep mbd 6724 ? Ss 0:00 /usr/sbin/nmbd -D 6726 ? S 0:00 /usr/sbin/nmbd -D 6729 ? Ss 0:00 /usr/sbin/smbd -D 6735 ? S 0:00 /usr/sbin/smbd -D
3. Проверка возможности анонимного подключения к серверу самба:
samba:~# smbclient -L localhost -U% Domain=[DOMAIN] OS=[Unix] Server=[Samba 3.5.6] Sharename Type Comment --------- ---- ------- netlogon Disk Сетевой Logon сервис Отдел1 Disk Файлы отдела 1 Отдел2 Disk Файлы отдела 2 IPC$ IPC IPC Service (Samba 3.5.6) Domain=[DOMAIN] OS=[Unix] Server=[Samba 3.5.6] Server Comment --------- ------- 1PC 2PC SAMBA Samba 3.5.6 Workgroup Master --------- ------- DOMAIN SAMBA
4. Проверка аутентифицированного соединения с сервером:
samba:~# smbclient //samba/Отдел1 -Uuser1%password1 Domain=[DOMAIN] OS=[Unix] Server=[Samba 3.5.6] smb: \> mkdir 123 smb: \> dir . D 0 Wed Jun 22 20:02:29 2011 .. D 0 Wed Jun 22 19:29:56 2011 123 D 0 Wed Jun 22 20:02:29 2011 41807 blocks of size 8192. 8204 blocks available smb: \> q samba:~# smbclient //samba/Отдел1 -Uuser2%password2 Domain=[DOMAIN] OS=[Unix] Server=[Samba 3.5.6] smb: \> mkdir mkdir <dirname> smb: \> mkdir 1234 NT_STATUS_ACCESS_DENIED making remote directory \1234 smb: \> q samba:~# smbclient //samba/Отдел1 -Ugod%password Domain=[DOMAIN] OS=[Unix] Server=[Samba 3.5.6] smb: \> mkdir 1234 smb: \> dir . D 0 Wed Jun 22 20:03:52 2011 .. D 0 Wed Jun 22 19:29:56 2011 123 D 0 Wed Jun 22 20:02:29 2011 1234 D 0 Wed Jun 22 20:03:52 2011 41807 blocks of size 8192. 8204 blocks available smb: \> q samba:~# samba:~# smbclient //samba/Отдел2 -Ugod%god Domain=[DOMAIN] OS=[Unix] Server=[Samba 3.5.6] smb: \> mkdir 12345 smb: \> dir . D 0 Wed Jun 22 20:06:13 2011 .. D 0 Wed Jun 22 19:29:56 2011 12345 D 0 Wed Jun 22 20:06:13 2011 41807 blocks of size 8192. 8204 blocks available smb: \> q samba:~#
Из примера мы видим, что user1 принадлежащий группе otdel1 имеет полный доступ в каталог //samba/Отдел1, при этом данный пользователь не имеет доступа на запись в каталог //samba/Отдел2, а пользователь god, являющийся хозяином обоих каталогов имеет полные права в оба каталога.
Конфигурация клиентов Windows XP
- Для конфигурации настроек стека протоколов TCP/IP используется DHCP. DHCP назначает всем клиентам Windows адрес WINS-сервера 192.16.3.1.
- Включите компьютер в домен Windows NT4 – DOMAIN. В качестве имени администратора домена необходимо использовать пользователя root и соответствующий пароль. Перезагрузите компьютер после включения в домен.
- В данной конфигурации возможно использовать рабочие станции, не включенные в домен (например, мобильные ноутбуки). При создании локальной учетной записи, с тем же самым именем пользователя и паролем, которое были созданы для домена Windows, пользователь может локально войти на компьютер и получить прозрачный доступ к сетевым ресурсам, как если бы он авторизовался как доменный пользователь. Данные компьютеры необходимо включить рабочую группу DOMAIN. Так же, для них не будет работать логон-скрипт и монтирование сетевого диска.
- Включив какого-либо пользователя в группу Domain Admins, вы даете ему право на управление данным доменом. При этом, с данным правами возможно добавление и управление пользователями с помощью графической утилиты от мелкософт – SRVTOOLS.EXE.
Выводы
Итого, в данной статье описана пошаговая инструкция поднятия простейшего контроллера домена Windows уровня NT4. Настроив данную схему работы сети, Вы получаете более удобное управление и централизованное хранение учетных записей пользователей, возможность разграничивать доступ к сетевым ресурсам на основании группы пользователя, а так же минимальные возможности управления доменными рабочими станциями (с помощью логон-скрипта). Недостатки данной схемы очевидны, начинаю от невозможности распределять доступ к сетевым ресурсам для нескольких групп, заканчиваю безопасностью данного решения (как-никак NTLM :). Но учитывая масштабы и отсутствие подключения к интернету – данная схема вполне достойна на существование в небольшом офисе.
P.S. За данное решение огромное спасибо ресурсу http://www.samba-doc.ru/ и книге Samba-3 by Example. John Terpstra.
С Уважением, Mc.Sim!
li/pre
Другие материалы в категории Настройка сервера Linux
- SQUID настройка ACL и http_access
- squid, использование опции debug_options или диагностика компонентов squid
- Использование ramdisk в Linux (ramdisk, ramfs, tmpfs) или препарирование рамдисков
- Rsyslog на Debian, настройка сервера сбора логов
- HOWTO SAMBA на 2 интерфейса и 2 сети с разными smb.conf
- SQUID аутентификация (Kerberos и LDAP) на основе доменных групп Active Directory
- squid, настройка delay pools
- Аутентификация и авторизация squid (basic, Digest, NTLM, negotiate)
- Прокси-сервер SQUID, вводный пост
- SSH сервер на Debian
Не понимаю:
Разве мы поднимали Active Directory?
Не понял вопроса.
Здравствуйте ! Спасибо за интересную и полезную статью. Только начинаю разбираться в теме, очень долго искал именно алгоритм создания домена NT4 без всяких LDAP, AD и прочего.
Если не затруднит несколько вопросов:
1. Из недостатков вышеописанного решения вы указываете протокол NTLM. Так понимаю он недостаточно безопасен по каким-то причинам ?
2. И еще “…и отсутствие подключения к интернету ..”. Собираюсь использовать данную схему как раз в сети где есть интернет-шлюз. То есть в данной ситуации схема не очень безопасна ?
Доброго времени.
По первому вопросу:
NTLM по сравнению с Kerberos (который используется в домене Active Directory для аутентификации) легко подбираемый. Но в маленьких организациях, где безопасность не стоит на первом месте, этого протокола вполне достаточно. Я коротко рассматривал данные протоколы в статье.
По второму вопросу:
да, данная схема не безопасна по причине опять же использования NTLM. Но, как я говорил, если безопасность не стоит во главе, то данной схемы вполне достаточно для небольшой организации, даже при использовании подключения к интернету. Главное – грамотно настроить шлюз.
Начнем с простого. Тем более что SAMBA 4 не в альфа появится видимо не скоро. Пришлось помучится с командами chmod и chmod. Сделал все один в один как у вас но сразу не пошло: пользователь добавленный в группу Отдел1 успешно подключался, но при попытке создания папки выдавалось NT_STATUS_ACCESS_DENIED making remote directory. В итого через mc задал права и заработало !!!. Видимо где то накосячил в начале.
Если можно еще пара вопросов:
1. Можно ли с помощью домена NT4 разрешать/запрещать печать на машине включенной в этот домен.
2. А если на ней стоит Ubuntu с SAMBA’ой?
Я тоже долго боролся с NT_STATUS_ACCESS_DENIED. Несколько раз перенастраивая домен по новой… С каждым разом понимание было все ближе и ближе 1. Можно, создав в smb.conf общий ресурс не [printers] – для всех принтеров, а для каждого принтера индивидуально [Printer_name] и задав разрешенных пользователей через valid users.
2. Тоже можно, но нужно настроить доменную авторизацию через PAM для логина в KDE или GNOME (Смотря что используете в виде исков). И рулить уже на основании прав доменных пользователей.
Меня порой удивляет Linux в этом плане, делаешь все по мануалу, все равно сразу не получится, где-то как-то ошибка вылезет, где-то пакет не той версии и т.п. И понимание вовсе даже и не приближается.
Вопрос по поводу доменной авторизации: в разных источника указывается что нет возможности сделать прозрачную авторизацию Linux в домене NT4 через NTLM. То есть к домену вроде как подключается, но при попытке зайти на любую шару выдает запрос пароля. На Windows такого не происходит.
А вот в AD Linux при авторизации через Kerberos все проходит на ура.
Так ли это ? Или вводят народ в заблуждение ?
Спасибо Вам за информацию !
А вот по этому вопросу я, честно говоря, не готов ответить, т.к. руки не дошли еще до организации авторизации линуксовых машин, как рабочих станций в домене NT4.
Буду продолжать поиски Надеюсь удастся найти рабочую схему
Здравствуйте!
Просветите пожалуйта пару моментов. Материал очень интересный но кое что непонятно. Расскажите подробнее о взаимосвязи параметров:
logon script = scripts\login.bat
logon path =
logon drive = X:
domain logons = Yes
И ресурсов [homes] и [netlogon]. Я так и не понял что за login.bat и где именно он лежит, у [homes] не указан path. Logon drive это видимо не диск для домашнего каталога все таки, как я понимаю если мы хотим перемещаемые профили, то надо использовать уже logon path. А вообще все заработало, клиентская машинка у меня в домен вошла, к ресурсам своим доступ получила и получила смонтированный диск X:. Подскажите также, существует ли способ смонтироват несколько сетевых дисков (самба-шар) при входе клиента в домен?
Заранее спасибо, и спасибо за интересный материал. Читал самба от простого к сложному (в примерах) там видимо что-то где-то упущено, а вот по вашему материалу уже более понятно.
Кажется разобрался, сделал так, в smb.conf:
logon script = login.bat
logon path =
#logon drive = X: – убрал под комментарий
[netlogon]
comment = Сетевой Logon сервис
path = /etc/samba/netlogon
read only = Yes
А в /etc/samba/netlogon/login.bat прописал пути личной и общей шаре:
@echo off
net use h: \\tux\home
net use z: \\tux\share
чтобы они монтировались как сетевые диски.
Все верно
Добрый день!
domain logons -заставляет работать самбу как домен NT4, пустой параметр logon path указывает на то, что перемещаемые профили использоваться не будут. Если в нем указать путь, например в формате /logon/%U, то все доменные пользовательские профили будут использовать перемещаемые профили, но тут нужно будет поколдовать с правами на папку /logon. Параметр logon script задает путь к стартовому скрипту, который при входе пользователя в Windows загрузится на клиентску машину и выполнится. Этот скрипт должен лежать в каталоге, который задан параметром path в ресурсе [netlogon] (то есть ка-то так: [netlogon]\scripts\login.bat). Очень важно этот батник редактировать из Windows. Либо из Linux, но потом преобразовывать в Windows-формат утилитой unix2dos. В netlogon можно и не указывать этот параметр, тогда будет использоваться путь по умолчанию. можно посмотреть командой testparm -sv.
Если у [homes] не указан path, то он берется из параметра template homedir, который можно узнать, выполнив testparm -sv, либо используется домашний каталог Linux – /home (на счет последнего – не уверен…)
Подключать дополнительные шары можно с помощью того же logon script, в котором использовать команду net use. Справка по ней есть в венде.
Спасибо вам за развернутый ответ, теперь все стало понятно. На работе у нас все документы хранятся в общих папках рабочей группы, небольшой филиал ВУЗа, вот я и подумал, что надо организовать хранение файлов в более защищенном месте. Доменные учетные записи и самбовые шары с ограничением доступа – самое то. Не уверен только, что стоит использовать перемещаемые профили.
Да, перемещаемые профили это штука удобная, но трудоемкая. Как вариант, если не хочется самому с самбой возиться, можно использовать готовое решение вроде Zentyal. Хотя тоже требует определенных навыков. Когда сам разбираешься – легче справиться с последующими проблемами.
Ну думаю, что справлюсь и сам, штат у нас небольшой, все можно сделать просто руками с терминала, главное – задокументировать что и как сделано. )
Это самое главное
Здравствуйте еще раз, простите за кучу вопросов, но возникла еще парочка. В общем сегодня ненароком столкнулся с проблемой ввода нового компьютера в домен, как я сейчас понял, я просто удалил из конфигурационного файла строки:
add user script = /usr/sbin/useradd -m -G users ‘%u’
delete user script = /usr/sbin/userdel -r ‘%u’
add group script = /usr/sbin/groupadd ‘%g’
delete group script = /usr/sbin/groupdel ‘%g’
add user to group script = /usr/sbin/usermod -a -G ‘%g’ ‘%u’
add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody ‘%u’
Видимо причиной ошибки у меня было то, что я убрал add machine script. Правильно ли я понимаю, что при вводе любого компьютера в домен Samba спрашивает у него имя и автоматически выполняет add mashine script, добавляя имя этого компьютера в unix-пользователи?
Мне не совсем понятно назначение этих скриптов. Видимо часть из них служат для управления пользователями с помощью утилиты из пакета SRVTOOLS для Windows? Но видимо, часть из них выполняется автоматически. Однако, ведь чтобы добавить samba-пользователя, нужно: 1) добавить unix-пользователя, 2) добавить его в базу samba (например через smbpasswd -a). В вышеприведенных скриптах добавляется только unix-пользователь. Как он далее добавляется в базу samba? Я добавление пользователей делаю простым скриптом, который создает пользователя, выполняет smbpasswd -a, создает каталоги пользователя. Скрипт читает файл в коротом построчно прописаны? пользователь пароль группа. Но тут что-то другое.
Кажется понял, часть этих параметров помогает утилитам типа RSVTOOLS управлять пользователями и группами, а вот add machine script работает по иному. Дело в том, что чтобы авторизовать пользователя в домене, сначала нужно обязательно добавить в домен локальный компьютер, за который сел пользователь. Есть два (на самом деле 3) пути:
1) Ручной способ (добавляем пользователя “имяКомпьютера$”, блокируем его и добавляем его как машинного в smbpasswd)
useradd -g machines -N -M -s /bin/false имяКомпьютера$
passwd -l имяКомпьютера$
smbpasswd -a -m имяКомпьютера$
2) “Автоматический” и рекомендуемый способ (прописать в [global] секцию smb.conf параметр:
add machine script = useradd -M -N -s /bin/false -g machines %u
Одного не могу понять почему в smb.conf мы указываем в параметре скрипта только добавление unix-пользователя (компьютера). Самба сама дальше добавляет его в свои пользователи (к примеру через smbpasswd -a -m)? Почему в этом скрипте не пишется полная последовательность ручных действий.
Ну все, разобрался. Уже отписался на УбунтуФоруме, но напишу и тут. Посмотрел ман по самба. Привожу свой вольный перевод:
——————
Третий (и рекомендуемый) путь создания Машинных Аккаунтов это простое разрешение Samba-серверу создавать их когда это необходимо во время присоединения клиента к домену. Однако, при этом для каждого Машинного Samba-аккаунта требуется корреспондирующий UNIX-аккаунт, обычно используется метод автоматического создания UNIX-аккаунтов, это описывается в smb.conf через “add machine script”. Хоть это и не обязательно, корреспондирующие UNIX-аккаунты могут быть созданы вручную.
Пример из Red Hat Linux:
[global]
add machine script = /usr/sbin/useradd -d /var/lib/nobody -g 100 -s /bin/false -M %u
——————
То есть еще раз: Самба сама автоматически “подключает” машинные аккаунты (то, что делает smbpasswd -a -m), при одном условии: в системе должен присутствовать соответствующий Unix-аккаунт для машины.
Отличный разбор. Уважаю людей, которые самостоятельно способны разобраться в документации
P.S. Недавно мне пришлось восстанавливать конфигурацию samba со сгоревшего железа на новое. Ох как я пожалел, что не бэкапил каталоги /var/cache/samba, /var/spool/samba и /var/lib/samba. В которых хранится вся доменная конфигурация в файлах tdb и ldb. Одного smb.conf ох как недостаточно. Так что, если придется бэкапить конфигурацию домена и используется бекэнд tdbsam для паролей и соответствия SID<->UNIX, то желательно бэкапить вместе с smb.conf все каталоги, которые покажет команда testparm -sv | grep var.
Да, это надо иметь в виду, спасибо вам за совет =). Но начать я думаю надо с raid1 массива и ИБП для сервера. Сейчас копаю в сторону перенаправления каталогов (путем использования дефолтного профиля в [netlogon] или простого задания параметров реестра через login.bat). Насчет перемещаемых профилей даже с перенаправляемыми каталогами что-то стал вомневаться… Не хочу воевать с неверной синхронизацией автономных файлов при погасании света в грозу и отпадывании клиентов. Думаю отключить вообще автономные файлы на клиентах и ограничиться перенаправлением Документов и Рабочего стола в личные каталоги пользователей на сервере.
Да, синхронизация может работать некорректно, т.к. unix атрибуты файловой системы и время доступа может некорректно обрабатываться клиентами Windows и из-за этого могут возникать проблемы при синхронизации. К тому же для не слишком грамотного пользователя объяснить, что такое синхронизация и как она работает – это тяжело
Здравствуйте еще раз!
Простите, наверное уже замучал вас вопросами, но хочу спросить еще кое что.
Вы в статье делаете самбу WINS-сервером, в конфиге dhcp-сервера в опции domain-name задается доменное имя (видимо участка сети), такое же как имя домена samba. Экспериментируя на работе, я сделал аналогично, теперь компьютеры можно пинговать по netbios-именам, однако, если пинговать windows-компьютер как ping comp.domain – это уже не работает.
И я немного не допонимаю суть связки WINS-сервера и директивы domain-name dhcp-сервера. Вот с опцией option netbios-name-servers все кажется понятно, прямое указание на WINS-сервер.Но в чем сакральный смысл директивы domain-name с dhcp-сервера.
День добрый. Хороший вопрос. Я бы сказал – отличный Тут важно понимать разницу между WINS и DNS.
А так же, необходимо понимать принцип работы DNS.
Эти 2 понятия между собой с технической точки зрения – почти не взаимодействуют. (“почти” – потому что в одной сети могут работать и WINS и DNS и использовать одинаковые имена машин)
WINS работает по протоколу NetBios, DNS работает несколько “выше” в модели OSI. Кроме того, WINS – это “плоская” структура имен, то есть она не умеет работать с FQDN именами вида comp.DOMAIN..
В статье я привел “типовой” конфиг DHCP и параметры domain-name-servers и domain-name будут актуальны только если на хосте с самбой установлен DNS сервер и он обслуживает зону “DOMAIN.”. Ну или хотя бы кэширующий DNS-сервер, но при кэширующем не будет актуален параметр domain-name “DOMAIN”.
В моем примере сеть работает только на WINS, то есть разрешение имен будет работать только вида comp (без .DOMAIN).
В целом, разрешение имени в Вашем случае можно описать так (используется протокол NetBIOS через TCP/IP):
1. Определяется, не превышает ли длина имени 15 символов и не содержатся ли в нем точки (.). В любом из этих случаев делается запрос имени к службе DNS.
– В Вашем случае, при обнаружении точки, хост пытается опросить DNS, которого не существует. Соответственно, результат – никакой.
2. Определяется, не хранится ли имя в кэше удаленных имен на компьютере клиента.
3. Выполняется обращение к настроенным для данного клиента WINS-серверам и делается попытка разрешить имя с помощью службы WINS.
4. Используются локальные широковещательные рассылки по протоколу IP в подсети.
5. Проверяется файл Hosts.
6. Запрашивается DNS-сервер.
В итоге, разрешение имени завершается неудачно на первом шаге.
Как-то так…
Надеюсь, понятно объяснил…
дополнил конфиг dhcp соответствующим комментарием.
Да, спасибо за развернутый ответ, все стало понятно. Надо будет попробовать поднять bind для привязки к самбе (и не только), там как я понимаю будет ddns, для авторегистрации разрешенных клиентов в локальной днс. Сейчас у меня работает dns, это dnsmasq, пытался поднять bind, но не нашел как на нем сделать одну жизненно мне необходимую вещь. Надо читать книжку, в типовых примерах я этого не нашел, но в планах есть.
да, что-то вроде ddns + dhcp, но не приходилось к самбе такое прикручивать, поэтому вряд ли тут что-то подскажу…
вот тут http://samba-doc.ru/samba3example/01sec.html#secdhcpdns хорошие примеры, но нужно их адаптировать под конкретную конфигурацию…
Да, сегодня как раз это почитывал, надо будет разобраться. Хотя мне для моей конторки хватит конечно и WINS.
server:~# bash
samba:~#
подскажите что происходить при данном действии.
чтобы понять, что происходит при этом, нужно почитать статью Как запускается Linux и Как работает bash.
Евли в 2х словах – то происходит запуск новой копии bash.
Здравствуйте!
Прокопался почти месяц и тестово запустил samba+LDAP, возможно вам будет интересно: http://dl.dropbox.com/u/4427808/story/ldapSamba.odt В будущем хочу сделать это на Debian, но в общем и Ubuntu LTS мне кажется хорошим вариантом, если ставить только заплатки безопасности.
Спасибо, gard. Вполне неплохо написано. Единственный нюанс – человеку, у которого знаний в LDAP чуть больше чем ноль (например мне ) ) можно будет сломать голову
Если хочешь, размещу твой мануал вложением в статье. Только предварительно оформи его в pdf.
Есть в pdf: http://dl.dropbox.com/u/4427808/story/ldapSamba.pdf
Размещать ли его вложением, прямо затрудняюсь ответить. В принципе с этим материалом можно делать что угодно. Я его выложил на Убунту-форуме, вдруг кому то пригодится. Что интересно… сегодня попробовал развернуть описанную схему на Debian, если использовать libnss-ldapd вместо libnss-ldap (как в хаутушке), то настройка упрощается, уже не нужно создавать описание БД с корневым элементом для LDAP, конфигуратор задаст пару вопросов и сделает все сам (и прямо точно так же как в хаутушке, вот откуда оказывается умолчальные значения параметров БД =). Мне кажется в хаутушке есть пара неточно (даже неверно) отвещенных мной моментов. К примеру misc-схема вообще оказывается не нужна для текущей задачи. Ну в общем нужно пробовать и тогда все становится более менее понятно. Ну и не мог я не поделиться, все таки вы мне порядком помогли в копании с Samba =). Используйте хаутушку как хотите, если у вас дойдут руки до тестирования этого всего, к примеру на том же Debian, то буду только рад, если на основе одной появится другая, более точная и актуальная хаутушка.
На Debian SAMBA+LDAP очень вряд ли буду это делать. Только если в качестве спортивного интереса, но на это нужно время, которое можно потратить на более актуальные задачи Да и мое ИМХО – делать домен на SAMBA в сети с количеством пк\пользователей более 10-30 это довольно трудоемко, а для 10-30 вполне справится с такой задачей и хранение учеток в tdbsam. Хотя… Если хорошо разбираешься в LDAP, то однозначно это удобней, чем tdbsam.
Разбираюсь я наверное не сказать что хорошо, но принцип работы стал понятен. У меня мысль еще в том, чтобы прикрутить на эти же учетки jabber-аккаунты, сейчас жабер крутится на internal методе аутентификации. Сегодня как раз попрообвал привязать его к ldap, сделал даже имитацию vcard, чтобы в ростере пользователи сидели осмысленные имена, а не jid. И удобно учетными записями управлять из веб-интерфейса. Пользователей у меня будет всего с десяток, можно конечно было бы обойтись и без ldap, схема довольно сильно упрощается. Но с другой стороны, почему бы и не попробовать с ldap.
Дойдет до того, что поставлю Zentyal и буду лежать на боку но покопаться было все равно интересно.
Да, Zentyal, это более чем законченное решение для размера такой сети
ДА, я тоже jabber хотел в перспективе настроить в связке с LDAP из AD, но это в далекой перспективе. Об этом писал еще в самом первом посте )
Здравствуйте, Mc.Sim. Спасибо за ваши статьи, самое полезное что нашел в интернете по теме простых примернов настройки dhcp, dns, samba (главное с объяснением основ, что очень хорошо для начинающих).
Возник такой вопрос, думаю простой, но для меня не очевидный:
Старался во всем следовать приведенному выше примеру, но при попытке аутентификации через smbclient получаю сообщение NT_STATUS_ACCESS_DENIED на всех логинах кроме root. Подскажите, где мог ошибиться. Заранее спасибо)
Доброго времени, михайл.
Могу предположить, что были допущены ошибки при указании паролей при выполнении smbpasswd.
Следующая ошибка может быть допущена – при задании прав на файловой системе на каталоги, которые расшарены вы самба.
Понял вас, спасибо, проверю эти места.
И еще 1 вопрос: после настройки по выше приведенному описанию, перестал работать выход в интернет на другом интерфейсе. В чем может быть проблема?
Что в данном контексте понимается под словами “другой интерфейс” и “перестал работать”? Как это проявляется?
Другой интерфейс, в смысле другой разъем Ethernet, в него подключен кабель от провайдера, перестали открываться страницы. Проблему уже решил, дело было в изменениях nsswitch.conf. Изменил его на дефолтное состояние. В связи с этим появился вопрос, как сохранить вашу конфигурацию контроллера домена и при этом сохранить доступ в интернет (в перспективе “раздать” его на клиентские машины)?
На самом деле, самба не использует резолвинг имен по DNS, но наличие записи указывающей использование данной службы в NSS не должно помешать.
Думаю, что можно без проблем прописать в nsswitch.conf:
hosts: files wins dns
и все должно работать.
Спасибо, Вам, за прекрасную статью, да и за весь блог в целом.
Для себя нашел очень много полезного. Продолжайте в том же духе.
Цербер это протокол аутентификации.
Пожалуйста, да, аутентификация будет в данном контексте – корректней…
Все перепробовал, никак не могу понять, в чем ошибка:
При попытке выполнить
net rpc rights grant
"Domain Admins"
SeMachineAccountPrivilege
SeTakeOwnershipPrivilege
SeBackupPrivilege
SeRestorePrivilege
SeRemoteShutdownPrivilege
SePrintOperatorPrivilege
SeAddUsersPrivilege
SeDiskOperatorPrivilege -Uroot
и ввода пароля рута, выдает следующее:
Could not connect to server 127.0.0.1
Connection failed: NT_STATUS_CONNECTION_REFUSED
На 3 серверах перепробовал, подскажите, куда копать?
Здравствуйте.
Покажите Ваш файл hosts.
и вывод команды netstat -nap.
дополнительно, покажите nsswitch.conf