Установка samba в ubuntu 20.04

Как настроить PAM в Linux

Все конфигурационные файлы PAM для различных приложений находятся в папке /etc/pam.d. Давайте посмотрим на конфигурационный файл для утилиты sudo:

Каждая строчка файла состоит из нескольких полей:

тип обязательность модуль параметры

Разберем подробнее:

  • Первое поле — тип, определяет какой тип запроса к PAM надо выполнить. Существует четыре различных типа запроса auth (проверка данных входа, например, логина и пароля), account (проверка не истёк ли пароль пользователя), password (обновление пароля), и session (обслуживание сессии, например, логгирование и монтирование папок).
  • Второе поле определяет как нужно интерпретировать результат, возвращённый модулем PAM. Доступно тоже несколько возможных вариантов: required (тест должен быть обязательно пройден, но следующие строки тоже будут проверяться), requisite (аналогично required, только если тест не проходит, то следующие строки уже не проверяются), sufficient (противоположно requisite, если тест проходит, то следующие строки уже не проверяются), optional (проваленные тесты игнорируются).
  • Третье и четвертое поле — это название библиотеки модуля и её параметры. Всё это надо выполнить для выполнения теста авторизации или действия.

Кроме того, существуют директивы include, которые включают строки из других файлов так, как будто они были написаны в этом файле. Файл настройки sudo кажется совсем коротким, но в него включаются другие файлы. Давайте посмотрим ещё на файл /etc/pam.d/common-auth:

Здесь можно видеть более расширенный синтаксис параметра обязательности. Он позволяет лучше понять как всё это работает. Давайте его рассмотрим:

Модули PAM могут возвращать около 30-ти значений и они зависят от выбранного типа (account/auth/session…), вот они все: success, open_err, symbol_err, service_err, system_err, buf_err, perm_denied, auth_err, cred_insufficient, authinfo_unavail, user_unknown, maxtries, new_authtok_reqd, acct_expired, session_err, cred_unavail, cred_expired, cred_err, no_module_data, conv_err, authtok_err, authtok_recover_err, authtok_lock_busy, authtok_disable_aging, try_again, ignore, abort, authtok_expired, module_unknown, bad_item, conv_again, incomplete и default. Последнее, default, означает все поля, которые явно не заданы.

В качестве действия могут быть указанны такие значения:

  • ignore — не влияет на общий код возврата в приложение;
  • bad — расценивать это значение как свидетельство сбоя модуля;
  • die — аналогично bad, только сразу возвращать управление в приложение;
  • ok — значение должно влиять на общий возвращаемый результат, переопределяет общий результат если он раньше был успешен, но не отменяет сбой;
  • done — аналогично ok, только управление сразу возвращается приложению.

Таким образом, те четыре варианта обязательности, которые мы рассматривали выше можно описать вот так:

  • required:
  • requisite:
  • sufficient:
  • optional:

Здесь:

  • success — модуль вернул состояние успешно, поскольку значение ok, это состояние будет учтено если ни один предыдущий модуль не дал сбоя;
  • new_authtok_reqd — модуль сообщает, что пароль пользователя желательно обновить;
  • ignore — модуль просит игнорировать его результат, игнорируем;
  • default — все остальные возвращаемые значение расцениваем как сбой.

Обратите внимание. что модуль возвращает только одно определенное значение и уже к нему применяется действие

Чтобы закрепить всё это на практике давайте рассмотрим как запретить авторизацию от имени пользователя losst на компьютере с помощью PAM. Для этого можно воспользоваться модулем /lib/security/pam_listfile.so. Он позволяет ограничить доступ для пользователей на основе файла со списком. Откройте файл /etc/pam.d/sshd и добавьте туда такую строчку:

