Файловый сервер на Samba 4
Так как у нас уже настроены два доменных контроллера - первичный и вторичный, не помешает добавить к ним третий сервер чисто для файлов. Задача файлового сервера - хранение файлов наших пользователей. Третий сервер будет членом домена "company.ru".
Мы могли бы держать файлы на контроллерах домена, но, разработчики Samba Team не рекомендует делать файловый сервер на контроллерах домена, вот цитата:
Whilst the Domain Controller seems capable of running as a full file server, it is suggested that organisations run a distinct file server to allow upgrades of each without disrupting the other. It is also suggested that medium-sized sites should run more than one DC. It also makes sense to have the DC's distinct from any file servers that may use the Domain Controllers. Additionally using distinct file servers avoids the idiosyncrasies in the winbindd configuration on to the Active Directory Domain Controller. The Samba team do not recommend using the Domain Controller as a file server, the recommendation is to run a separate Domain Member withfile shares.
Хотя в почтовых списках рассылки Samba4, разработчики были не против, если пользователь хотел держать файлы на DC. Кому верить даже не знаю :)
Краткое содержание:
1. Вводим третий сервер как участника домена
2. Два способа для ограничения прав на папки и файлы
3. Создаем папки для пользователей
4. Как сделать корзину
Исходные данные
10.168.50.2 - Первичный доменный контроллер
10.168.50.3 - Вторичный доменный контроллер
10.168.50.5 - Файл сервер, член домена
COMPANY.RU - Домен
1. Вводим третий сервер как участника домена
Третий сервер будет членом настроенного домена company.ru.
Открываем файл /etc/hosts
# vi /etc/hosts
Добавляем три строчки, чтобы наш клиент доменной сети мог нормально работать с доменными контроллерами:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.168.50.5 filesrv.company.ru filesrv
10.168.50.2 companypdc.company.ru companypdc
10.168.50.3 sdc.company.ru sdc
Жирным шрифтом помечены мои изменения в этом файле.
Задаем имя машины как "filesrv.company.ru" - это говорит говорит нам, что данный север имеет функцию файл сервера:
# hostnamectl set-hostname filesrv.company.ru
Обязательно, ставите в качестве DNS серверов, ваш первичный и вторичный контроллеры, без этого ничего не буде работать:
# vi /etc/resolv.conf
search company.ru
nameserver 10.168.50.2
nameserver 10.168.50.3
Настраиваем синхронизацию времени с доменным контроллером:
# yum install ntp -y
# vi /etc/ntp.conf
Добавляем строчку:
server companypdc.company.ru
Ставим службу времени в автозагрузку, чтобы постоянно в ручную не запускать:
# systemctl enable ntpd.service
Обновим время с нашего первичного AD DC сервера:
# ntpdate companypdc.company.ru
Стартуем службу времени:
# systemctl start ntpd.service
Устанавливаем Samba + Winbind:
# yum install samba samba-winbind samba-winbind-clients krb5-workstation -y
Клиентский пакет Samba 4 установлен с репозитория [хранилище программ], собирать из исходников данный пакет не требуется.
Настройка Kerberos авторизации с помощью authconfig, это очень длинная команда. Лучше вводить ее предварительно отредактировав через блокнот:
# authconfig --update \
--kickstart \
--enablewinbind \
--enablewinbindauth \
--smbsecurity=ads \
--smbworkgroup=company \
--smbrealm=company.ru \
--smbservers=companypdc.company.ru \
--winbindjoin=Administrator \
--winbindtemplatehomedir=/home/%U \
--winbindtemplateshell=/bin/bash \
--enablewinbindusedefaultdomain \
--enablelocauthorize
Жирным помечены изменения которые были внесены мною.
Запросят пароль доменного администратора.
Password for Administrator@COMPANY.RU:
*************
Запросим билет любого доменного пользователя:
# kinit Administrator@COMPANY.RU
Password for Administrator@COMPANY.RU:
************
Убедимся что билет выдан:
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@COMPANY.RU
Valid starting Expires Service principal
11/01/2015 19:09:47 11/02/2015 05:09:47 krbtgt/COMPANY.RU@COMPANY.RU
renew until 11/02/2015 19:09:43
Редактируем /etc/samba/smb.conf, вставляем текст после **end-line--:
#--authconfig--end-line--
idmap config COMPANY.LOCAL:backend = rid
idmap config COMPANY.LOCAL:base_rid = 0
idmap config COMPANY.LOCAL:range = 1000000 - 1999999
auth methods = winbind
winbind enum users = yes
winbind enum groups = yes
Примечание: утилита authconfig сама задает большой глобальный диапазон UID/GID:
"idmap config * : range=16777216-33554431"
Хотя мы в ручную задали свой:
idmap config "COMPANY.LOCAL:range=1000000 - 1999999"
Из этого следует, что свой диапазон можно не указывать.
В итоге получится примерно вот такой конфиг:
# vi /etc/samba/smb.conf
[global]#--authconfig--start-line--# Generated by authconfig on 2015/11/01 19:07:23# DO NOT EDIT THIS SECTION (delimited by --start-line--/--end-line--)# Any modification may be deleted or altered by authconfig in futureworkgroup = companypassword server = companypdc.company.rurealm = COMPANY.RUsecurity = adsidmap config * : range = 16777216-33554431template homedir = /home/%Utemplate shell = /bin/bashkerberos method = secrets onlywinbind use default domain = truewinbind offline logon = false#--authconfig--end-line--idmap config COMPANY.RU:backend = rididmap config COMPANY.RU:base_rid = 0idmap config COMPANY.RU:range = 1000000 - 1999999auth methods = winbindwinbind enum users = yeswinbind enum groups = yes
Жирным помечены мои изменения.
Проверяем конфиг, вводим команду:
# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
Ставим демоны Samba и Winbind в автозагрузку:
# systemctl enable smb
# systemctl enable winbind
Теперь надо добавить компьютер в существующий домен как участника:
# net ads join -U Administrator -D COMPANY.RU
Enter Administrator's password:Using short domain name -- COMPANYJoined 'FILESRV' to dns domain 'company.ru'
Проверяем:
# net ads testjoin
Join is OK
Проверки, машина:
# wbinfo -t
checking the trust secret for domain COMPANY via RPC calls succeeded
Проверяем, запросим список юзеров:
# wbinfo -u
guest
Administrator
krbtgt
iusr_ai-documents
alfauser
support_388945a0
***************
Проверяем группы:
# wbinfo -g
domain computers
cert publishers
domain guests
domain users
group policy creator owners
domain controllers
ras and ias servers
enterprise admins
**************
Редактируем файл /etc/nsswitch.conf, находим две строчки и меняем их значение:
passwd: compat winbind
group: compat winbind
Жирным помечены мои изменения.
Перезапустим службы:
# systemctl restart smb
# systemctl restart nmb
# systemctl restart winbind
Проверим работоспособность, теперь пользователи и группы доменного контроллера, должны отображаться вместе с системными учетными записями:
Вывод учетных записей из AD
# getent passwd
root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinntp:x:38:38::/etc/ntp:/sbin/nologinsssd:x:998:997:User for sssd:/:/sbin/nologindns-companypdc:*:16777216:16777220:dns-companypdc:/home/dns-companypdc:/bin/bashadministrator:*:16777217:16777220:Administrator:/home/administrator:/bin/bashkizdarskii:*:16777218:16777220:Kizdarskii:/home/kizdarskii:/bin/bashakehayc:*:16777219:16777220:AkeHayc:/home/akehayc:/bin/bashdns-sdc:*:16777220:16777220:dns-SDC:/home/dns-sdc:/bin/basharaika:*:16777221:16777220:Araika:/home/araika:/bin/bashivanka:*:16777222:16777220:ivanka:/home/ivanka:/bin/bashkrbtgt:*:16777223:16777220:krbtgt:/home/krbtgt:/bin/bashguest:*:16777224:16777221:Guest:/home/guest:/bin/bashtest1:*:16777225:16777220:test1:/home/test1:/bin/bashdhcp:*:16777226:16777220:dhcp:/home/dhcp:/bin/bashtest:*:16777227:16777220:test:/home/test:/bin/bash
Жирным шрифтом помечены пользователи домена.
Вывод групп из AD
# getent group
root:x:0:
bin:x:1:
daemon:x:2:
enterprise admins:x:16777229:administrator
domain computers:x:16777230:
cert publishers:x:16777231:
dnsupdateproxy:x:16777232:dhcp
domain admins:x:16777233:administrator
domain guests:x:16777221:
schema admins:x:16777234:administrator
domain users:x:16777220:
dnsadmins:x:16777235:
**********************************************
Жирным шрифтом помечены группы домена.
На этом настройка входа в домен COMPANY.RU - выполнена.
Проверяем каким ПО было осуществлено членство в домене:
# realm list
company.rutype: kerberosrealm-name: COMPANY.RUdomain-name: company.ruconfigured: kerberos-memberserver-software: active-directoryclient-software: winbindrequired-package: oddjob-mkhomedirrequired-package: oddjobrequired-package: samba-winbind-clientsrequired-package: samba-winbindrequired-package: samba-commonlogin-formats: %Ulogin-policy: allow-any-login
Здесь видно, что это сделано через Winbind. Если настроите членство с помощью SSSD, будет выведен другой листинг:
company.rutype: kerberosrealm-name: COMPANY.RUdomain-name: company.ruconfigured: kerberos-memberserver-software: active-directoryclient-software: sssdrequired-package: oddjobrequired-package: oddjob-mkhomedirrequired-package: sssdrequired-package: adclirequired-package: samba-commonlogin-formats: %U@company.rulogin-policy: allow-realm-logins
Как видно, поменялась информация в поле client-software - sssd (https://wiki.samba.org/index.php/Local_user_management_and_authentication/sssd). Если вы не используете sssd, отключите запуск этой службы - systemctl disable sssd
Членство в домене также можно настроить через Nslcd (https://wiki.samba.org/index.php/Nslcd).
2. Два способа для ограничения прав на папки и файлы
У вас есть два способа выставления доступа на общие файлы и папки:
1. Через POSIX ACL
2. Через Windows ACL
ПЕРВЫЙ СПОСОБ
Можно задействовать отредактировав файл smb.conf и атрибуты POSIX ACL (Подробнее https://wiki.samba.org/index.php/Shares_with_POSIX_ACLs). Внизу показан пример для групп "Demo Group", "Domain Users" и доменного пользователя "foobar".
Создаете новый каталог, который будет общим, если он еще не создан:
# mkdir -p /srv/samba/Demo/
Добавляете новый общий ресурс в ваш файл smb.conf. Минимум, требуется добавить следующие следующее:
[Demo]
path = /srv/samba/Demo/
read only = no
Перегрузите Samba:
# smbcontrol all reload-config
В итоге создан ресурс только для чтения. Чтобы зайти на сервер общего ресурса, введите в explorer строку вида \\10.168.50.5 (IP адрес файл сервера).
Теперь рассмотрим более сложный пример, разрешим доступ к общему только определенному пользователю или группе.
Настройка доступа к общему ресурсу путем использования Пользователя и Группу
[Demo]
path = /srv/samba/Demo/
read only = no
valid users = +COMPANY\"Domain Users"
invalid users = +COMPANY\"Demo Group" COMPANY\AkeHayc
В примере разрешено заходить членам группы "Domain Users" домена COMPANY. Членам группы "Demo Group" и пользователю "AkeHayc" - доступ запрещен. Параметр "invalid users", имеет высший приоритет по сравнению с опцией "valid users".
или
[Demo]
path = /srv/samba/Demo/
read only = no
valid users = COMPANY\AkeHayc COMPANY\ivanka
invalid users = +COMPANY\"Demo Group" COMPANY\flooder
В этом примере доступ в папку имеют пользователи AkeHayc и ivanka, группе Demo Group и пользователю flooder - доступ запрещен.
Также смотрите внизу ACL списки.
ACL (Access Control List - список контроля доступа) файловой системы
Через "Списки контроля доступа (ACL)" на общем ресурсе (с включенным POSIX), можно назначать права через обычные инструменты: "chmod", "chown" и "chgrp".
Например:
# mkdir /srv/samba/Demo/Example/
# chmod 2770 /srv/samba/Demo/Example/
# chown AkeHayc:"Demo Group" /srv/samba/Demo/Example/
Эти команды создают каталог в корне с именем Demo. Разрешение на каталог выставлены - 2770, что делает владельцем пользователя "AkeHayc" и группу "Demo Group" с правами на чтение/запись/выполнение. Обратите свое внимание на SGID (setgid) бит, который был установлен на каталог. Это подразумевает, что все файлы и подкаталоги созданные в нем, наследуют права от группы "Demo Group" вместо текущих прав пользователя (группы).
ВТОРОЙ СПОСОБ
На каждом компьютере с Samba можно устанавливать права как в Windows. Нет разницы если это будет доменный контроллер, член домена или отдельный сервер (подробнее https://wiki.samba.org/index.php/Shares_with_Windows_ACLs). Первый способ был через файл smb.conf и POSIX ACL, второй через менеджер Windows и его ACL.
Например:
Для начала использования этого способа, нужно сделать подготовительные шаги:
1. Включить монтирование раздела с с параметром user_xattr,acl,barrier=1, например:
/dev/... /srv/samba/demo ext3 user_xattr,acl,barrier=1 1 1
Примечание: на разделах с файловыми системами ext4 и xfs такого делать не надо, так как этот параметр там включен по умолчанию.
2. Проверить чтобы Samba 4 была с поддержкой ACL:
# smbd -b | grep HAVE_LIBACL
HAVE_LIBACL
3. Указать в конфиге smb.conf использованные расширенных списков контроля доступа
В секцию [global] добавить следующие строчки:
vfs objects = acl_xattrmap acl inherit = yesstore dos attributes = yes
4. SeDiskOperatorPrivilege
Учетные записи которые могут настраивать права на общие папки, нуждаются в привилегиях "SeDiskOperatorPrivilege". Чтобы посмотреть текущий список привилегий на хосту, выполните:
# net rpc rights list accounts -U'SAMDOM\administrator'
В следующей команде, мы дадим это разрешение группе "Domain Admins", но, прежде чем сделать сделать это, удостоверьтесь чтобы группа была доступна локально на текущей операционной системе через NSS, используя Winbind.
# getent group "Domain Admins"
domain admins:x:10001:
Если вы не видите номер ID, значить у вас не настроен NSS. Если группа "Domain Admins" доступна в ОС, вы можете разрешить ей привилегии SeDiskOperatorPrivilege:
# net rpc rights grant 'SAMDOM\Domain Admins' SeDiskOperatorPrivilege -U'SAMDOM\administrator'
Enter SAMDOM\administrator's password:
Successfully granted rights.
После таких подготовительных операции, можно приступать к созданию общего ресурса.
Создайте общий новый каталог, если он конечно еще не создан
# mkdir -p /srv/samba/Demo/
Чтобы разрешать пользователя и группам изменять права, требуется дать "Полные права". По умолчанию значение "acl map full control" стоит в yes. Это дает права "rwx" (чтение-запись-выполнение) отображенное в "Полных правах". Соответственно, чтобы разрешить членам группы "Domain Admins" изменять права через Windows, вам нужно установить следующее права:
# chmod g=rwx /srv/samba/Demo/
# chgrp "Domain Admins" /srv/samba/Demo/
Добавьте новую шару в ваш smb.conf.
Вам только надо опубликовать новую шару, и больше ничего не требуется (например параметр "force user/group" который не совместим с vfs objects "acl_xattr", что приводит к сообщению "Доступ запрещен" ).
[Demo]
path = /srv/samba/Demo/
read only = no
Перезагрузите Samba
# smbcontrol all reload-config
Опционально, управление опубликованным ресурсом доступно через Windows. Для этого нужно войти под Administrator на клиентском компьютере с Windows и запустить Computer Manager (Меню ПУСК -> Выполнить -> compmgmt.msc):
Далее, через меню "Действие" -> "Подключиться к другому компьютеру" введите IP адрес файлового сервера. После входа в оснастку "Управление компьютером", вам будет доступна опция по управлению общими ресурсами файлового сервера.
Давайте попробуем дать доступ пользователю AkeHayc на папку "/srv/samba/Demo" в режиме чтения и записи.
В оснастке "Управления компьютером" разверните древовидный список начиная от Служебные программы -> Общие папки -> Общие ресурсы ->
Найдите ресурс (папку) Demo и зайдите в свойства:
Установите права на папку для пользователя AkeHayc:
На вкладке "Разрешение для общего доступа", удалите группу "Все" и добавьте пользователя AkeHayc.
После этой операции в папку будет иметь доступ только пользователь "AkeHayc". В графическом режиме более привычно и удобно менять права нежели используя командную строку.
Что нам доступно через Computer Manager:
1. Можно добавлять или удалять пользователей/группу
2. Назначать разные права (чтение-запись-выполнение) на корневую папку
3. Назначать права на подпапки
4. Все манипуляции в удобном графическом окне
3. Создаем папки для пользователей
Настройка главного файла /etc/samba/smb.conf
#### SHARES SETTINGS ####
acl allow execute always = True
vfs objects = acl_xattr
map acl inherit = Yes
store dos attributes = Yes
Описанные настройки, прописываются только на участнике домена - member role, на доменных контроллерах это делать не надо.
Теперь надо прописать права доступа и само описание общего каталога - шары:
Открываем файл /usr/local/samba/etc/smb.conf и добавляем в конец файла настройку. В примере доступ открыт всем пользователям домена.
# My shared directory
[data]
path = /data
valid users = +"company.ru\users"
writable = yes
browsable = yes
read only = no
guest ok = yes
public = yes
create mask = 0666
directory mask = 0777
4. Как сделать корзину
В smb.conf добавляете настройки корзины:
[shares]comment = Global share for all userspath = /data/publicread only = Novalid users = COMPANY.RU\AkeHaycvfs objects = recyclerecycle:keeptree = yesrecycle:versions = yesrecycle:touch = yesrecycle:exclude = ?~$*,~$*,*.tmp,index*.pl,index*.htm*,*.temp,*.TMPrecycle:exclude_dir= /tmp,/temp,/cache# путь где будут сохранятся файлы, можно указать другой# "recycle: repository = /myfolder/recycle/%U"recycle:repository = .recycle/.recycle.%urecycle:noversions = *.doc,*.xls,*.ppt
Теперь в каталоге /data/public/ появится скрытый каталог с именем ".recycle". Туда будут попадать удаленные файлы.
ИСТОЧНИКИ
Добавление CentOS 7 в домен - http://www.hexblot.com/blog/centos-7-active-directory-and-samba
настройка файл сервера - http://linuxtot.com/add-a-simple-samba-file-server-as-a-domain-member/
http://habrahabr.ru/post/262581/