Задача: установить на имеющуюся FreeBSD файловый сервер на базе Samba. Необходимо, чтобы файловый сервер был в домене и пускал доменных пользователей из ОС Windows.
Включаем ACLУбедитесь, что диск, который будет содержать общие ресурсы, не примонтирован, и выполните команду:
$ sudo tunefs -a enable /dev/ad1s1
где вместо /dev/ad1s1 указываем диск и слайс, на которых будут располагаться наши общие ресурсы.
Если же общие ресурсы будут находится на системном диске - т.е. отмонтировать Вы его не можете, пока система работает - то придется топать к серверу, загружаться в режиме "Single mode" и уже тогда выполнять эту команду (tunefs доступна из Single mode - проверено).
Устанавливаем Kerberos
$ cd /usr/ports/security/heimdal
$ sudo make install clean
В вывалившемся окне настроек, если не пользуем IPv6, выключаем его. Для того, чтобы можно было работать с OpenLDAP с использованием Kerberos - ставим соответствующую галочку.
Теперь идем в /etc и создаем файл krb5.conf вот такого вида:
[libdefaults]
default_realm = MYDOMAIN.RU
clockskew = 300
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
[realms]
MYDOMAIN.RU = {
kdc = pdc.mydomain.ru
admin_server = pdc.mydomain.ru
default_domain = mydomain.ru
}
OTHER.REALM = {
v4_instance_convert = {
kerberos = kerberos
computer = pdc.mydomain.ru
}
}
[domain_realm]
.mydomain.ru = MYDOMAIN.RU
здесь
- вместо MYDOMAIN.RU и mydomain.ru вводите название своего домена
- в опции kdc меняем pdc.mydomain.ru на сетевое имя или IP Вашего контроллера домена (одного)
- в опции admin_server меняем pdc.mydomain.ru на сетевое имя или IP Вашего контроллера домена (одного). Можно использовать то же имя, что и в kdc
- в опции computer меняем pdc.mydomain.ru на сетевое имя или IP Вашего контроллера домена (одного)
Синхронизируем времяДля успешной аутентификации необходимо, чтобы время на сервере FreeBSD и контроллерах домена Windows шло одинаково - это непременное требование, несоблюдение которого грозит отказом со стороны контроллера домена в выдаче разрешений.
$ sudo ntpdate pdc.mydomain.ru
где вместо pdc.mydomain.ru указывайте сетевое имя или IP Вашего контроллера домена.
Проверяем
$ sudo kinit -p domainadminuser
где вместо domainadminuser вводите логин администратора домена (если Вы таковым являетесь - вводите свой логин). Указывать "@MYDOMAIN" или "MYDOMAIN\" не нужно!
Вас запросят пароль для данного юзера - вводите его. Если все хорошо - система просто ничего не скажет. Иначе она сигнализирует об ошибке.
Проверяем дальше:
$ sudo klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: mydomainadmin@MYDOMAIN.RU
Issued Expires Principal
Sep 13 18:23:49 Sep 14 04:23:49 krbtgt/MYDOMAIN.RU@MYDOMAIN.RU
Если ответ похож на тот, что выше - значит мы все делаем правильно и можно продолжать.
Настройка nsswitchТеперь идем в /etc и правим файл nsswitch.conf. Оставляем в нем только следующие записи:
passwd: files winbind
group: files winbind
hosts: files dns
Теперь устанавливаем Samba
$ cd /usr/ports/net/samba35
$ sudo make install clean
На самом деле у Вас может быть последней самба уже не 3.5 (samba35), а выше. Соответственно, название каталога можеть быть немножко другим.
В конфигураторе я выбирал следующие опции (заметьте, что я не поднимал сервер печати CUPS на этом сервере SAMBA, потому опцию CUPS я не указывал):
- LDAP
- ADS
- WINBIND
- SWAT
- ACL_SUPPORT
- FAM_SUPPORT
- SYSLOG
- QUOTAS
- PAM_SMBPASS
- PORT
SWAT включайте в случае, если Вы хотите немного полениться и выполнять настройку SAMBA через веб-консоль. ;)
По пути компиляции у Вас могут запросить еще несколько раз "отметить опции".
Теперь топаем в /etc и открываем на редактирование файл rc.conf. Вот какие строчки нужно дописать или убедиться, что они есть:
inetd_enable="YES"
nmbd_enable="YES"
smbd_enable="YES"
winbindd_enable="YES"
Открываем файл inetd.conf (находящийся здесь-же - в /etc) и раскомментируем следующую строчку:
swat stream tcp nowait/400 root /usr/local/sbin/swat swat
Перезагружаем сервер (можно и каждую службу стартануть вручную, но если есть возможность ребутнуться - давайте не будет ее упускать):
$ sudo reboot
Настройка SambaТ.к. мы ленивые и включили SWAT в настройках inetd, да и сам inetd включили, то настраивать мы будем не через конфиг-файл (кстати, лежит он по адресу "/usr/local/etc/smb.conf"), а через веб-консоль.
Да-да, у Samba есть веб-консоль управления, называемая SWAT. Чтобы попасть в нее - набираем в строке браузера:
http://192.168.0.1:901где вместо 192.168.0.1 вводим IP адрес сервера, вводим логин "root" и рутовый для этого сервера пароль - и мы в консоли управления.
Через эту консоль управления задаем необходимые параметры и сохраняем их с помощью кнопки "Commit" (или "Сохранить", если, как у меня, SWAT показал свою сущность в русском языке).
Пример настройки
Итак, переходим к вкладке "Wizard".
- Тип сервера ставим "Член домена".
- Настроить WINS как: "Не использовать" или "Клиент другого WINS сервера".
- Удаленный сервер WINS: Указываем WINS сервер Вашего домена (если он есть). При этом "Настроить WINS как" должно быть "Клиент другого WINS сервера".
- Сделать доступными домашние каталоги: Нет (нафига пользователям видеть папки /home/... пользователей сервера FreeBSD).
Жмем "Сохранить".
Теперь идем на вкладку "GLOBALS" и задаем необходимые параметры. Я рекомендую выбирать режим "Сложный" - есть некоторый набор опций, который нужно поменять, но которые не видны из "Простого" режима.
Вот что у меня прописано на этой странице (привел только основные параметры):
- dos charset = CP866
- unix charset = KOI8-R (тут ставите ту кодировку, которая используется на Вашем FreeBSD сервере. Т.е. если Вы используете UTF-8 в консоли - то ставите UTF-8)
- display charset = CP866
- workgroup = MYDOMAIN (тут указываете имя Вашего домена)
- realm = MYDOMAIN
- netbios name = MYSERVER (имя сервера)
- netbios aliases =
- netbios scope =
- server string = Samba Server (тут можете писать то, что Вам хочется - название сервера, например, или его описание)
- interfaces =
- bind interfaces only = No (укажите в interfaces нужные интерфейсы, через которые слушать трафик Самбе, и поставьте эту опцию = Yes в случае, если Вы хотите ограничить работу сервера общих папок только конкретной сетевой картой)
- security = DOMAIN
- auth methods = winbind
- encrypt password = Yes
- update encrypted = Yes
- client schannel = Auto
- server schannel = Auto
- allow trusted domains = Yes
- map to guest = Never
- null passwords = No
- obey pam restrictions = No
- password server = * (или укажите IP адрес контроллера домена)
- smb passwd file = /usr/local/etc/samba/smbpasswd
- private dir = /usr/local/etc/samba
- passdb backend = tdbsam
- algoriphmic rid base = 100
- root directory =
- guest account = nobody
- enable privilages = Yes
- pam password change = No
- passwd program =
- check password script =
- username map =
- password level = 0
- username level = 0
- user password sync = No
- restrict anonymous = 0
- lanman auth = No
- ntlm auth = Yes
- NTLMv2 auth = No (кстати, могут быть проблемы с доменами WS2008R2, если включить этот параметр - судя по информации из форумов)
- client lanman auth = No
- client plaintext auth = No
- client use spnego principal = No
- invalid users = (здесь можно указать - каким пользователям и группам нельзя работать с Самбой на глобальном уровне, т.е. вообще; перечисление через запятую, названия групп начинаются с собачки @)
- valid users = (если пустой - то ничего не запрещает, иначе здесь можно указать пользователей и группы, только которым можно работать с сервером - другие работать не смогут)
- admin users = (здесь перечисляются пользователи и группы, которые наделены админскими правами - могут все в Samba)
- read list = (перечисленным здесь пользователям дается доступ только на чтение)
- write list = (перечисленным здесь пользователям дается доступ на чтение и запись)
- acl check permissions = Yes
- acl group control = Yes
- acl map full control = Yes
- create mask = 0744 (маска создаваемых файлов в папках)
- security mask = 0777 (маска атрибутов, которые может менять пользователь Windows через обычное окно "Безопасность" в проводнике. 0777 указывает, что пользователь может менять все атрибуты)
- directory mask = 755 (маска создаваемых папок)
- directory security mask = 0777 (то же, что и security mask - для директорий)
- force unknown acl user = Yes (позволяет отображать пользователя/группу "Неизвестный" в окне "Безопасность" проводника Windows в случае, если файл был создан не через Samba, а с самого сервера пользователем, который не светится через авторизацию самба - например, локальным пользователем самого сервера)
- hosts allow = (если пустой, то ничего не запрещает; иначе можете указать здесь IP адреса или сети, которым позволено работать с Samba, остальные (не попадающие в этот список) компьютеры допущены не будут)
- hosts deny = (здесь можно указать IP адреса или сети компьютеров, которым с Samba работать нельзя)
- kerberos method = default
- map untrusted to domain = No
- max protocol = NT1 (можно установить как SMB2 - это протокол, максимально совместимый с Windows Vista и выше, но пока находится в режиме "экспериментальный")
- min protocol = CORE
- ea support = No (не нужен нам доступ с OS/2)
- nt acl support = Yes (а вот ACL Windows нам нужен)
- nt pipe support = Yes
- nt status support = Yes
- profile acls = No (включать следует только для Windows 2000 и Windows XP без ServicePack - т.е. не нужно)
- anounce as = NT
- map acl inherit = Yes (на самом деле полезная опция, при включении ее ACL - т.е. права - наследуются, как это происходит в самой Windows... однако создатели Samba заявляют, что работать данная опция будет только на Linux. К сожалению, на момент написания статьи я еще не успел проверить данный факт)
- case sensetive = No (т.к. Windows не различает большие и маленькие буковки - то и Sambe этого делать не стоит)
- hide dot files = Yes (скрывать - не показывать для клиентов Windows - файлы с точкой в начале имени, т.е. те файлы, которые традиционно считаются скрытыми в Unix)
- hide unwritable files = No (забавная опция, которая позволяет не показывать пользователям файлы, к которым у них нет доступа на запись)
- map archive = Yes (пробрасывать атрибут "Архивный" в стандартный диалог проводника)
- map hidden = No (то-же - для "Скрытый")
- map system = No (то-же - для "Системный")
- map readonly = Yes (то-же - для "Только для чтения")
- idmap uid = 10000-20000 (диапазон UID для того, чтобы Idmap мог замапить доменных пользователей в локальных - без этого работать не будет. Не должен пересекаться с диапазоном используемых локально пользователей - см /etc/passwd)
- idmap gid = 10000-20000 (диапазон GID для того, чтобы Idmap мог замапить доменные группы в локальные - без этого работать не будет. Не должен пересекаться с диапазоном используемых локально групп - см /etc/group)
При необходимости можно прочитать справку по каждой опции (на английском) - кликнув на ссылку "Справка" рядом с опцией.
И нажимаем на "Соханить изменения".
Теперь переходим на вкладку "STATUS" и перезапускаем всех связанных демонов кнопкой "Перезапустить все".
PS. Внимательно все настраивайте. Так, не указание winbind в качестве службы авторизации (параметр auth methods), или не указание диапазона UID и GID для Idmap... или еще какой промах - и с авторизацией начнутся танцы.Включаем сервер в доменВыполняем:
$ sudo net ads join -U domainadminuser
Using short domain name -- MYDOMAIN
Joined 'SERVERNAME' to realm 'mydomain'
здесь вместо domainadminuser введите логин доменного администратора.
Заметка. При этом служба winbindd может не запуститься ранее из-за того, что в домен компьютер заведен не был. Поэтому после того, как Вы добавите его в домен - вручную запустите эту службу (хотя бы даже через SWAT).
Проверяем, что к домену подсоединились успешно и winbind работает нормально:
$ sudo wbinfo -t
checking the trust secret for domain MYDOMAIN via RPC calls succeeded
Теперь проверяем, что winbind видит пользователей и группы в домене, а так-же проходим аутентификацию:
$ sudo wbinfo -u
$ sudo wbinfo -g
$ sudo wbinfo -a domainuser%mysuperpassword
Создаем папки общих ресурсовВ консоли топаем в директорию, где хранятся общие ресурсы и создаем новую папку. Эта папка будет использована как хранилище общего ресурса - т.е. именно в ней будут находится файлики и под-папки новой шары.
Например
$ cd /sharesdisk
$ sudo mkdir share1
$ sudo chmod 777 share1
Как видно, мы дали права на запись в данную директорию всем и вся со стороны сервера Unix. Это необходимо - без этого ничего через Samba сделать внутри директории не получается.
Возвращаемся в SWAT и переходим на вкладку SHARES. Здесь Вы можете создавать общие ресурсы. Все относительно просто и понятно.
Для создания ресурса - введите его имя (как оно будет отображаться при входе на сервер через сеть из Windows) и нажмите "Создать ресурс"
Далее указываем параметры ресурса.
- comment : Комментарии
- path : Путь к директории на сервере FreeBSD - к папке, созданной выше
- invalid users : Пользователи, которым нельзя работать с ресурсом
- valid users : Если не указано, то ничего не запрещает (всем можно смотреть); иначе здесь можете перечислить пользователей и группы, только которым можно заходить в эту папку (например, "director, @buhgalteria")
- admin users : Пользователи, имеющие максимальные права - администраторы
- read list : Этим пользователям и группам можно только читать файлы, но не писать в них (и папки)
- write list : Пользователи и группы с правами Read-Write.
- read only : Ресурс находится в режиме "Только чтение". Следует заметить, что для пользователей из списков "read list" и "write list" этот параметр неважен - Samba для них игнорирует "read only".
- acl group control : Включить ли поддержку ACL
- force unknown acl user : позволяет отображать пользователя/группу "Неизвестный" в окне "Безопасность" проводника Windows в случае, если файл был создан не через Samba, а с самого сервера пользователем, который не светится через авторизацию самба - например, локальным пользователем самого сервера
- guest ok : позволять ли вход "гостям", т.е. неавторизованным пользователям
- hosts allow : позволять доступ только с перечисленных компьютеров или сетей (ничего не запрещает, если параметр пустой)
- hosts deny : запрещять доступ с перечисленных компьютеров или сетей
- map acl inherit : Наследовать права доступа от родительского объекта
- case sensetive : Учитывать регистр в названиях файлов и папок (рекомендую снять - винда то регистр не учитывает)
- browsable : показывать папку при входе на сервер через сетевое окружение (аналог виндового sharename$)
- access based share enum : Если включить, то папка в проводнике при заходе на сервер будет видна только пользователям, которые могут в нее заходить (имеют права на чтение или запись). Аналог появившейся опции в WS2008. Т.е. те пользоватли, которых все равно не пустило бы в папку из-за нехватки прав - эту папку просто не увидят.
- available : Включить или выключить данный общий ресурс. Т.е. можно временно выключить данную папку, не удаляя ее объявление из Samba.
После этого сохраняем ресурс.
ПроверяемТеперь в проводнике Windows набираем адрес нашего сервера и мы должны увидеть созданную папку так-же, как будто зашли на компьютер с Windows на борту.
Комментарии
Оставить комментарий
Операционная система LINUX
Термины: Операционная система LINUX