Как настроить 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.
Слишком много операций для добавления одного пользователя, но далее будет создан скрипт, значительно упрощающий данный процесс.