Домен/Windows/Manual: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «Предполагается, что домен ALT Linux создан должным образом и работает. = Настройка сер...»)
 
 
(не показано 7 промежуточных версий 2 участников)
Строка 25: Строка 25:
sed -i "/^[global]$/a workgroup = ${SMBDOMAIN}" /etc/samba/smb.conf</source>
sed -i "/^[global]$/a workgroup = ${SMBDOMAIN}" /etc/samba/smb.conf</source>


<div style="border: 1px solid red;padding: 5px">
{{Attention|Во избежание проблем с вводом Windows имя рабочей группы нужно делать ''не более 15 символов''[http://en.wikipedia.org/wiki/NetBIOS#NetBIOS_name].}}
'''Внимание!''' Во избежание проблем с вводом Windows имя рабочей группы нужно делать ''не более 15 символов''[http://en.wikipedia.org/wiki/NetBIOS#NetBIOS_name].</div>


Если хотите автоматически подключать общую папку (ресурс {{term|share}} на сервере как диск {{term|S:}}), то выполните следующее:
Если хотите автоматически подключать общую папку (ресурс {{term|share}} на сервере как диск {{term|S:}}), то выполните следующее:
Строка 112: Строка 111:
Список входящих в эту группу:
Список входящих в эту группу:
  # net sam listmem 'Domain Users'
  # net sam listmem 'Domain Users'
= Скрипт при входе =
При входе можно запускать скрипт в формате bat. Для этого в {{path|/etc/samba/smb.conf}} нужно добавить раздел описания ресурса {{term|netlogon}}:
<source lang=ini>[netlogon]
comment = Network Logon Service
path = /etc/samba/netlogon
guest ok = yes
writable = no
browseable = no</source>
Подразумевается, что скрипт netlogon.bat помещается в созданный каталог {{path|/etc/samba/netlogon}}. Сам скрипт объявляется в разделе {{path|[global]}} файла {{path|/etc/samba/smb.conf}} так:
<source lang=ini>logon script = netlogon.bat</source>
Его содержимое:
<source lang=Bash>net use s: \\main\share</source>
'''Примечание:''' концы строк в файле bat должны быть в стиле dos (\r\n) (режим '':set ff=dos'' в vim).


= Решение проблем =
= Решение проблем =
Строка 141: Строка 156:


== Нюансы реализации ==
== Нюансы реализации ==
# Для заведения компьютеров в домен недостаточно типа sambaSAMAccount, потребовалось добавить тип posixAccount (для поиска имени компьютера используется {{cmd|getent passwd}}, хотя это совершенно странно), заводить одноимённую группу и сделать её основной для posixAccount.
# Для заведения компьютеров в домен потребовалось добавить тип {{term|posixAccount}} (для поиска имени компьютера используется {{cmd|getent passwd}}, хотя это совершенно странно), заводить одноимённую группу и сделать её основной для {{term|posixAccount}}. Более того, при указании при создании рабочей станции типа {{term|sambaSAMAccount}} вход в домен с первой попытке не сработает, потребуется второй раз входить.
# Для заведения доверенных компьютеров необходимо использовать {{cmd|ldap-useradd -w -i}}. Имя компьютера в таком случае содержит в конце символ {{term|$}}.
# Для заведения доверенных компьютеров необходимо использовать {{cmd|ldap-useradd -w -i}}. Имя компьютера в таком случае содержит в конце символ {{term|$}}.
# Длина имени workgroup не должна превышать 15 символов (см. http://en.wikipedia.org/wiki/NetBIOS#NetBIOS_name)
# Длина имени workgroup не должна превышать 15 символов (см. http://en.wikipedia.org/wiki/NetBIOS#NetBIOS_name)
= Известные проблемы =
# Windows 7 сообщает о том, что невозможно сменить имя DNS основного контроллера домена для компьютера, вводимого в домен
# ''net sam listmem 'Domain Users''' не показывает пользователей, хотя они находятся в группе
# При добавлении пользователя
# net user add petrov -Ucas%12345
Failed to add user 'petrov' with error: A device attached to the system is not functioning..
Пользователь при этом создаётся, пароль не устанавливается.
'''Ещё проблема+решение ниже:''' при попытке подключения к samba-шаре по из-под Windows XP и с МФУ (т.н. сканирование в папку SMB) логин и пароль не принимаются, возникает ошибка:
# ntlm_password_check: NTLMv1 passwords NOT PERMITTED for user
Для решения проблемы прописываем в конфиг smb.conf (секция GLOBAL) на сервере следующее:
# ntlm auth = yes


= Литература =
= Литература =
Строка 152: Строка 183:
* [http://www.linux.org.ru/forum/admin/6798226 Samba PDC LDAP добавление компов в домен]
* [http://www.linux.org.ru/forum/admin/6798226 Samba PDC LDAP добавление компов в домен]


[[Категория:Руководства]][[Категория:Домен]]
[[Категория:Руководства]]
{{Category navigation|title=Домен|category=Домен|sortkey={{SUBPAGENAME}}}}

Текущая версия от 14:16, 27 июля 2017

Предполагается, что домен ALT Linux создан должным образом и работает.

Настройка сервера

1. В секции [global] файла /etc/samba/smb.conf добавьте:

local master = yes
preferred master = yes
domain master = yes
domain logons = yes	
add user script = /usr/sbin/ldap-useradd "%u"
delete user script = /usr/sbin/ldap-userdel "%u"
add group script = /usr/sbin/ldap-groupadd -p "%g"
delete group script = /usr/sbin/ldap-userdel "%g"
add user to group script = /usr/sbin/ldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/ldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/ldap-usermod -g "%g" "%u"
add machine script = /usr/sbin/ldap-useradd -w -i "%u"
ldap machine suffix = ou=Computers
encrypt passwords = yes
ldap delete dn = no

Внимание! При использовании домена в Windows будет использоваться имя рабочей группы WORKGROUP (параметр workgroup в /etc/samba/smb.conf). Вы можете поменять его на имя ALT-домена:

SMBDOMAIN="$(system-auth status | cut -f2 -d' ' | sed -e 's/dc=//g;s/,/./g;s/\(.*\)/\U\1/')"
sed -i "/^[global]$/a workgroup = ${SMBDOMAIN}" /etc/samba/smb.conf
Внимание! Во избежание проблем с вводом Windows имя рабочей группы нужно делать не более 15 символов[1].


Если хотите автоматически подключать общую папку (ресурс share на сервере как диск S:), то выполните следующее:

echo "net use s: \\\\$(hostname -s)\share" | sed 's/$/\r/' > /etc/samba/netlogon.bat
sed -i "/^[global]$/a logon script = /etc/samba/netlogon.bat" /etc/samba/smb.conf

2. Перезапустите службу smb и запустите службу nmb:

service smb restart
service nmb start

Службу nmb нужно добавить в автоматический запуск:

chkconfig nmb on

3. Обновите ldap-user-tools до версии 0.8.0 или более позднее.

Создание групп и выдача административных привилегий

1. Сначала нужно назначить пользователя-администратора. Для прав на выдачу привилегий у него должен быть uid равный 0. Тогда он может назначать привилегии через net rpc rights. Заведите временно пользователя в LDAP (например, admin), задайте ему пароль и поменяйте uidNumber так:

ADMINUID="$(ldap-getent passwd admin uidNumber)"
echo "uidNumber:0" | ldap-usermod replace admin

2. В LDAP создайте группы через веб-интерфейс или из командной строки:

ldap-groupadd Admins
ldap-groupadd Users
ldap-groupadd Guests
ldap-groupadd Computers

Эти группы понадобятся для привязки к группам домена согласно таблице:

Группа LDAP Группа Windows Идентификатор в Windows
Admins Domain Admins 512
Users Domain Users 513
Guests Domain Guests 514
Computers Domain Computers 515

Добавьте туда пользователей через веб-интерфейс или из командной строки:

echo 'memberUid:cas' | ldap-groupmod add Admins

3. Привяжите группы LDAP к группам домена

net groupmap add rid=512 ntgroup="Domain Admins" unixgroup=Admins
net groupmap add rid=513 ntgroup="Domain Users" unixgroup=Users
net groupmap add rid=514 ntgroup="Domain Guests" unixgroup=Guests
net groupmap add rid=515 ntgroup="Domain Computers" unixgroup=Computers

Проверка:

# net rpc group members 'Domain Admins' -Uadmin%12345
WORKGROUP\cas

Примечание: Обратите внимание, пароль можно указывать у имени пользоватeля через «%».

4. Выдайте привилегии для группы Domain Admins:

net rpc rights grant "Domain Admins" SeMachineAccountPrivilege SePrintOperatorPrivilege \
SeAddUsersPrivilege SeDiskOperatorPrivilege SeRemoteShutdownPrivilege -Uadmin%12345

Проверка (просмотр всех привилегий по группам):

net rpc rights list accounts -Uadmin

Примечание: обратите внимание, что для заведения компьютера в домен нужно входить в группу с привилегией SeMachineAccountPrivilege.

5. Чтобы не было коллизий с системным пользователем root, после операции по назначению группы и привилегий этого пользователя нужно удалить или восстановить его UID:

echo "uidNumber:$ADMINUID" | ldap-usermod replace admin

6. Проверяем вход в домен администратора cas:

# net join -Ucas%123
Joined domain WORKGROUP.

Примечание: проверять вход в домен на сервере следует от пользователя, входящего в группу 'Domain Admins'. Остальным это запрещено. Список зарегистрированных компьютеров можно посмотреть командой:

ldap-getent ws

Всё в порядке, можно вводить компьютеры с Windows в наш домен.

Права доступа

По умолчанию разрешено входить всех доступным пользователям. Посмотреть их список на сервере можно командой:

# net sam list users

Для пользователей, входящих в группу Domain Users (или группу Users в LDAP) имеется доступ на диск Z: (домашняя папка пользователя на сервере с создаваемым подкаталогом profile).

Список входящих в эту группу:

# net sam listmem 'Domain Users'

Скрипт при входе

При входе можно запускать скрипт в формате bat. Для этого в /etc/samba/smb.conf нужно добавить раздел описания ресурса netlogon:

[netlogon]
comment = Network Logon Service
path = /etc/samba/netlogon
guest ok = yes
writable = no
browseable = no

Подразумевается, что скрипт netlogon.bat помещается в созданный каталог /etc/samba/netlogon. Сам скрипт объявляется в разделе [global] файла /etc/samba/smb.conf так:

logon script = netlogon.bat

Его содержимое:

net use s: \\main\share

Примечание: концы строк в файле bat должны быть в стиле dos (\r\n) (режим :set ff=dos в vim).

Решение проблем

Если что-то пошло не так...

Если в результате экспериментов сломались привилегии или что-нибудь ещё, нужно очистить внутренние базы Samba. Выполните

rm -f /var/lib/samba/*.tdb
service smb restart

Отладка Samba

Полезно включить уровень отладки 5 в /etc/samba/smb.conf:

log level = 5

После этого необходимо перечитать конфигурацию:

service smb reload

Подробный журнал работы Samba вы можете найти в файле /var/log/samba/log.main.

Смена имени сервера Samba

Так как при создании нового пользователя в домене для него прописывается SID, при смене имени сервера серверная часть SID меняется и пользователи со старыми SID уже недоступны, показывается примерно такое

# pdbedit -L
sid S-1-5-21-694984405-1863599809-1435972588-11002 does not belong to our domain

При этом новые пользователи заводятся уже с правильным SID. Для исправления ситуации со старыми пользователями нужно выполнить следующий скрипт:

nsid=$(net getlocalsid | cut -f2 -d: | tr -d ' ')
ldap-getent passwd \* uid SambaSID | sed 's/:.*-/ /' | while read u id;do echo "SambaSID:$nsid-$id" | ldap-usermod replace "$u";done

После этого команда

pdbedit -L

должна показать имена всех пользователей.

Нюансы реализации

  1. Для заведения компьютеров в домен потребовалось добавить тип posixAccount (для поиска имени компьютера используется getent passwd, хотя это совершенно странно), заводить одноимённую группу и сделать её основной для posixAccount. Более того, при указании при создании рабочей станции типа sambaSAMAccount вход в домен с первой попытке не сработает, потребуется второй раз входить.
  2. Для заведения доверенных компьютеров необходимо использовать ldap-useradd -w -i. Имя компьютера в таком случае содержит в конце символ $.
  3. Длина имени workgroup не должна превышать 15 символов (см. http://en.wikipedia.org/wiki/NetBIOS#NetBIOS_name)

Известные проблемы

  1. Windows 7 сообщает о том, что невозможно сменить имя DNS основного контроллера домена для компьютера, вводимого в домен
  2. net sam listmem 'Domain Users' не показывает пользователей, хотя они находятся в группе
  3. При добавлении пользователя
# net user add petrov -Ucas%12345
Failed to add user 'petrov' with error: A device attached to the system is not functioning..

Пользователь при этом создаётся, пароль не устанавливается.

Ещё проблема+решение ниже: при попытке подключения к samba-шаре по из-под Windows XP и с МФУ (т.н. сканирование в папку SMB) логин и пароль не принимаются, возникает ошибка:

# ntlm_password_check: NTLMv1 passwords NOT PERMITTED for user 

Для решения проблемы прописываем в конфиг smb.conf (секция GLOBAL) на сервере следующее:

# ntlm auth = yes

Литература