Настройка файлового сервера Samba с интеграцией в Active Directory

Функционал обычного файлового сервера неизменно остается одним из самых популярных и востребованных в работе среднестатистического офиса. Сегодня я расскажу как установить и настроить файловый сервер Samba с авторизацией в AD и управлением доступом с помощью доменных учетных записей. Сразу скажу, что тема это достаточно трудная и хрупкая, очень часто что-то идет не так, нужно неплохо ориентироваться в теме, чтобы решать возникающие проблемы.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Прежде чем начинать настройку файлового сервера samba, прочитайте полностью материал, чтобы решить, каким способом будете настраивать. По ходу написания статьи у меня получились 2 принципиально разных решения.

Введение

Ранее я рассказывал как сделать очень простую и быструю настройку самбы, когда доступ ограничивается либо внутренними пользователями самбы, либо с помощью ip. Если вас такой формат эксплуатации файлового сервера устраивает, то читать дальше не обязательно. Используйте приведенную статью, и у вас все получится очень быстро.

Для более сложной настройки самбы с авторизацией в Active Directory будем разбираться дальше. Существует как минимум 2 способа добавления linux сервера в домен Windows Server:

  • Использовать известное и универсальное средство winbind.
  • Либо воспользоваться менее популярным, но как мне кажется, более удобным и простым в настройке - sssd.

Пример добавления linux сервера в домен с помощью winbind я приводил в одной из своих статей по настройке sams с авторизацией в AD. Утилиту sssd я использовал, когда настраивал авторизацию в linux с помощью доменный учетных записей. В этой статье я воспользуюсь sssd для интеграции в виндовый домен.

Если у вас еще нет готового сервера, то можете воспользоваться моими материалами на эту тему — установка и настройка centos 7. Так же рекомендую настроить iptables для корректной работы сервера с доменом windows. Далее я не буду касаться этого вопроса, мы просто отключим фаерволл, потому что его настройка не тема этой статьи.

Настраивать файловую шару samba будем на сервере под управлением CentOS 7 следующей версии:

Версия CentOS 7

Вводные слова я все сказал. Начнем настройку самбы с ввода сервера в домен.

Добавляем сервер к домену через realm

Я не буду придумывать ничего нового, а полностью воспользуюсь инструкцией из приведенной выше статьи по настройке авторизации доменных учеток на сервере, но при этом не буду настраивать саму авторизацию. В данном случае мне это не нужно.

Итак, отключаем firewall и SELinux, если не сделали это раньше. Если не хотите отключать, то настройте сами. Данная настройка выходит за рамки статьи.

# mcedit /etc/sysconfig/selinux

меняем значение

SELINUX=disabled

Выполняем команду, чтобы не ждать перезагрузки для применения изменений.

setenforce 0

Выключаем firewalld.

# systemctl stop firewalld
# systemctl disable firewalld
Информационная таблица
xs.local название домена
10.1.3.4 ip адрес контроллера домена
xs-winsrv.xs.local полное имя контроллера домена
xs-design имя сервера centos, который вводим в домен
admin51 учетная запись администратора домена
Перед дальнейшей настройкой, убедитесь, что с вашего сервера centos вы без проблем пингуете и резолвите контроллер домена по полному имени. Если есть какие-то проблемы, исправьте это либо указанием нужного dns сервера, либо правкой файла hosts.

Настроим синхронизацию времени с контроллером домена. Это важно, у вас должно быть одинаковое время с контроллером домена. Проверьте его и убедитесь, что стоят одинаковые часовые пояса.

Устанавливаем утилиту для синхронизации времени chrony:

# yum install chrony

Добавляем в конфиг /etc/chrony.conf адрес контроллера домена. И делаем его единственным сервером для синхронизации, остальные удаляем.

server xs-winsrv.xs.local iburst

Сохраняем конфиг, запускаем chrony и добавляем в автозагрузку.

# systemctl start chronyd && systemctl enable chronyd

Проверим, что с синхронизацией.

Синхронизация времени с доменом windows

Устанавливаем софт, который понадобится для дальнейшей работы.

# yum install realmd sssd sssd-libwbclient oddjob oddjob-mkhomedir adcli samba-common samba-common-tools

Делаем проверку перед вводом в домен.

# realm discover XS.LOCAL
xs.local
 type: kerberos
 realm-name: XS.LOCAL
 domain-name: xs.local
 configured: no
 server-software: active-directory
 client-software: sssd
 required-package: oddjob
 required-package: oddjob-mkhomedir
 required-package: sssd
 required-package: adcli
 required-package: samba-common-tools

Заводим в домен.

# realm join -U admin51 XS.LOCAL
Password for admin51:

Если не получили никакой ошибки, значит все прошло нормально. Можно зайти на контроллер домена и проверить, появился ли наш linux сервер в домене.

Добавление сервера centos 7 в домен

Проверьте на самом сервере, что он нормально обращается к домену и получает информацию об учетных записях. Показываю на примере доменной учетной записи control.

# id control@xs.local
uid=185001305(control@xs.local) gid=185000513(пользователи домена@xs.local) groups=185000513(пользователи домена@xs.local),185001329(gr_y@xs.local),185001651(gr_sams2@xs.local),185001327(gr_z@xs.local)

Еще несколько проверок.

# realm list

Информация о домене через realm

# adcli info xs.local

Подробная информация о домене

Сервер завели в домен. Приступаем к основному - настройке samba с интеграцией в AD.

Настройка Samba с интеграцией в AD через sssd

Устанавливаем сам файловый сервер самба.

# yum install samba

Рисуем ему примерно такой конфиг.

# cat /etc/samba/smb.conf
[global]
workgroup = XS
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
log level =3
max log size = 500
security = ads
encrypt passwords = yes
passdb backend = tdbsam
realm = XS.LOCAL
load printers = no
cups options = raw
printcap name = /dev/null

[shara]
comment = My shared folder
path = /mnt/shara
public = no
writable = yes
guest ok = no
valid users = @"gr_it@xs.local"

Запускаем службу smb.service и добавляем в автозагрузку.

# systemctl start smb.service
# systemctl enable smb.service

Теперь идем проверять подключение к сетевому диску с какой-нибудь виндовой машины. Здесь меня ждало полное разочарование. Ничего не работало. Я бился над решение проблемы примерно 2 дня, но не смог победить. Перелопатил весь гугл по запросу "sssd samba", но не смог заставить работать эту связку.

Через поиск нашел как людей, которые бились над решением проблемы с теми же ошибками, что и у меня, так и тех у кого все работало нормально. Я проверил все гайды и конфиги, где люди говорили, что такая связка работает, но у меня она все равно не работала. Видел сообщения людей, которые так же как я, не смогли победить ошибки. Думаю, проблема кроется в различных версиях софта.

Мне стало жаль тратить время на поиски готового решения с sssd, хотя мне очень хотелось получить рабочий вариант, так как с winbind достаточно часто возникают проблемы. Я надеялся от них избавиться переходом на sssd, но не получилось. Статью не стал переделывать, сохранив то, что уже настроил. Может быть у вас заработает.

Попутно узнал, что sssd не поддерживает NTLM авторизацию, только kerberos. Я не знаю, по какой причине, но у меня самба, судя по логам, упорно пыталась авторизовать пользователя по ntlm. В итоге, я прекратил попытки и вернулся к старому проверенному варианту с winbind. Далее расскажу, как настроить файловый сервер samba для работы в домене windows с помощью winbind.

Вводим CentOS 7 в домен с помощью winbind

Если у вас виртуальная машина, проще установить ее с нуля. Если не хочется по какой-то причине, можно просто удалить все установленные ранее пакеты через команду yum remove. Я поступил именно так.

Устанавливаем недостающие пакеты:

# yum install samba-winbind samba-winbind-clients samba pam_krb5 krb5-workstation chrony

Не забудьте о настройке синхронизации времени, которую мы делали на предыдущих шагах. Надо это проделать, если вы сразу начали настройку с данного пункта. Так же убедитесь, что все в порядке с dns, и контроллеры домена пингуются по именам.

Формируем конфиг для kerberos.

# authconfig --enablekrb5 --krb5kdc=xs-winsrv.xs.local --krb5adminserver=xs-winsrv.xs.local --krb5realm=XS-WINSRV.XS.LOCAL --enablewinbind --enablewinbindauth --smbsecurity=ads --smbrealm=XS.LOCAL --smbservers=xs-winsrv.xs.local --smbworkgroup=XS --winbindtemplatehomedir=/home/%U --winbindtemplateshell=/bin/bash --enablemkhomedir --enablewinbindusedefaultdomain --update

Для удобства дублирую таблицу с информацией, чтобы не пришлось скролить страницу вверх.

Информационная таблица
xs.local название домена
10.1.3.4 ip адрес контроллера домена
xs-winsrv.xs.local полное имя контроллера домена
xs-design имя сервера centos, который вводим в домен
admin51 учетная запись администратора домена

Вывод после работы команды у меня такой:

Job for winbind.service failed because the control process exited with error code. See "systemctl status winbind.service" and "journalctl -xe" for details.

Это не страшно, продолжаем настройку. Заводим сервер с CentOS в домен:

# net ads join -U admin51

На выходе получил:

Enter admin51's password:
Using short domain name -- XS
Joined 'XS-DESIGN' to dns domain 'xs.local'
No DNS domain configured for xs-design. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER

В принципе, ничего страшного. Нам придется самим создать A запись на DNS сервере. Я не понимаю, почему иногда она не создается автоматически. Во время написания статьи, я использовал один сервер, у него не было этой ошибки при вводе в домен. Когда проверял статью на втором сервере, получил эту ошибку. Проверяем на контроллере домена в списке компьютеров наш сервер и создаем руками А запись, соответствующую имени сервера и его IP адресу.

Теперь рисуем конфиг для самбы примерно такой.

# mcedit /etc/samba/smb.conf
[global]
   workgroup = XS
   password server = xs-winsrv.xs.local
   realm = XS.LOCAL
   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

   passdb backend = tdbsam

   load printers = no
   show add printer wizard = no
   printcap name = /dev/null
   disable spoolss = yes

   domain master = no
   local master = no
   preferred master = no
   os level = 1

   log level = 3
   log file = /var/log/samba/log.%m

[shara]
   path = /mnt/shara
   writeable = yes
   browsable = yes
   valid users = "@XS\Пользователи домена"
   admin users = "@XS\Администраторы домена"
   create mask = 0600
   directory mask = 0700

У меня русский язык на контроллере домена, поэтому и имена групп на русском. Проблем с этим не возникает. Не забудьте создать директорию /mnt/shara.

Запускаем samba и winbind и добавляем в автозагрузку.

# systemctl start winbind
# systemctl start smb.service
# systemctl enable winbind
# systemctl enable smb.service

Выполняем ряд проверок, чтобы убедиться, что все в порядке, winbind работает и samba будет получать актуальную информацию о пользователях и группах домена.

# wbinfo -t
checking the trust secret for domain XS via RPC calls succeeded
# wbinfo -u
# wbinfo -g

Последние две команды должны вывести список всех пользователей и групп домена.

Проверим теперь авторизацию в домене.

# wbinfo -a XS\\control%'pass'
plaintext password authentication succeeded
challenge/response password authentication succeeded

В данном случае control — имя пользователя домена, pass — его пароль. Успешная проверка выглядит так, как у меня. В завершении проверок посмотрим, корректно ли система сопоставляет доменные учетные записи локальным.

# id control
uid=16777216(control) gid=16777220(пользователи домена) groups=16777220(пользователи домена),16777221(gr_z),16777222(gr_sams2),16777223(gr_y),16777217(BUILTIN\users)

Все в порядке. Теперь все готово для корректной работы файлового сервера на основе Samba с доменными учетными записями. В завершении настроек, сделаем администратора домена владельцем нашей шары.

# chown admin51:'пользователи домена' /mnt/shara

Проверяем, что получилось.

# ll /mnt
total 0
drwxr-xr-x 2 admin51 пользователи домена 6 Sep 27 17:15 shara

Уберем доступ на чтение у всех остальных, оставим полные права для пользователя admin51 и на чтение у пользователей домена.

# chmod 0750 /mnt/shara

Идем на любую виндовую машину и пробуем зайти на шару по адресу \\ip-адрес-сервера. Попадаем на нашу шару.

Если не получилось зайти, проверьте настройки iptables. На время отладки можно их отключить. Так же убедитесь, что у вас запущена служба smb.service.

Смотрим расширенные параметры безопасности:

Права в Samba через windows acl

Получилось то, что хотели. Управлять правами доступа можно через windows acl с любой машины windows, где учетная запись пользователя домена будет обладать необходимыми правами. Если по какой-то причине это не получится (а я с такими ситуациями сталкивался достаточно часто), на помощь придут консольные утилиты getfacl для проверки прав и setfacl для изменения прав. Документация по этим командам есть в сети и легко ищется. Я рекомендую всегда использовать эти команды, когда вы выполняете изменение прав по большому дереву каталогов. Через консоль выставление прав будет выполнено раз в 5-10 быстрее, чем через windows acl. На больших файловых архивах разница может быть в десятки минут или даже часы.

Настройка прав доступа на файлы в Samba

Сделаю небольшое пояснение по правам доступа в файловом сервере samba. Вопрос этот сложный и объемный. Ему можно посвятить и отдельную статью. Но для полноты картины по настройке самбы, расскажу самое основное.

Как я уже ранее сказал, изменять права доступа к каталогам на файловом сервере можно с помощью команды setfacl. Давайте сейчас посмотрим на права доступа, которые установлены:

# getfacl /mnt/samba

# file: mnt/shara
# owner: admin51
# group: пользователи\040домена
user::rwx
group::r-x
other::---

С такими правами что-то создавать в папке сможет только пользователь admin51, а пользователи домена смогут только просматривать файлы и каталоги. Сделаем более прикладной вариант. Добавим права доступа на чтение и запись еще одной доменной группе - gr_it.

# setfacl -m g:gr_it:rwx /mnt/shara

Обращаю внимание, что иногда при копировании команд setfacl они не отрабатывают, выдавая не очень понятную ошибку:

setfacl: Option -m: Invalid argument near character 1

Наберите команду с клавиатуры, либо просто удалите и наберите снова ключ -m, он почему-то при копировании часто дает эту ошибку.

Смотрим, что получилось:

# getfacl /mnt/shara

# file: mnt/shara
# owner: admin51
# group: пользователи\040домена
user::rwx
group::r-x
group:gr_it:rwx
mask::rwx
other::---

То, что надо. Теперь пользователи группы gr_it имеют полные права на шару. Создадим одним таким пользователем папку test1 на нашей шаре и посмотрим, какие права она получит.

# getfacl /mnt/shara/test1

# file: mnt/shara/test1
# owner: user1
# group: пользователи\040домена
user::rwx
group::---
other::---

Права на папку имеет только ее создатель и больше никто. Для того, чтобы наследовались права с вышестоящего каталога, необходимо на этот вышестоящий каталог добавить дефолтные права доступа. Примерно вот так.

# setfacl -m d:g:gr_it:rwx,d:g:'пользователи домена':rx /mnt/shara

Смотрим, что получилось:

# getfacl /mnt/shara

# file: mnt/shara
# owner: admin51
# group: пользователи\040домена
user::rwx
group::r-x
group:gr_it:rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:пользователи\040домена:r-x
default:group:gr_it:rwx
default:mask::rwx
default:other::---

Создадим теперь тем же пользователем еще одну папку test2 и проверим ее права.

# getfacl /mnt/shara/test2

# file: mnt/shara/test2
# owner: user
# group: пользователи\040домена
user::rwx
group::---
group:пользователи\040домена:r-x
group:gr_it:rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:пользователи\040домена:r-x
default:group:gr_it:rwx
default:mask::rwx
default:other::---

Применилось наследование с вышестоящих папок. Не забывайте про дефолтные права и учитывайте их при настройке прав доступа на файловом сервере.

Для удобной и корректной работы с правами доступа я обычно для крупных, корневых директорий выставляю права аккуратно через setfacl в консоли. Какие-то мелкие изменения по пользователям и группам в более низших иерархиях директорий делаю через windows acl с какой-нибудь виндовой машины.

Еще важно знать одну особенность выставления прав доступа в linux. В моей практике часто требуется дать какому-нибудь пользователю доступ в одну директорию, которая располагается там, где у пользователя нет вообще никаких прав. В windows эта проблема решается просто - даются права на конкретную папку, а пользователю кладется ярлык на эту папку. В итоге он имеет доступ к нужной директории и больше никуда.

В linux так сделать не получится. Для того, чтобы дать таким образом доступ на отдельную директорию пользователю, необходимо, чтобы по всем вышестоящим директориям у него были права на исполнение, то есть X. Их придется выставлять вручную по всем вышестоящим папкам. Результат будет такой же, как и в винде - пользователь получит доступ на чтение только в указанную папку, но для этого придется выполнить больше действий. Если не знаешь этот нюанс, можно потратить много времени, прежде чем поймешь, в чем проблема.

Заключение

Скажу откровенно - мне не нравится, как работают файловые сервера samba с интеграцией в виндовом домене. Но настраивать их приходится часто, так как востребованный функционал. Востребован в первую очередь потому, что не требует вообще никаких денег за лицензии, и работает на минимальной конфигурации железа. Вот список типичных проблем при работе самбы в домене:

  • Иногда через windows acl права перестают выставляться, возникают неинформативные ошибки, по которым невозможно понять, что не так.
  • Я достаточно регулярно наблюдаю ситуацию, когда слетают соответствия доменных учеток линуксовым UID. В итоге права доступа превращаются в ничего не значащий набор цифр и перестают работать.
  • При переносе данных с одного сервера на другой трудно сохранить права доступа. Можно поступить вот так для копирования прав доступа, либо как-то заморочиться, чтобы на всех серверах у вас были одинаковые UID доменных учетных записей. Я не разбирал этот вопрос подробно.

Если у вас есть возможность настроить файловый сервер на windows, либо обойтись линуксом без домена, то сделайте так. Существенно упростите настройку и дальнейшую эксплуатацию. Данную статью еще можно дополнить некоторыми моментами, которые я рассказал ранее, а что не рассказал, постараюсь раскрыть позже и добавить сюда ссылки на статьи:

  1. Подробное логирование всех действий с файлами на сервере.
  2. Настройка корзины для сетевых дисков samba.
  3. Бэкап файлового сервера.
  4. Мониторинг за размером файловой шары.

Буду рад любым полезным замечаниям, исправлениям, советам по настройке файлового сервера samba. Я потратил значительное время, чтобы поделиться своими знаниями и опытом с остальными. Надеюсь, кто-то поделится чем-то полезным со мной. В том числе ради этого я и пишу статьи. Они расширяют мой кругозор и закрепляют полученные знания.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

45 комментариев

  1. Добрый день А как сделать тоже самое только управлять через вебмин .

  2. Почему не используете следующее (есть в официальной документации):
    Даем права группе samba_admins давать права во вкладке
    Безопасность в share через Windows
    net rpc rights grant "ДОМЕН\samba_admins" SeDiskOperatorPrivilege -U "ДОМЕН\администратор_домена"

    Проверяем
    net rpc rights list privileges SeDiskOperatorPrivilege -U "ДОМЕН\администратор_домена"

  3. Владимир

    Завел группу в AD, добавил в нее двух пользователей. Один из этих пользователей - владелец шары. Его пускает, второго пользователя нет. Причем в сислоге странная ошибка появляется:
    change_to_user_internal: chdir_current_service() failed! Что это может быть ? setfacl для созданной группы AD сделал.

  4. для работы связки sssd+samba помогло:
    1) yum install sssd-libwbclient
    2) net ads join -U

  5. Андрей

    Добрый день.
    Есть такая проблема: если пользователь в AD заведен как ivanovaa, то подключение к сетевой папке проходит нормально, а если как PetrovAA, т.е. буквы в разном регистре, то авторизация не работает.
    По логам понятно, что проверка идет в нижнем регистре и верхнем, оригинальный вариант логина не используется при проверке хотя в логе есть запись вида [PetrovAA] [DOMAIN] [WORKSTATION]
    Подскажите, что можно настроить, чтобы авторизация работала для логинов с разным регистром букв ?
    сейчас прописано
    idmap config * : backend = tdb

  6. Александр

    Добрый день.

    Для решения проблемы сохранения UID при переносе и пр. задачах нужно разобраться с параметром backend
    Начиная с какой-то версии samba нужно разделять бекэнды по доменам и использовать бекэнд по умолчанию tdb. tdb это бекэнд который хранит UID локально на сервере с самбой (посмотреть (на ubuntu) net idmap dump /var/lib/samba/winbindd_idmap.tdb). Если его использовать со всеми доменами то получится каша, особенно если у вас несколько доменов, перенос на другой сервер усложняется. Есть несколько других бекэндов, я для себя выбрал rid - UID в данном случае высчитывается "на лету" используя часть windows SID и числа из указанного вами range. Этот механизм позволяет настроить самбу на другом сервере, указать тот же range для домена и в конечном итоге получить теже UID для каждой доменной учетной записи. Пример настроек для двух доменов:
    idmap config *: backend = tdb
    idmap config *: range = 3000-7999
    idmap config DOMAIN1: default = yes
    idmap config DOMAIN1: backend = rid
    idmap config DOMAIN1: range = 100000-199999
    idmap config DOMAIN2: backend = rid
    idmap config DOMAIN2: range = 200000-299999
    # Нужно для backend rid (уже не помню для чего, но бралось из документации по rid)
    winbind nss info = template
    template shell = /bin/bash
    template homedir = /home/%D/%U

    -----

    Вопрос, может кто решал проблему.
    Есть сервер на самбе, все работает. У всех файлов и папок владелец root, остальные права на acl.
    Проблема: допустим есть 2 папки, у одной права группа1 и второй права группа2. Есть пользователь который входит в обе группы.
    Если данный пользователь КОПИРУЕТ файл из папки1 в папку2 то права на новый файл наследуются из папки2 - это правильная работа (для моей задачи). Но если он ПЕРЕНОСИТ файл, то в папке2 получается файл с правами папки1, и его соответственно не могут прочитать пользователи группа2. Можно каким-то параметром в самбе запретить копирование прав при переносе?

    • попробуйте параметр inherit owner=yes

      • Александр

        inherit owner=yes установлен.
        Если пользователь - администратор сервера самба (директива admin users), то при перемещении права в новой папке наследуются правильно.
        Но если пользователь - обычный пользователь с нужной группой - при перемещении права копируются :(

      • Александр

        Есть прогресс в вопросе, но не совсем такой, как хотелось бы:
        dos filemode = no - права при перемещении не наследуются и пользователи не могут изменять права на папки и файлы
        dos filemode = yes - права при перемещении наследуются и пользователи могут изменять права на папки и файлы (если есть права на изменение)

        Может быть есть вариант наследовать права при перемещении и запретить изменять права?...

  7. Здравствуйте!
    Очень странная проблема с Самбой, getacl показывает, что и владельцу и группе разрешено RWX на папку, в конфиге Самбы прописано create mask = 0770 directory mask = 0770, создаю в шаре папку, все нормально и у владельца и у группы все права, создаю файл, права только у владельца RWX, остальные --- подскажите куда рыть?

    • Надо разбираться. Я что-то подобное встречал и решал, но подробности, к сожалению, не помню.

  8. Андрей

    Здравствуйте! Столкнулся с такой проблемой, все сделано по данной статье на CentOS 7, если прокинуть vpn, допустим из дома в офис, то права перестают корректно отрабатывать, тоесть у учеток которых на корневую папку должны быть только права на чтение почему то получают полный доступ и могут создавать удалять папки, даже те которые были созданы не ими. Как только появляешься в офисе, все права начинают отрабатывать корректно. В логах при этом видно, что тот кто подключается удаленно, самба его никак вообще не пытается зарегистрировать, выдает ошибку, но на сервер все равно пускает и дает полные права на все. Может кто-нибудь сталкивался и знает как помочь?

    • Странная история. Права доступа хранятся в acl, списках контроля доступа к файлу. Они не зависят от способа подключения, по vpn или из офиса.

  9. Не подключается к домену вообще пишет следующее:
    net ads join -U ivanov.k
    Enter ivanov.k's password:
    gse_get_client_auth_token: gss_init_sec_context failed with [Unspecified GSS failure. Minor code may provide more information: Message stream modified](2529638953)
    kinit succeeded but ads_sasl_spnego_gensec_bind(KRB5) failed for ldap/vs01.cloud.local with user[ivanov.k] realm[CLOUD.LOCAL]: The attempted logon is invalid. This is either due to a bad username or authentication information.
    Failed to join domain: failed to connect to AD: Invalid credentials

  10. Кирилл

    А что делать если лог самбы пишет ошибку по попытке входа через имя?
    [2019/09/19 12:35:39.650216, 1] ../source3/librpc/crypto/gse.c:658(gse_get_server_auth_token)
    gss_accept_sec_context failed with [Unspecified GSS failure. Minor code may provide more information: Request ticket server cifs/srv-fs@CLOUD.LOCAL not found in keytab (ticket kvno 2)]
    [2019/09/19 12:35:39.652622, 3] ../source3/smbd/server_exit.c:237(exit_server_common)
    Server exit (NT_STATUS_CONNECTION_RESET)

    Собственно вот эта ошибка

    • По ошибке
      not found in keytab
      могу только предположить, что какие-то проблемы с керберосом.

  11. Отсутствие регистрации в DNS, возможно, связано с проблемой:
    https://bugzilla.altlinux.org/show_bug.cgi?id=35453

    На SAMBA 4.8.3-4.el7 + SSSD 1.16.2-13.el7_6.8 проблема воспроизводится.

  12. Дмитрий

    После wbinfo -t выходит
    checking the trust secret for domain -not available- via RPC calls failed
    failed to call wbcCheckTrustCredentials: WBC_ERR_NOT_IMPLEMENTED
    Не подскажете что может быть?

    • Надо гуглить. С работой в домене очень много нюансов в настройке.

      • Аноним

        метод через sssd не больше не работает, добавьте инфу в шапку, с версии samba 4.8 файловый сервер как член AD надо вводить через winbind

  13. Добрый день, может натолкнете в каком направлении рыть. Есть файловый сервер на базе Centos 7 и контроллер домена на базе Win Ser 2008 R2, хотелось бы реализовать следующую концепцию. Допустим пользователь домена подключается к файловому серверу Centos 7 и у него создается домашняя папка по определенному сетевому пути с его именем из OU контроллера домена (в идеале еще и с лимитом на саму шару, а не на пользователя или группу).
    Так вот PAM и samba работают в связке и создают такую папку на файловом сервере, но с таким именем папки при котором пользователь авторизуется при входе в систему. т.е. берется его Логин. а я бы хотел что бы его папка была названа его атрибутами взятыми с виндовс сервера 2008 и на кириллице. Но как это сделать ума не приложу.

    • Надо написать logon скрипт на powershell, а в нем уже настроить создание новой папки так, как хочется. Создавать и подключать папку именно logon скриптом. Я так делал в свое время.

  14. DNS update failed: NT_STATUS_INVALID_PARAMETER

    данная ошибка чаще всего проявляется если не заполнен параметр hosts по типу
    ip_адрес_сервера имя_компа.домен имя_компа

  15. столкнулся с интересным поведением сервера на которое позже нашел объяснение: если на шару заходить с виндовой машины по IP адресу сервера то не работает нифига. А вот если набрать имя сервера то начинает работать. Как позже выяснил Kerberos авторизация работает только при использовании доменных имен. Может поэтому у Вас не вышло с sssd?

    • Эту тему я знаю, проверял. У меня по какой-то другой причине не работало. Может соберусь и еще как-нибудь проверю. Мне кажется просто звезды так совпали :) Иногда те же самые действия через некоторое время приводят к желаемому результату.

  16. Спасибо очень позновательная статья.

  17. С этими настройками с официальной справки сразу заработало:
    https://access.redhat.com/articles/3023821
    [global]
    workgroup = EXAMPLE
    client signing = yes
    client use spnego = yes
    kerberos method = secrets and keytab
    log file = /var/log/samba/%m.log
    password server = AD.EXAMPLE.COM
    realm = EXAMPLE.COM
    security = ads

    winbind вообще не использовался, только sssd

  18. Решение с realm и sssd нашлось тут: https://access.redhat.com/articles/3023821
    Конфиг smb.conf выглядит так:
    [global]
    realm = MY.TEST
    server string = Samba Server %v
    workgroup = MY
    log file = /var/log/samba/log.%m
    max log size = 50
    kerberos method = secrets and keytab # можно заменить на dedicated keytab
    security = ADS
    idmap config * : backend = tdb

    [secured]

    path = /samba/secured
    read only = No
    valid users = @linux_users@my.test # кавычки оказались не нужны, их выкинул testparm

  19. Доброе.

    Mikrotik - отл. выбор. Но не умеет, напр., nat fastpath, т.е. вся нагрузка ложиться на cpu уст-ва.
    Сравнивать Pfsense и МТ - это как сравнивать газель с карьерным самосвалом.

    Установить xen на mdadm ? Сперва разворачиваете тот же Дебиан на mdadm, а после - накатывайте xen. В чем вопрос-то ?
    Правда, он может развалиться. После очередного обновления xen.

    ПересмОтрите свое отношение к kvm )) ? Вот честно - ему от этого ни холодно, ни жарко.

    Proxmox разворачивается на zfs, среди преимуществ к-ой - сжатие, дедупликация, удобство в создание массивов любого уровня, возможность использования ssd в кач-ве кеша и COPY_ON_WRITE (ваши данные никогда не запишутся поврежденными, CRC вычисляется ДВУМЯ алгоритмами). Также мгновенный снепшоттинг и возможность откатиться к любой версии. И это не всё. Гуглите.
    Все это управляется с пом. БРАУЗЕРА, а не не пойми чего.

    http://wolandblog.com/601-zfs-novyj-vzglyad-na-fajlovye-sistemy/
    http://xgu.ru/wiki/ZFS

    P.s. Напомню. Pfsense - https://forum.pfsense.org/index.php?board=9.0
    Только не говорите снова, что вы его лет 8 назад пользовать пытались и он вам не понравился. Это не правда.

    • Так чем инкрементно бэкапить KVM? Есть готовое решение? Под hyper-v, vmware и xenserver есть решения. Для kvm мне неизвестны.

  20. Добрый.
    Как у Вас дела с pfsense ? Начали внедрять ?

    P.s. Цитата:
    "Буду рад любым полезным замечаниям, исправлениям, советам по настройке файлового сервера samba. Я потратил значительное время, чтобы поделиться своими знаниями и опытом с остальными. Надеюсь, кто-то поделится чем-то полезным со мной. В том числе ради этого я и пишу статьи. Они расширяют мой кругозор и закрепляют полученные знания."

    Лукавите. Тот же Proxmox я Вам посоветовал, а то сидели бы в Xen-е до сих пор. Статьи по никсам подбрасывал. А Вы из скайпа за это удаляете ( Не хорошо.

    • Если я слушаю советы, это не значит, что я их обязательно использую. В качестве маршрутизатора я предпочитаю mikrotik, а гипервизоры использую по ситуации. XenServer лично мне нравится больше, чем KVM. С ним меньше проблем во время эксплуатации. А точнее вообще нет. Минус только один - он с версии 7.1 перестал ставиться на mdadm. Если посоветуете бесплатный инструмент для инкрементных бэкапов виртуальных машин под kvm, возможно я пересмотрю свое отношение к нему. Пока же я таких не вижу, а для xenserver регулярно использую.

  21. Я ввел 3 файл сервера в домен на Дебиане, но там немного по другому, я полностью использую скрипт, нашедший в одной сборке Дебиана и немного его допилив под себя https://drive.google.com/open?id=0BzrWXN0Dsp4qUWxTY1UtdGFESVE, так вот там аутентификация через ПАМ, и я добавил на сервер скрипт который раз в 12 часов обновляет права доступа к шарам по наименованию присваивая UID и GID который почему то меняется время от времени, попутно после всего ставил на сервак webmin, через него шары добавлять и редактировать права просто.

    • Скрипт мощный :)) Вот кто-то заморочился. Что за скрипт, который обновляет права? Хочу на него посмотреть. А что будет, если права изменятся в этом промежутке? Нужно будет руками скрипт запускать?

      Я так понимаю, вопрос, почему иногда меняются UID и GID тоже открытый. Если бы они не менялись по какой-то причине, то проблем бы практически не было.

      • Суть такова на серваке есть шара /srv/buhi доступ нужен только группе "debet", шара /srv/konstr - "domain users", когда вдруг не понятно чего слетает UID GID, а так как Линукс присваивает права именно по ним, когда группам переопределяется GID, доступ на шаре становится в виде (root:10006), а не (root:debet) - доступ естественно отваливается. Банально баш скрипт:
        chown -R root:debet /srv/buhi
        chown -R root:"domain users" /srv/konstr
        и в крон его на запуск каждые 12 часов.

        З.Ы. А в скрипте там где вставка данных в файл xml при входе определенного пользователя, если он относится к данной группе монтируется папка с установкой прав на шару, а при выходе происходит размонтирование.

        • Я понял. Это очень простой вариант, когда доступ у одной группы. У меня обычно глючат более масштабные сервера, где очень много различных прав. Мне иногда кажется, что чем больше шара, чем сложнее иерархия директорий и грууп, тем больше шанс, что что-то сглючит в правах.

          • Андрей

            На до написать скрипт который читает конфиг самбы и отрабатывает блоки с шарами считывая путь и привилегию, выводя команду "човн" или "чмод" и так циклически.Вроде я встречал настраивали еще дополнительно с утилитой ACL, надо почитать про нее подробней. Жаль что самба еще не полностью может стать контроллером домена, надеюсь с новими версиями и возможностей станет больше

          • Андрей

            Может здесь ответ на проблемы https://wiki.samba.org/index.php/Idmap_config_ad

  22. с sssd долго прыгал, но настроил в итоге - делал samba контроллер AD, и файловый сервер в домене на этом контроллере, с корректными правами и пр. Там в итоге пришлось вручную корректировать sssd.conf, smb.conf, krb5.conf, и вводить в домен через adcli join, потому что realmd обладал какими-то багами. Настройки да, неочевидные, типа kerberos method и dedicated keytab file в smb.conf. Но работало, могу выложить конфиги.

    • Я вообще не настраивал никогда и даже не планирую домен на самбе. Думаю, эти конфиги мне никак не помогут. Очень много нюансов в этих настройках, они очень неуниверсальны.

  23. Константин

    Спасибо за статью!

    А дедупликацию на samba не пробовали настраивать? На виндовых серверах сейчас это очень востребованный функционал.

    • Я так понимаю, что дедупликация это не функционал самбы. Реализовывать дедупликацию должно хранилище.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar