Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
1
06:09, 02 ноября 2015

Файловый сервер на Samba 4

Blog post image

Файловый сервер на 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 future
workgroup = company
password server = companypdc.company.ru
realm = COMPANY.RU
security = ads
idmap config * : range = 16777216-33554431
template homedir = /home/%U
template shell = /bin/bash
kerberos method = secrets only
winbind use default domain = true
winbind offline logon = false
#--authconfig--end-line--
idmap config COMPANY.RU:backend      = rid
idmap config COMPANY.RU:base_rid     = 0
idmap config COMPANY.RU:range        = 1000000 - 1999999
auth methods = winbind
winbind enum users = yes
winbind 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 -- COMPANY
Joined '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/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sssd:x:998:997:User for sssd:/:/sbin/nologin
dns-companypdc:*:16777216:16777220:dns-companypdc:/home/dns-companypdc:/bin/bash
administrator:*:16777217:16777220:Administrator:/home/administrator:/bin/bash
kizdarskii:*:16777218:16777220:Kizdarskii:/home/kizdarskii:/bin/bash
akehayc:*:16777219:16777220:AkeHayc:/home/akehayc:/bin/bash
dns-sdc:*:16777220:16777220:dns-SDC:/home/dns-sdc:/bin/bash
araika:*:16777221:16777220:Araika:/home/araika:/bin/bash
ivanka:*:16777222:16777220:ivanka:/home/ivanka:/bin/bash
krbtgt:*:16777223:16777220:krbtgt:/home/krbtgt:/bin/bash
guest:*:16777224:16777221:Guest:/home/guest:/bin/bash
test1:*:16777225:16777220:test1:/home/test1:/bin/bash
dhcp:*:16777226:16777220:dhcp:/home/dhcp:/bin/bash
test:*: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.ru
type: kerberos
realm-name: COMPANY.RU
domain-name: company.ru
configured: kerberos-member
server-software: active-directory
client-software: winbind
required-package: oddjob-mkhomedir
required-package: oddjob
required-package: samba-winbind-clients
required-package: samba-winbind
required-package: samba-common
login-formats: %U
login-policy: allow-any-login

Здесь видно, что это сделано через Winbind. Если настроите членство с помощью SSSD, будет выведен другой листинг:

company.ru
type: kerberos
realm-name: COMPANY.RU
domain-name: company.ru
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common
login-formats: %U@company.ru
login-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_xattr
map acl inherit = yes
store 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):

Blog post image

Далее, через меню "Действие" -> "Подключиться к другому компьютеру" введите IP адрес файлового сервера. После входа в оснастку "Управление компьютером", вам будет доступна опция по управлению общими ресурсами файлового сервера.

Blog post imageBlog post image

Давайте попробуем дать доступ пользователю AkeHayc на папку "/srv/samba/Demo" в режиме чтения и записи.

В оснастке "Управления компьютером" разверните древовидный список начиная от Служебные программы -> Общие папки -> Общие ресурсы ->

Найдите ресурс (папку) Demo и зайдите в свойства:

Blog post image

Установите права на папку для пользователя AkeHayc:

Blog post image

На вкладке "Разрешение для общего доступа", удалите группу "Все" и добавьте пользователя 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 users
path = /data/public
read only = No
valid users = COMPANY.RU\AkeHayc
vfs objects = recycle
recycle:keeptree = yes
recycle:versions = yes
recycle:touch = yes
recycle:exclude = ?~$*,~$*,*.tmp,index*.pl,index*.htm*,*.temp,*.TMP
recycle:exclude_dir= /tmp,/temp,/cache
# путь где будут сохранятся файлы, можно указать другой
# "recycle: repository = /myfolder/recycle/%U"
recycle:repository = .recycle/.recycle.%u
recycle: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/

1