Здесь мы используем тип запроса auth, обязательность required и указанный выше модуль. Вот его опции и их значения:

  • onerr=succeed — если возникает ошибка, доступ разрешить;
  • item=user — указывает, что в файле конфигурации находятся логины пользователей;
  • sense=deny — действие, если логин пользователя найден в файле;
  • file=/etc/denyusers — файл с логинами пользователей, для которых надо запретить доступ.

Теперь в файл /etc/denyusers добавьте имя пользователя losst, естественно, такой пользователь должен существовать в системе. Затем попробуйте перейти в любую консоль и авторизоваться от его имени. У вас ничего не выйдет, а в логе /var/log/security или /var/log/auth.log будет сообщение об ошибке:

А если эту строчку закомментировать, то всё снова заработает.

DNS

Адрес присоединённого контроллера домена должен появиться в списке адресов домена:

host -t A somedom.example.comsamdom.example.com has address 10.0.2.250samdom.example.com has address 10.0.2.10

При этом должны быть доступны два DNS сервера. Проверим это командой dig, обращаясь к серверам dc1.samdom.example.com и dc2.samdom.example.com:

У ответов должен быть статус NOERROR и в ответах должна содержаться секция ANSWER SECTION с адресами серверов:

Оба DNS сервера должны выдавать информацию о двух доменных службах каталогов:

dig SRV _ldap._tcp.samdom.example.com @dc1.samdom.example.com +nocookiedig SRV _ldap._tcp.samdom.example.com @dc2.samdom.example.com

У ответов должен быть статус NOERROR и в ответах должны содержаться секции ANSWER SECTION и ADDITIONAL SECTION с адресами служб:

Аналогично, оба DNS сервера должны выдавать информацию о двух доменных службах Kerberos:

dig SRV _kerberos._tcp.samdom.example.com @dc1.samdom.example.com +nocookiedig SRV _kerberos._tcp.samdom.example.com @dc2.samdom.example.com

У ответов должен быть статус NOERROR и в ответах должны содержаться секции ANSWER SECTION и ADDITIONAL SECTION с адресами служб:

Аутентификация и политики

Hashicorp Vault позволяет управлять доступами с помощью политик и токенов авторизации. Рассмотрим процесс настройки.

Работа с токенами

Для начала научимся управлять токенами. Простая команда для создания нового:

vault token create

Система сгенерирует новый ключ и сделает вывод на экран. 

Также мы можем создать временный токен:

vault token create -period=1h

* на один час.

Посмотреть информацию о токене можно через его аксессор. Сначала получим список аксессоров:

vault list auth/token/accessors

После смотрим токен по аксессору:

vault token lookup -accessor uW9Ajr8VzFiCwHzHWn75qWVe

Войти в систему с помощью токена можно командой:

vault login

После вводим наш токен. Или одной командой:

vault login s.Db9j6Q4TvyFDr3j2aQmXttrX

Посмотреть информацию о токене, под которым мы зарегистрировались в системе, можно командой:

vault token lookup

А данной командой мы создаем пользователя и привязываем его к политике my-policy:

vault token create -policy=my-policy

Если политики нет в системе, то мы получим предупреждение:

WARNING! The following warnings were returned from Vault:
  * Policy «my-policy» does not exist

Нас это не должно заботить — на следующем шаге мы ее создадим.

При необходимости привязать токен к нескольким политикам, перечисляем из в опциях policy:

vault token create -policy=my-policy -policy=my-policy2

Работа с политиками

Выше мы создали токен и привязали его к политике my-policy. Создадим ее:

vault policy write my-policy — << EOF
path «secret/data/foo/*» {
  capabilities =
}
path «secret/data/hello/*» {
  capabilities =
}
path «secret/data/*» {
  capabilities =
}
EOF

* в данной политике мы разрешаем чтение всех секретов в secret. Для ранее созданного секрета secret/hello мы разрешим чтение и обновление записей, а для секрета secret/foo также мы разрешаем создавать записи

Обратите внимание, что на самом деле, данные хранятся в secret/data..

Посмотреть список политик можно командой:

vault policy list

Посмотреть информацию о конкретной политике можно командой:

vault policy read my-policy

Проверка политики

И так, мы создали токен, привязали его к политике, создали саму политику. Проверим, что наши права работают.

Если нужно, можно создать еще токен и привязать его к нашей политике:

vault token create -policy=my-policy

Зарегистрируемся с нужным нам токеном (который привязан к  проверяемой политике):

vault login

Попробуем сначала создать секрет в ветке secret/foo и в нем указать пару ключ-значение:

vault kv put secret/foo/new foo=world

Команда должна выполниться успешно.

Теперь сделаем то же самое для secret/hello

vault kv put secret/hello/new foo=world

Мы должны получить ошибку

Error writing data to secret/data/hello/new: Error making API request.
URL: PUT http://127.0.0.1:8201/v1/secret/data/hello/new
Code: 403. Errors:
* 1 error occurred:
    * permission denied

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

vault kv put secret/hello/new foo=world

И снова заходим под токеном с ограниченными правами. Пробуем обновить запись:

vault kv put secret/hello/new foo=world2

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

Аутентификация на основе пользователей

Также в Hashicorp Vault мы можем создать пользователя с паролем и привязать к нему политику. Администратор сможем входить в систему под учетной записью, а не с помощью токена.

Разрешаем метод auth по пути userpass:

vault auth enable userpass

Создаем пользователя:

vault write auth/userpass/users/dmosk password=»test-pass» policies=»my-profile»

* данной командой мы создали пользователя dmosk с паролем test-pass и привязали его к политике my-profile.

Войти в систему можно командой:

vault login -method=userpass username=dmosk

Вводим пароль и попадаем в систему под пользователем dmosk. Можно выполнить тесты, которые мы .

Запуск сервера SAMBA

Основу Samba составляют три демона, два из которых необходимы всегда:

nmbd

Демон nmbd отвечает за регистрацию всех имен и обслуживание запросов их разрешения. Обеспечивает основной механизм, обеспечивающий возможность обзора сети. Обрабатывает все протоколы на базе UDP. Демон nmbd должен запускаться первым.

smbd

Демон smbd обслуживает все соединения на базе протоколов TCP/IP к сервисам доступа к файлам и к принтерам. Кроме этого, демон заведует процессом локальной аутентификации. Должен запускаться сразу после nmbd.

winbindd

Демон winbindd должен запускаться, когда сервер Samba выступает в роли члена домена Win NT4 или Active Directory. Запуск так же необходим, когда Samba вступает в доверительные отношения с другим доменом. Демон winbindd проверяет файл smb.conf на наличие параметров idmap id и idmap gid, которые затем будут использоваться для отображения идентификаторов системы безопасности Windows (SID).  Указываемый в этих параметрах диапазон не должен находится в противоречии с уже используемыми в системе идентификаторами (начало значений пользовательских ID указывается ). Если указанные параметры не заданы, то демон winbindd не будет выполнять отображение Windows SID, а аутентификация будет выполняться только на уровне аутентификации пользователей.

Запуск данных демонов возможен как в standealone режиме, так и с помощью супердемона xinetd. В первом случае службы запущены постоянно и прослушивают сетевой интерфейс, во втором, службы запускаются с помощью демона inetd/xinetd и отвечают на запросы только при поступлении запроса от клиента. Для запуска Samba с помощью  супердемона необходимо добавить описание запуска в конфигурационный файл /etc/inetd.conf для inetd или /etc/xinetd.conf для xinetd. Супердемону xinetd обязательно посвящу отдельную тему и на сегодня с xinetd остановим обсуждение.

Шаг 1. Как установить Samba AlmaLinux

Первым шагом является установка Samba на AlmaLinux, если она еще не установлена ​​в системе. Используйте следующую команду для установки необходимых пакетов Samba через диспетчер пакетов dnf.

$ sudo dnf install samba samba-client

После того как пакеты установлены, мы должны начать и включить и в демон при загрузке. Первый — это демон, который выполняет фактические передачи и операции совместного использования, а второй выполняет разрешение имен, позволяя ресурсам появляться при просмотре сети в Windows. Теперь мы можем включить и запустить обе службы systemd всего одной командой:

$ sudo systemctl enable --now {smb,nmb}

smbstatus

Утилита smbstatus предоставляет информацию:

  • О PID соединений каждого smbd-демона с сервером Samba. Этот отчет включает имя пользователя, первичную группу, версию протокола SMB, информацию о шифровании и подписи.
  • Соединения к общим ресурсам Samba. Этот отчет включает PID smbd-демона, IP-адрес подключаемого компьютера, метку времени, когда было установлено соединение, информацию о шифровании и подписи.
  • Список заблокированных файлов. Записи отчета содержат дополнительную информацию, такую ​​как типы условной блокировки (oplock)
# smbstatus

Samba version 4.7.1
PID  Username              Group                Machine                            Protocol Version  Encryption  Signing
-----------------------------------------------------------------------------------------------------------------------------
963  DOMAIN\administrator  DOMAIN\domain users  client-pc  (ipv4:192.0.2.1:57786)  SMB3_02           -           AES-128-CMAC

Service  pid  Machine    Connected at                  Encryption  Signing:
-------------------------------------------------------------------------------
example  969  192.0.2.1  Thu Nov  1 10:00:00 2018 CEST  -           AES-128-CMAC

Locked files:
Pid  Uid    DenyMode   Access    R/W     Oplock      SharePath           Name      Time
------------------------------------------------------------------------------------------------------------
969  10000  DENY_WRITE 0x120089  RDONLY  LEASE(RWH)  /srv/samba/example  file.txt  Thu Nov  1 10:00:00 2018

Установка и настройка samba

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

# yum install samba3x samba3x-common samba3x-winbind

Приводим файл /etc/samba/smb.conf к следующему виду:

global
dos charset = cp866                     # Кодировка для работы с DOS-клиентами
unix charset = utf-8                    # Кодировка для преобразования текстовых
                                        # имен файлов, пользователей и групп между
                                        # сервером и клиентом
display charset = utf-8                 # Должен быть таким же как unix charset
workgroup = MYDOMAIN                    # Имя рабочей группы
realm = MYDOMAIN.LOCAL                  # Имя домена
netbios name = SRV-SMB                  # Имя сервера для NetBios
server string = Test File Server        # Описание сервера
security = ADS                          # Указываем режим работы samba-сервера,
                                        # как члена домена.
auth methods = winbind                  # Аутентификация через winbind
allow trusted domains = No              # Запрещаем доступ к нашему серверу из
                                        # других доменов и рабочих групп
password server = srv-dc.mydomain.local # Список контроллеров домена
time server = No                        # Не использовать samba как сервер времени
domain master = No                      # Не использовать samba как мастер-браузер
                                        # для домена
dns proxy = Yes                         # Если имя не найдено в WINS, разрешаем его
                                        # поиск на DNS-сервере
ldap ssl = no
idmap uid = 10000-20000                 # Определяем диапазон uid для сопоставления
                                        # с SID пользователей домена
idmap gid = 10000-20000                 # Определяем диапазон gid для сопоставления
                                        # с группами домена
winbind enum users = Yes                # Разрешаем Winbind перечислять пользовате-
                                        # лей домена
winbind enum groups = Yes               # Разрешаем Winbind перечислять доменные
                                        # группы
winbind use default domain = Yes        # Не использовать доменное имя при аутенти-
                                        # фикации доменных пользователей.
winbind refresh tickets = Yes           # Разрешаем winbind обновлять тикеты
case sensitive = No                     # Отключаем чувствительность файлов к
                                        # регистру
 
# для каждой расшаренной папки необходимо составить свою секцию описания
data
 path = mntdata                               # Путь к папке на сервере, у поль-
                                                # зователя должны быть права на эту
                                                # папку, чтобы он мог получить дос-
                                                # туп к ней через samba
 valid users = "@MYDOMAIN\Пользователи домена"  # Список пользователей или групп
                                                # которые могут подключаться к
                                                # папке, по умолчанию это любой
                                                # пользователь
 
 read list = "@MYDOMAIN\Пользователи домена"    # Cписок пользователей или групп
                                                # с разрешением только на чтение
 write list = "@MYDOMAIN\Администраторы домена" # Список пользователей или групп
                                                # с разрешением на чтение и запись
 
 read only = No                                 # Разрешаем запись
 create mask = 0644
 guest ok = Yes                                 # Разрешаем подключение анонимных
                                                # пользователей

Для проверки правильности конфигурационного файла у самбы есть замечательная утилита testparm:

# testparm
Load smb config files from /etc/samba/smb.conf
Processing section ""
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions

Вводим сервер в домен:

# net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- MYDOMAIN
Joined 'SRV-SMB' to realm 'mydomain.local'

Включаем в автозапуск и запускаем сервисы smb и winbind:

# chkconfig winbind on
# service winbind start
Starting Winbind services:                                 
# chkconfig smb on
# service smb start
Starting SMB services:                                     

Редактируем файлик /etc/nsswitch.conf и добавляем после следующих строчек слово winbind. Этим действием мы указываем в каком порядке и где системе искать имена-пароли пользователей и групп.

passwd:     files winbind
shadow:     files winbind
group:      files winbind

Теперь сервер готов к работе.

Как работает PAM в Linux?

Основа безопасности Linux — это аутентификация пользователей и их права. Если бы не было библиотек PAM, то разработчику каждой программы пришлось бы реализовать самому проверку логина и пароля пользователя, а также его прав, может ли он получить доступ к тому или иному ресурсу или нет. Чтобы этого не делать был создан набор библиотек, который поддерживает различные способы аутентификации. Для различных служб нужны разные способы аутентификации, это может быть логин и пароль Unix, открытый ключ, Fingerprint ключа или что-то ещё, и всё это поддерживается в PAM. Давайте рассмотрим как работает PAM на примере авторизации в текстовой консоли Linux с помощью утилиты login:

  • Утилита login запрашивает у пользователя логин и пароль, а затем делает запрос к libpam, чтобы выяснить действительно ли это тот пользователь, за которого он пытается себя выдать. Для проверки локального логина и пароля используется модуль pam_unix, затем результат возвращается в программу.
  • Затем утилита спрашивает у libpam может ли этот пользователь подключаться. Библиотека использует тот же модуль, чтобы определить не истёк ли пароль пользователя. Другие модули могут проверять права доступа основанные на имени хоста или времени.
  • Если пароль пользователя истёк он не сможет войти в систему, либо ему предложат сменить пароль прямо сейчас.
  • Если всё хорошо, то процесс входа продолжается, и модуль pam_unix записывает временную метку входа в файл /var/log/wtmp, затем запускается командная оболочка.
  • Если на каком-либо этапе входа возникла ошибка, сообщение о ней записывается в файл журнала /var/log/secure.
  • При выходе с системе тот же модуль unix_pam записывает временную метку в файл /var/log/wtmp.

Теперь рассмотрим как выполняется настройка PAM Linux.

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

Проблемы подключения к Windows 7 — mount error(12): cannot allocate memory

Известная ошибка Windows 7 «mount error(12): cannot allocate memory» может быть исправлена установкой пары ключей в реестре системы Windows:

  • (установить значение )
  • (установить значение )

В качестве альтернативы можно запустить командную строку от имени Администратора и выполнить следующее:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "LargeSystemCache" /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v "Size" /t REG_DWORD /d 3 /f

Выполните одно из следующих действий, чтобы изменения вступили в силу:

  • Перезагрузите Windows
  • Перезапустите службу на сервере через services.msc
  • Выполните в командной строке и ; после остановки служба может перезапуститься автоматически

Примечание: Поиск решения в интернете подскажет другое решение, рекомендующее пользователям добавить ключ, изменяющий размер «IRPStackSize». Это неправильное решение для устранения проблемы в Windows 7. Не применяйте его

Проблемы получения доступа к ресурсам, защищенным паролем, из Windows

Обратите внимание, что это должно быть добавлено в локальный файл smb.conf, а не в файл сервера

# lanman fix
client lanman auth = yes
client ntlmv2 auth = no

Диалоговое окно появляется с большой задержкой

У меня была проблема, связанная с тем, что диалоговое окно для ввода пароля появлялось с задержкой около 30 секунд, когда я пытался установить соединение из Windows XP/Windows 7. Когда я посмотрел файл error.log на сервере, я увидел:

[2009/11/11 06:20:12,  0] printing/print_cups.c:cups_connect(103)
Unable to connect to CUPS server localhost:631 - Interrupted system call

Эта опция предотвращает поиск cups и файла /etc/printcap:

printing = bsd
printcap name = /dev/null

Ошибка: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL

Если вы являетесь домашним пользователем, используете samba исключительно для организации общего доступа к файлам с сервера или NAS и не заинтересованы в организации общего доступа к принтерам, вы можете исправить эту ошибку, добавив следующие строки в файл /etc/samba/smb.conf:

load printers = No
printing = bsd
printcap name = /dev/null
disable spoolss = Yes

Перезапустите samba:

systemctl restart smbd

…проверьте ваши логи:

cat /var/log/samba/smbd.log

и больше ошибка не должна появляться.

Не удается предоставить общий доступ к папке

Проблема проявляется в том, что, когда вы пытаетесь предоставить общий доступ к папке через Dolphin (файловый менеджер), и вначале, вроде бы, все работает нормально, после перезапуска Dolphin иконка ресурса исчезла из папки, а в терминале (Konsole) вы видите следующий вывод:

‘net usershare’ returned error 255: net usershare: usershares are currently disabled

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

И вы используете firewall (iptables), поскольку не доверяете вашей локальной (школа, университет, отель) сети. Это может происходить по следующей причине: когда smbclient просматривает локальную сеть, он посылает широковещательный запрос на udp-порт 137. Затем серверы сети отвечают вашему клиенту, но, поскольку исходный адрес ответа отличается от адреса назначения, который видел iptables при отправке запроса, iptables не признает ответ как «установленное соединение» или «относящийся к запросу», и, следовательно, пакет отбрасывается. Возможное решение — добавление:

iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns

в вашу конфигурацию iptables.

Подключение к серверу завершилось неудачей: (Error NT_STATUS_UNSUCCESSFUL)

Вероятно, вы указываете неправильное имя сервера. Чтобы узнать его, запустите на сервере команду и найдите строку «Transient hostname».

Настройка Samba в Ubuntu

Начнем, как обычно, с установки. Установка Samba Ubuntu вместе со всеми необходимыми компонентами выполняется командой:

Когда все будет установлено, можно переходить к настройке. Сначала создайте резервную копию оригинального файла конфигурации Samba:

После создания резервной копии, создайте свой файл конфигурации, этой командой:

Сначала укажем глобальные настройки файлового сервера. Для этого вставьте в файл такие строки:

Рассмотрим подробнее что значат эти строки.

  • workgroup — рабочая группа, как уже говорилось должна одинакова на всех машинах
  • netbios name — имя компьютера, которое будет отображаться в Windows;
  • log file — адрес файла, куда будут складываться сообщения об ошибках и другая информация;
  • security — по умолчанию выполнять аутентификацию на уровне пользователя;
  • name resolve order — очередность разрешения IP адресов по NetBIOS имени. bcast — означает отправить в локальную сеть широковещательный запрос. Если все компьютеры между которыми планируется взаимодействие находятся в одной сети этот вариант оптимальный;
  • passdb backend — способ хранения паролей пользователей;
  • unix password sync — синхронизация паролей пользователей samba с локальными паролями Unix;
  • map to guest — указывает, когда пользователю будет предоставляться гостевой доступ. Доступно три значения — never — никогда, bad user — когда такого пользователя не существует, bad password — когда пароль введен неверно,

Когда завершите создание конфигурационного файла, переходим к вопросу как расшарить папку Ubuntu для Windows.

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

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

# yum install samba

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

# cat /etc/samba/smb.conf
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


comment = My shared folder
path = /mnt/shara
public = no
writable = yes
guest ok = no
valid users = @"[email protected]"

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

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

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

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

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

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

Provisioning Samba AD in Interactive Mode

To provision a Samba AD interactively, run:

# samba-tool domain provision --use-rfc2307 --interactive
Realm : SAMDOM.EXAMPLE.COM
 Domain : SAMDOM
 Server Role (dc, member, standalone) : dc
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) : SAMBA_INTERNAL
 DNS forwarder IP address (write 'none' to disable forwarding) : 8.8.8.8
Administrator password: Passw0rd
Retype password: Passw0rd
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=samdom,DC=example,DC=com
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container                                                                                                                                                                                        
Modifying users container                                                                                                                                                                                     
Adding computers container                                                                                                                                                                                    
Modifying computers container                                                                                                                                                                                 
Setting up sam.ldb data                                                                                                                                                                                       
Setting up well known security principals                                                                                                                                                                     
Setting up sam.ldb users and groups                                                                                                                                                                           
Setting up self join                                                                                                                                                                                          
Adding DNS accounts                                                                                                                                                                                           
Creating CN=MicrosoftDNS,CN=System,DC=samdom,DC=example,DC=com                                                                                                                                                
Creating DomainDnsZones and ForestDnsZones partitions                                                                                                                                                         
Populating DomainDnsZones and ForestDnsZones partitions                                                                                                                                                       
Setting up sam.ldb rootDSE marking as synchronized                                                                                                                                                            
Fixing provision GUIDs                                                                                                                                                                                        
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf                                                                                                        
Setting up fake yp server settings                                                                                                                                                                            
Once the above files are installed, your Samba4 server will be ready to use                                                                                                                                   
Server Role:           active directory domain controller                                                                                                                                                     
Hostname:              DC1                                                                                                                                                                                    
NetBIOS Domain:        SAMDOM                                                                                                                                                                                 
DNS Domain:            samdom.example.com                                                                                                                                                                     
DOMAIN SID:            S-1-5-21-2614513918-2685075268-614796884

Регистрация компьютера в Active Directory домене

Убедитесь что Samba не запущена. Если запущена, ее нужно остановить:

service smb stop; service winbind stop

Чтобы включить компьютер в домен, выполните команду:

net ads join -U administrator

где administrator — имя пользователя домена, имеющего право создавать новые учетные записи.

Если не было выдано сообщение об ошибке, то машина успешно зарегистрирована в домене — иначе проверьте правильность задания параметров в /etc/samba/smb.conf и /etc/krb5.conf. Убедитесь, что пользователь, указанный после -U в net ads join, имеет необходимые права на создание новых учетных записей.

Теперь можно запустить необходимые службы:

# service smb start; service winbind start

Quota

Теперь нам надо установить квоты для юзверей на дисковое пространство. Ставим пакет quota:

sudo apt-get install quota

Редактируем файл /etc/fstab, добавляем «usrquota» в раздел, на который устанавливаем ограничение для пользователей:

sudo nano /etc/fstab

UUID=04b5c25b-a82c-4bc7-8dad-2ccb9cfe7be6 /               ext4    noatime,relatime,usrquota,user_xattr,errors=remount-ro 0

Перемонтируем:

sudo mount -o remount /

или перезагружаемся.

По умолчанию файлы квот хранятся в корневом каталоге файловой системы в файлах с именами aquota.user и aquota.group соответственно для пользовательских и групповых квот.

Этой командой создадим файлы:

quotacheck /

Если будет ругаться — пробуем запускать с ключем -m или -f .

sudo edquota -u petrov_ia

после этой команды откроется текстовый редактор, в которым указываем ограничения и сохраняем. Вы можете ограничивать размещение ресурсов на основе объема дискового пространства (квотирование блоков), количества файлов (квотирование inode) или их комбинации. Каждое из этих ограничений, в свою очередь, делится на две категории: мягкие (soft) и жёсткие (hard) ограничения. Жёсткое ограничение не может быть превышено. мягкие ограничения могут быть превышены в течении некоторого периода времени. Если пользователь превышает своё мягкое ограничение в течение периода времени, превышающего отсрочку, то это мягкое ограничение становится жестким и последующее выделение ресурсов будет запрещено.

Например поставим ограничения: по объему – 1000 Мбайт, по количеству – 1000 файлов. Добавляя 10% запаса на жесткие пределы:

Disk quotas for user petrov_ia (uid 1005):

Filesystem                   blocks       soft       hard     inodes     soft     hard

/dev/loop0                        7    1024000    1126400          4     1000     1100

Размер указывается не в КБ, это число блоков. Но у меня в файловой системе один блок — 1024Б, поэтому в данном примере 1 блок = 1 КБ.

Параметры blocks и inodes изменять бессмысленно, они ставятся автоматически.

Параметр «grace period» позволяет вам установить время, прежде чем значение soft limit будет приведено в жизнь на файловой системе с включенными квотами:

sudo edquota -t

По умолчанию:

Grace period before enforcing soft limits for users:

Time units may be: days, hours, minutes, or seconds

Filesystem             Block grace period     Inode grace period

/dev/loop0                    7days                  7days

Проверяем установленные квоты:

sudo repquota /

Иногда желательно установить ограничения квот на некоторый диапазон UID (идентификаторов пользователей). Это можно сделать при помощи параметра -p в команде edquota. Во-первых, установите желаемое ограничение для пользователя, а затем запустите команду edquota -p protouser startuid-enduid. Например, если пользователь test имеет желаемые ограничения, то для дублирования этих ограничений на пользователей с UID от 10000 до 19999 может быть использована такая команда:

sudo edquota -p test 10000-19999

Или для списка пользователей:

sudo edquota -p test test1 test2 test3 …

Для квотирования групп пользователей (в моем примере это не используется, так, для справки) в /etc/fstab добавляем grpquota, туда же, куда и usrquota, создаем файл:

quotacheck

Добавляем квоты:

sudo edquota -g smbusers

И далее аналогично установкам квот на пользователя.

Добавление пользователя

Добавляем пользователя:

1. Добавляем пользователя в систему (для начала — с админскими правами). При этом вносим его в две группы, smbadmins соответствует Domain Admins в виндовс, во вторую добавляем чтобы иметь доступ к папке отдела.

sudo useradd -G smbadmins,o_it -s /bin/false -d /home/ivanov_av -m ivanov_av

sudo passwd ivanov_av

2. Добавляем пользователя в базу ldap.

sudo smbpasswd -a ivanov_av

3. Добавляем компьютер пользователя в систему.

sudo useradd -g smbcomputers -d /dev/null -s /bin/false Comp_IAV$

sudo passwd Comp_IAV$

4. Добавляем компьютер пользователя в ldap.

smbpasswd -a -m Comp_IAV

Проверяем добавление:

ldapsearch -LLL -x -b ‘dc=mega,dc=local’ ‘*’ | less

Аналогично добавим простого пользователя, например petrov_ia, изменив лишь в первой команде группу на smbusers.

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: