Samba, как член домена Active Directory
Доброго времени, читатели и гости! Сегодня на своем блоге хочу рассмотреть сервер SAMBA, как член домена Active Directory на Windows 200x. Хочу сказать, что изначально статья планировалась с темой “дополнительный контроллер домена Active Directory Windows 200x на Linux“, но к сожалению, SAMBA может работать не более чем в режиме контроллера домена NT4 (по крайней мере, версия samba 3.х). В 4 версии SAMBA планируется режим работы в качестве полноценного контроллера домена Active Directory, но данная версия только разрабатывается и даже не вышел альфа-релиз, поэтому ставить эксперименты с сырым продуктом пока не хочется. Итак, давайте остановимся на работе SAMBA, как члена доменной структуры Active Directory. Большинство дистрибутивов Linux поддерживают интеграцию с AD “из коробки”, но тру-админ должен понимать и разбираться, как все это работает. Поэтому в данной статье я рассмотрю интеграцию Linux и Windows.
Введение (теория)
Как мы знаем из прошлой статьи, основным протоколом SAMBA является SMB/CIFS. Основные задачи данного протокола – обеспечение доступа к файлам и каталогам на удаленной машине и сетевая печать. C годами данный протокол совершенствовался и с каждой новой версией поддерживал более защищенные методы аутентификации. Поддержку различных уровней аутентификации можно увидеть на приведенной иллюстрации слева, взятой с wiki журнала Linuxformat.
Итак, существует четыре основных метода аутентификации SMB/CIFS:
Открытым текстом. Использование данного метода крайне не рекомендуется, т.к. пароль передается не зашифрованым. Данный вид в современных системах по умолчанию – отключен. В SAMBA шифрование можно отключить глобальным параметром encrypted password = no в файле smb.conf.
LM (LAN Manager). Использовался в Windows до WinXP. В Samba включен по умолчанию.
NTLM/NTLMv2. Используется для аутентификации в рабочих группах. Samba совместима с NTLMv2. При аутентификации используются легко подбираемые хэши паролей.
Kerberos. В настоящее время, Kerberos является самой защищенной системой, используется криптография с секретным ключом. Применяется в доменах Active Directory (AD). Samba, начиная с версии 3 полноценно поддерживает данный протокол в виде клиента.
kerberos
Остановлюсь на протоколе kerberos поподробней, ибо с ним мы и будем работать в AD. В сети, использующей Kerberos существуют три основных элемента: клиент, центр выдачи ключей-квитанций (KDC – Key Distribution Center) и сервер авторизации. Два последние чаще всего являются одной машиной. По своей сути, Kerberos обеспечивает доверительное обслуживание третьей стороной – сервером Kerberos. Данный сервер является доверенным для всех объектов сети (пользователи, сервисы, машины и т.п.). Объекты сети, доверяющие другим объектам сделать какую-то операцию, в терминологии Kerberos называются – принципалами. У всех принципалов в доверенной сети имеется секретный пароль (он же ключ, он же билет, он же тикет) с сервером kerberos, который позволяет принципалам проверить, что информация от сервера kerberos и других объектов сети – действительна и тем самым принципалы и сервер Kerberos друг-друга аутентифицируют.
Коротко, работа Kerberos заключается в следующем: клиент, предоставляя свои логин/пароль обращается к KDC, если данный клиент существует и введенные данные верны, сервер ключей выдает клиенту тикет на доступ к серверу авторизации. Сервер авторизации проверяет, разрешен ли клиенту доступ клиента к сервису и если разрешен, то выдает клиенту билет на доступ к ресурсу. При этом, расхождение часов клиента и серверов не должно быть более 5 минут. На самом деле, все гораздо сложнее. О кербкрос более подробно можно почитать в приведенных ссылках в конце статьи.
До определенного времени Kerberos являлся технологией, которую разрабатывал MIT (Massachusetts Institute of Technology) для целей США и имелся запрет на экспорт данной технологии. Но вскоре в Королевском Технологическом Институте (Royal Institute of Technology — KTH) в Европе была создана свободная реализация Kerberos, известная как проект Heimdal Kerberos. В итоге, обе разработки имеют свободные реализации, как MIT Kerberos, так и Heimdal Kerberos.
Протокол Kerberos в среде Active Directory работает в купе со следующими компонентами операционной системы:
- Служба доменных имен DNS
- Служба каталога LDAP
- Протокол SMB
- Служба Kerberos
Каждая из них выполняет свою работу, но если хотя бы один из этих компонентов будет функционировать неправильно, то ввод клиента в домен будет невозможен.
Linux в домене Active Directory
Для реализации взаимодействия пользователей Windows (с их SID) и локальных пользователей UNIX (имеющих идентификаторы UID и GID) существует несколько подходов:
Каталог LDAP AD как источник проверки подлинности. Active Directory и является типичным LDAPv3-каталогом, при этом, при проверке подлинности силами LDAP имя пользователя и пароль передаются без шифрования – открытым текстом. Это, естественно, небезопасно. Для решения данной проблемы возможно использовать шифрование SSL, но добавляет определенный объем танцев с бубном при дополнительной настройке AD, а так же лишнюю нагрузку на контроллер домена. При этом Name Service Switch (NSS) работает напрямую с LDAP. Данный вид хранения информации о соответствии пользователей Windows и Linux удобен при использовании NT4 PDC организованном на SAMBA с хранением информации в базе LDAP.
Демон Winbind. При данном способе, NSS настраивается на работу с Winbind, а Winbind в свою очередь занимается “разрешением” имен пользователей (точнее идентификаторов SID) в UID и GID с помощью LDAP, RPC и/или Kerberos – вызовов и создается (кэшируется) запись о пользователе в файлах демона winbindd: winbindd_idmap.tdb и winbindd_cache.tdb. Данный способ мы и будем рассматривать.
Если для получения информации о пользователях не используется LDAP Active Directory, каждый сервер SAMBA – член Active Directory поддерживает свою уникальную базу данных присоединений пользователей. Это значит, что почти бесспорным является тот факт, что пользователь, имеющий доступ к двум серверам – членам домена не имеет того же самого UID/GID на обоих серверах, в тоже время это прозрачно для пользователя сети Windows, потому что мы разграничиваем доступ к ресурсам на основании имен пользователей и групп, а не на основании UID и GID. Данные о пользователях хранятся (кэшируются) в файлах winbindd_idmap.tdb и winbindd_cache.tdb.
Введение Linux в домен Active Directory
Исходные данные
NetBIOS имя домена – AD
Полное имя домена – AD.local
Имена контроллеров домена – dc.AD.local и dc2.AD.local
IP контроллеров домена – 10.0.0.2 и 10.0.0.1 соответственно
Адресация локальной сети – 10.0.0.1/24 (он же 10.0.0.1/255.255.255.0)
IP SAMBA-сервера – 10.0.0.11
Имя SAMBA-сервера – files.AD.local
Подготовка системы
Пример включения в домен буду рассматривать на Debian 6. Все нижеуказанные шаги можно вполне применить к другому дистрибутиву. Samba предоставляет собой три демона: smbd, nmbd и winbindd. smbd – отвечает за общий доступ к файлам и принтерам, nmbd – за разрешение имен по протоколу SMB/CIFS, регистрацию компьютера в сети и некоторые другие задачи, которые на текущий момент нам не интересны, winbindd обеспечивает связь с контроллером домена Active Directory и аутентификацию пользователей домена. В Debian, демоны smbd и nmbd содержатся в пакете samba, а winbindd – в пакете winbind. Кроме демона winbind в последнем пакете содержится утилита net (кстати, очень похожа на одноименную утилиту от Win), позволяющую выполнять множество административных задач, в том числе присоединение машины к домену AD.
1. Установим пакеты samba и winbind (мне так же понадобилось установить пакет smbclient для использования rpcclient для управления принтерами и tdb-tools для tdbackup для управления базами tdb, в которых SAMBA хранит свои настройки при подключении к домену).
2. Настроим файл hosts, задав полное доменное имя (FQDN) для сервера и проверим сделанные настройки командой hostname:
root@files:~# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 files.AD.local files root@files:~# hostname -f files.AD.local
3. Настроим файл /etc/resolv.conf, задав полное имя домена для автоматической подстановки к именам хостов и адреса DNS серверов локальной сети (более подробно об этом файле в статье Настройка сети в Linux):
root@files:~# cat /etc/resolv.conf domain AD.local search AD.local nameserver 10.0.0.2 nameserver 10.0.0.1
4. Настроим файл Name Service Switch – /etc/nsswitch.conf для указания в каком порядке NSS осуществляет поиск имен пользователей, паролей, хостов, сетей и т. д. (указаны только модифицированные строки):
root@files:~# cat /etc/nsswitch.conf passwd: compat winbind group: compat winbind shadow: compat winbind hosts: files dns wins ..............
Согласно приведенных настроек, при поиске имен пользователей, групп и паролей Linux будет последовательно обращаться к встроенной базе данных (файлам /etc/passwd, /etc/group, /etc/shadow), затем – к демону winbind. При разрешении имени хоста сначала будет использоваться файл /etc/hosts, затем DNS и, в последнюю очередь, служба имен NetBIOS. Это может пригодиться, если в вашей сети есть хосты, не зарегистрированные в DNS, но имеющие имена NetBIOS, к примеру, компьютеры под управлением Windows в составе рабочей группы.
Настройка SAMBA
1. Проверим, поддерживает ли установленный пакет работу с протоколом Kerberos и каталогом LDAP:
root@files:~# smbd -b | grep KRB HAVE_KRB5_H HAVE_KRB5_LOCATE_PLUGIN_H HAVE_ADDRTYPE_IN_KRB5_ADDRESS HAVE_DECL_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE HAVE_DECL_KRB5_GET_CREDENTIALS_FOR_USER HAVE_INITIALIZE_KRB5_ERROR_TABLE HAVE_KRB5 HAVE_KRB5_AUTH_CON_SETUSERUSERKEY HAVE_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE HAVE_KRB5_C_ENCTYPE_COMPARE HAVE_KRB5_C_VERIFY_CHECKSUM HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER HAVE_KRB5_ENCRYPT_BLOCK HAVE_KRB5_ENCRYPT_DATA HAVE_KRB5_ENCTYPE_TO_STRING HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG HAVE_KRB5_FREE_DATA_CONTENTS HAVE_KRB5_FREE_HOST_REALM HAVE_KRB5_FREE_KEYTAB_ENTRY_CONTENTS HAVE_KRB5_FREE_UNPARSED_NAME HAVE_KRB5_FWD_TGT_CREDS HAVE_KRB5_GET_CREDENTIALS_FOR_USER HAVE_KRB5_GET_HOST_REALM HAVE_KRB5_GET_INIT_CREDS_OPT_ALLOC HAVE_KRB5_GET_INIT_CREDS_OPT_FREE HAVE_KRB5_GET_PERMITTED_ENCTYPES HAVE_KRB5_GET_RENEWED_CREDS HAVE_KRB5_KEYBLOCK_IN_CREDS HAVE_KRB5_KEYTAB_ENTRY_KEY HAVE_KRB5_KEYUADE_APP_DATA_CKSUM HAVE_KRB5_KT_FREE_ENTRY HAVE_KRB5_LOCATE_KDC HAVE_KRB5_MK_REQ_EXTENDED HAVE_KRB5_PRINCIPAL2SALT HAVE_KRB5_PRINCIPAL_COMPARE_ANY_REALM HAVE_KRB5_PRINC_COMPONENT HAVE_KRB5_PRINC_REALM HAVE_KRB5_SET_DEFAULT_TGS_ENCTYPES HAVE_KRB5_SET_DEFAULT_TGS_KTYPES HAVE_KRB5_SET_REAL_TIME HAVE_KRB5_STRING_TO_KEY HAVE_KRB5_TKT_ENC_PART2 HAVE_KRB5_USE_ENCTYPE HAVE_KRB5_VERIFY_CHECKSUM HAVE_LIBGSSAPI_KRB5 HAVE_LIBKRB5 HAVE_MAGIC_IN_KRB5_ADDRESS HAVE_SHORT_KRB5_MK_ERROR_INTERFACE HAVE_TICKET_POINTER_IN_KRB5_AP_REQ KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT KRB5_TICKET_HAS_KEYINFO KRB5_VERIFY_CHECKSUM_ARGS root@files:~# smbd -b | grep LDAP HAVE_LDAP_H HAVE_LDAP HAVE_LDAP_ADD_RESULT_ENTRY HAVE_LDAP_INIT HAVE_LDAP_INITIALIZE HAVE_LDAP_SASL_WRAPPING HAVE_LDAP_SET_REBIND_PROC HAVE_LIBLDAP LDAP_SET_REBIND_PROC_ARGS
Если у вас вывод похож на указанный значит все ок. Если вывод не содержит строчек с надписями KRB5 и LDAP, значит нужно скачать исходники и собрать демон с поддержкой Kerberos. Как собирать ПО из исходников – я писал в статье Управление программным обеспечением в Linux.
2. Настроим САМБА для ввода в домен
root@files:~# # переместим оригинальный файл для ознакомления в будущем root@files:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.orig root@files:~# root@files:~# # создадим файл, следующего содержания, root@files:~# # в котором будут содержаться комментарии: root@files:~# root@files:~# cat /etc/samba/smb.conf.comment [global] # NetBIOS-имя хоста (должно совпадать с значением в hosts) netbios name = FILES # уровень безопасности (ads - член домена AD) security = ads # NetBIOS имя домена workgroup = AD # область работы kerberos \ # (совпадает с именем домена и записывается прописными буквами) realm = AD.LOCAL # метод аутентификации smbd (с помощью winbind) auth methods = winbind # имена сервера паролей - КД password server = dc.ad.local dc2.ad.local # настройки демона winbind: # мапить пользователей на следующий диапазон ЮИД idmap uid = 10000-20000 # мапить группы на следующий диапазон ГИД idmap gid = 10000-20000 # разделитель домена и объекта winbind separator = ^ # разрешить приложениям (например passwd) перечислять пользователей # и группы из домена AD (необязательно) winbind enum users = Yes winbind enum groups = Yes # разрешить сторонним приложениям ссылаться на пользователей AD # как на локальных, не указывая имя домена и символ-разделитель winbind use default domain = yes # разрешить кэширование авторизованных пользователей # (на случай, если КД станет недоступен) - на время настройки лучше отключить #winbind offline logon = yes # НЕ заставлять nmbd-сервер быть мастер-сервером Wins preferred master = No # оприеделить лог-файл (по умолчанию - сислог) log file = /var/log/samba/log.new # уровень логирования (можно менять от 0-минимальный до 9 - максимальный) log level = 3 # действие при крушении демона panic action = /usr/share/samba/panic-action %d # принтеры нам не нужны #load printers = no #show add printer wizard = no #disable spoolss = yes # принтеры нам нужны printing = CUPS cups options = raw show add printer wizard = yes # использовать только порт 139 # (немного ускоряет обращения и избавляет от некоторых ошибок в логе) smb ports = 139 # файл ручного мапинга пользователей username map = /etc/samba/smbusers # ускорим работу самба socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 root@files:~# # проверим корректность файла и сформируем итоговый конфигурационный файл root@files:~# testparm -s /etc/samba/smb.conf.comment > /etc/samba/smb.conf Load smb config files from /etc/samba/smb.conf.comment rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) Loaded services file OK. Server role: ROLE_DOMAIN_MEMBER
В документации Samba указывается, что параметр password server не обязателен, поскольку Samba умеет находить сервер паролей, используя SRV-записи DNS. Однако автоопределение сервера паролей срабатывает не всегда, особенно в старых версиях Samba. В Windows 200x для отделения имени домена от имени пользователя используется обратная косая черта. В Linux это может привести к проблемам, поскольку данный символ трактуется как служебный, для решения данной проблемы введен параметр winbind separator, заменяющий \ на указанный символ.
После проведенных тестов, можно однозначно утвердить, что указанный параметр socket options однозначно в разы ускоряет работу samba.
3. Удаляем если есть (или переносим в резервные копии) файлы из /var/lib/samba/*.tdb. Данное действие актуально, если самба ранее была подключена к домену, т.к. в данных файлах хранятся кэш настроек SAMBA. Описание каждого файла можно почитать по ссылкам в конце статьи.
4. Синхронизируем время
Для корректной работы SAMBA, как клиента домена Active Directory, расхождение часов не должно превышать 5 минут. Точнее сказать – этого требует протокол Kerberos. Для решения вопроса синхронизации времени я предлагаю использовать демона ntpd. Как его установить я описывал в статье Сервер точного времени на Linux, поэтому ограничусь приведением рабочего конфига для клиента сети Windows:
root@files:~# cat /etc/ntp.conf server dc.ad.local server dc2.ad.local restrict default ignore restrict dc.ad.local noquery notrap restrict dc2.ad.local noquery notrap restrict 127.0.0.1 nomodify notrap
Для синхронизации времени можно использовать, так же команду net time set в cron.
На данном этапе можно перегрузить машину для применения всего выше сделанного.
Ввод SAMBA в домен Active Directory
После загрузки машины – убеждаемся, что время не отстаёт от доменного и выполняем команду:
root@files:~# net ads join -U domain_admin Enter domain_admin's password: Using short domain name -- AD Joined 'FILES' to realm 'ad.local'
Вместо учетной записи «domain_admin» необходимо использовать имя пользователя с правом присоединения компьютера к домену. Стоит обратить внимание, что если в конфиге “самба” не указан параметр winbind use default domain, то имя пользователя необходимо вводить в формате [email protected]. Сообщения выводимые после выполнения команды обозначают следующее: Using short domain name — AD и Joined ‘FILES’ to realm ‘ad.local’ указывают на удачный ввод в домен. Если после выполнения команды не было ошибки Join to domain is not valid, значит скорее всего, ввод в домен произведен успешно.
У меня при первой попытке вывалилось сообщение
[2011/07/31 01:52:14.769838, 0] libads/kerberos.c:333(ads_kinit_password) kerberos_kinit_password [email protected] failed: Preauthentication failed
но тем не менее сервер был включен в домен. В списках рассылки видел, что эта ошибка связана с некорректной работой библиотек отвечающих за Kerberos. Как избавиться от ошибки – решения не нашел.
Далее, для корректной работы SAMBA с доменной аутентификацией Active Directory, необходимо перезапустить демонов samba и winbind, после чего можно просмотреть список доменных учетных записей:
root@files:~# # попытка получить список пользователей до перезапуска служб root@files:~# wbinfo -u Error looking up domain users root@files:~# # перезапуск служб root@files:~# service samba restart Stopping Samba daemons: nmbd smbd. Starting Samba daemons: nmbd smbd. files ~ # service winbind restart Stopping the Winbind daemon: winbind. Starting the Winbind daemon: winbind. root@files:~# # попытка получить список пользователей после перезапуска служб root@files:~# wbinfo -u FILES^nobody guest administrator krbtgt domain_user1 domain_user2 ... root@files:~# # попытка получить информацию о пользователе после перезапуска служб root@files:~# id domain_user13 uid=10002(domain_user13) gid=10002(domain users) группы=10002(domain users),10007(it),10010(акцизный склад),10011(sql_ts),10006(it-dep),10007(it),10001(BUILTIN^users) root@samba:~# getent passwd domain_user11 domain_user11:*:10002:10009::/home/AD/domain_user11:/bin/false
Все. После данных манипуляций наш Linux – в домене AD. И через сетевое окружение можно на него зайти без ввода пароля, только там не будет расшаренных ресурсов, их мы создадим позднее.
Диагностика SAMBA при включении в домен AD
Если включение в домен завершилось ошибкой, необходимо:
- Проверить настройки DNS на Linux и убедиться, что команда hostname -f выводит корректное FQDN-имя хоста.
- Проверить, в состоянии ли утилиты nslookup или dig разрешить имя КД Active Directory в IP.
- Проверить, поддерживает ли установленный пакет samba работу с Kerberos и LDAP.
- Если вышеуказанные шаги не помогли, можно выполнить тестовое подключение к домену с увеличенным значением log level(параметр -d увеличивает уровень журналирования), тем самым выявив ошибку подключения:
- net ads testjoin -d 10 -Udomain_admin
Для большего понимания взаимодействия SAMBA с инфраструктурой Active Directory приведу (справа) иллюстрацию (взято с Linuxformat).
Существует распространенное заблуждение, что Linux (samba) при входе в домен не в состоянии самостоятельно получить первую квитанцию от центра ключей Kerberos. Это заблуждение возникло потому что в официальном руководстве по SAMBA в одном из подготовительных шагов при введении SAMBA в AD приводится настройка файла /etc/krb5.conf и вызовов команды kinit. Данный файл содержит параметры автономного клиента Kerberos в локальной Linux и утилита linit использует именно настройки из файла /etc/krb5.conf.
Соответственно, настройка krb5.conf и выполнение kinit необходимо исключительно для тестирования связи с сервером Kerberos и выполнять эти настройки совсем не обязательно. Samba может самостоятельно выполнять весь цикл взаимодействия KDC, включая обновление квитанций по истечению срока их действия без применения сторонних утилит. Чтобы библиотеки Kerberos, которые использует самба для взаимодействия с KDC корректно были настроены и работали, SAMBA создает на базе информации из файла smb.conf файл /var/run/samba/smb_krb5/krb5.conf.AD, который и заменяет стандартный /etc/krb5.conf.
Создание разделяемых ресурсов SAMBA в домене Active Directory
Введение
Чтобы сразу избавить от ошибок в будущем при организации разделяемых ресурсов, хочу сказать, что при описании ресурсов в SAMBA конечный доступ к файлам и папкам определяется двумя параметрами. Первое – это параметры доступа, указанные в параметрах разделяемого ресурса, второе – права доступа к файловой системе. При этом, по-умолчанию, все пользователи самба обращаются к файловой системе с правами группы “остальные”, если в samba не указано иное (например подключившийся пользователь не мапится в локального пользователя UNIX). То есть, кроме того, что самба определяет права доступа к разделяемому ресурсу, она может подключающемуся пользователю назначить соответствие системному локальному пользователю Linux, так, что подключившийся пользователь будет получать доступ к файловой системе с правами какого-либо примапленного (читай – назначенного, образовано от англ. mapping присоединение) локального пользователя Linux.
Это чем-то похоже на организацию доступа к файлам в Windows, в которой тек же есть права доступа к файловой системе (вкладка “Безопасность”) и права доступа к разделяемому ресурсу (вкладка “Доступ”).
Права файловой системы я рассматривал в статье Права доступа в Linux, т.к. эта тема очень актуальна для текущей статьи, напомню в двух словах о правах… Итак, права в Linux определяются тремя возможностями (чтение, запись и исполнение) для трёх групп пользователей (владелец, группа, все остальные). При этом семантика, применения прав к файлам и каталогам несколько расходится. Приведу небольшую таблицу с описанием прав доступа по отношению к файлам/каталогам:
Право | Для файла | Для каталога |
Чтение (r или 4) | Чтение содержимого файла. | Просмотр содержимого каталога. Чтение списка файлов и подкаталогов. |
Запись (w или 2) | Изменение содержимого файла или удаление файла. | Изменение списка файлов и подкаталогов. В том числе удаление, переименование файлов и подкаталогов. |
Исполнение (x или 1) | Исполнение содержимого файла, как соответствующего набора команд. | Вход в каталог и вход в подкаталоги каталога. |
Файловый сервер
Общий ресурс только на чтение
Для создания ресурса на чтение, достаточно добавить в smb.conf строки:
[root@files ~]# # определим общий ресурс [root@files ~]# grep бмен -A4 /etc/samba/smb.conf.comment [Обменник] # путь к каталогу path = /shares/obmen # комментарий к ресурсу comment = Общий ресурс на чтение на сервере Samba [root@files ~]# # создадим каталог с правами: [root@files ~]# ls -ld /shares/obmen/ drwxr-xr-x 2 root root 4096 Июл 31 20:07 /shares/obmen/
из листинга видно, что владелец и группа каталога – root и права каталога – rwxr-xr-x. Соответственно, полные права имеет только владелец (rwx) – root, группа же и “остальные” имеют право только на чтение и выполнение (r-xr-x). А т.к., согласно глобальных настроек SAMBA, пользователи у нас мапяться с ID в диапазоне от 10000 до 20000, соответственно, при доступе к файловой системе – пользователь обращается как “остальные”, соответственно имеет права r-x. Скажу даже больше, даже если мы зададим полные права на каталог для всех (chmod a+rwx /shares/obmen), то пользователи не смогут писать в каталог, пока мы в параметрах ресурса SAMBA не зададим данное разрешение.
Общий ресурс на чтение и запись для всех (файлопомойка)
Для организации абсолютной файлопомойки мы можем пойти следующим путем:
[root@files ~]# # зададим полные права "остальным" (rwx) [root@files ~]# chmod o+rwx /shares/obmen [root@files ~]# ls -ld /shares/obmen/ drwxr-xrwx 2 root root 4096 Июл 31 20:07 /shares/obmen/ [root@files ~]# # определим возможность записи в каталог в настройках ресурса [root@files ~]# grep бмен -A6 /etc/samba/smb.conf.comment [Обменник] # путь к каталогу path = /shares/obmen # комментарий comment = Общий ресурс на сервере Samba # включает возможность записи read only = no [root@files ~]# testparm -s /etc/samba/smb.conf.comment > /etc/samba/smb.conf Load smb config files from /etc/samba/smb.conf.comment rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) Processing section "[Обменник]" Loaded services file OK. WARNING: You have some share names that are longer than 12 characters. These may not be accessible to some older clients. (Eg. Windows9x, WindowsMe, and smbclient prior to Samba 3.0.) Server role: ROLE_DOMAIN_MEMBER [root@files ~]# service samba restart Stopping Samba daemons: nmbd smbd. Starting Samba daemons: nmbd smbd.
Создав указанный конфиг, при создании каталогов и файлов в разделяемом ресурсе, они будут созданы с владельцем и основной группой, к которой принадлежит создавший объекты владелец, а так же с маской по-умолчанию:
[root@files ~]# testparm -v -s /etc/samba/smb.conf.comment | grep mask ...... create mask = 0744 ....... directory mask = 0755 ......
Для файлов – 0744, для каталогов – 755, то есть, при создании файлов – у группы и остальных будут отрезаны биты записи и исполнения, а при создании каталогов – биты записи:
[root@files ~]# ls -laR /shares/obmen/ /shares/obmen/: итого 12 drwxr-xrwx 3 root root 4096 Июл 31 20:39 . drwxr-xr-x 4 root root 4096 Июл 31 20:07 .. drwxr-xr-x 3 user1 domain users 4096 Июл 31 20:39 Новая папка /shares/obmen/Новая папка: итого 12 drwxr-xr-x 3 user1 domain users 4096 Июл 31 20:39 . drwxr-xrwx 3 root root 4096 Июл 31 20:39 .. drwxr-xr-x 2 user1 domain users 4096 Июл 31 20:39 Новая папка /shares/obmen/Новая папка/Новая папка: итого 12 drwxr-xr-x 2 user1 domain users 4096 Июл 31 20:39 . drwxr-xr-x 3 user1 domain users 4096 Июл 31 20:39 .. -rwxr--r-- 1 user1 domain users 3 Июл 31 20:39 Новый текстовый документ.txt -rwxr--r-- 1 user1 domain users 0 Июл 31 20:39 Новый точечный рисунок.bmp
Соответственно, удалить или изменить файл смогут либо сами владельцы файлов, либо root. Чтобы избежать этой проблемы и чтобы все пользователи могли ч/liитать и писать во все файлы, необходимо добавить следующие параметры в описание ресурса:
[root@files ~]# grep бмен -A10 /etc/samba/smb.conf.comment [Обменник] # путь к каталогу path = /shares/obmen # комментарий comment = Общий ресурс на сервере Samba # включает возможность записи read only = no # доступ всем на все create mask = 0666 directory mask = 0777 [root@files ~]# testparm -s /etc/samba/smb.conf.comment > /etc/samba/smb.conf Load smb config files from /etc/samba/smb.conf.comment rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) Processing section "[Обменник]" Loaded serv5 минутices file OK. WARNING: You have some share names that are longer than 12 characters. These may not be accessible to some older clients. (Eg. Windows9x, WindowsMe, and smbclient prior to Samba 3.0.) Server role: ROLE_DOMAIN_MEMBER [root@files ~]# service samba restart Stopping Samba daemons: nmbd smbd. Starting Samba daemons: nmbd smbd.
В результате – все могут читать и все могут писать и удалять не зависимо от хозяина файла или каталога.
Общий ресурс только на чтение для определенной группы пользователей
Для создания ресурса на чтение для определенной группы пользователей, необходимо добавить в smb.conf строки:
[root@files ~]# # определим общий ресурс [root@files ~]# grep Бух -A7 /etc/samba/smb.conf.comment [Бухгалтерия] # путь к каталогу path = /shares/buh # комментарий comment = Каталог отдела Бухгалтерия # определим доступ для отдельной группы пользователей valid users = @"AD^Бухгалтерия", AD^domain_user [root@files ~]# # создадим каталог с правами (у группы "остальные должны быть права r-x"): [root@files ~]# ls -ld /shares/buh/ drwxr-xr-x 2 root root 4096 Июл 31 20:07 /shares/buh/
Параметр valid users определяет какой/им группе/ам пользователей или просто каким пользователям разрешен доступ к данному каталогу. Обратите внимание, что даже когда определен параметр winbind use default domain, требуется указание полного, определенного в домене имени пользователя, например valid users = @”DOMAIN\Domain Group”. Обратите внимание так же на использование двойных кавычек. Символ ^ – возможно у вас будет другой, в зависимости от указанного в глобальном параметре winbind separator. Так же, обращаю ваше внимание, что на каталог, указанный в параметре path разделенного ресурса должны быть права не менее r-x для группы “остальные”, чтобы подключенные пользователи могли читать файлы и просматривать содержимое каталога.
Общий ресурс только на чтение и запись для определенной группы пользователей
Для создания ресурса на чтение и запись для определенной группы пользователей, необходимо добавить в smb.conf строки:
[root@files ~]# # определим общий ресурс [root@files ~]# grep Бух -A7 /etc/samba/smb.conf.comment [Бухгалтерия] # путь к каталогу path = /shares/buh # комментарий comment = Каталог отдела Бухгалтерия # Определим доступ для записи read only = no # определим доступ для отдельной группы пользователей valid users = @"AD^Бухгалтерия", AD^domain_user # включить наследование прав доступа inherit permissions = Yes [root@files ~]# # создадим каталог с правами (у группы "остальные должны быть права rwx"): [root@files ~]# ls -ld /shares/buh/ drwxr-xrwx 2 root root 4096 Июл 31 20:07 /shares/buh/
Как видно, добавился неизвестный нам параметр inherit permissions = Yes, который задает наследовать права доступа к создаваемым файлам и каталогам от родительского. Это сделано опять же по причине того, что каталоги и файлы создаются с маской по-умолчанию.
Дополнительно
Указанные выше способы – это не единственное решение для ресурсов общего доступа для пользователей домена. Можно пойти другими путями, например назначить в файловой системе – группу-владельца каталога, поставить на каталог бит SGID для наследования владельца группы и в описании ресурса ограничиться двумя параметрами: path и read only =no.
Я, например, стараюсь использовать такую схему предоставления доступа к общим ресурсам: я стараюсь ставить права файловой системы на максимум и ограничивать доступ на уровне smb.conf и описания ресурса. То есть, права доступа на файлы у меня rw-rw-rw-, а на каталоги rwxrwxrwx и в описании ресурса я устанавливаю параметр inherit permissions для наследования указанных прав доступа. Либо можно указать параметры create mask = 0666 и directory mask = 0777, чтобы права задавались при создании файлов и каталогов. Ограничение на доступ к ресурсу через smb.conf устанавливаются параметрами valid users, write users и admin users. У этого способа так же есть дополнительный плюс. При необходимости переноса сервера на другую машину. достаточно будет сделать 3 вещи: 1. Перенести содержимое расшаренных ресурсов, 2. Назначить права 666 для файлов и 777 для каталогов и 3. Перенести Файл smb.conf. Без необходимости переноса всех баз SAMBA – tdb и отслеживания соответствия SID и локальных UID/GID.
Так же есть такой финт: в разделе [global] в smb.conf был указан параметр username map = /etc/samba/smbusers. Данный параметр очень удобен, т.к. позволяет присоединить пользователей Windows к локальным пользователям UNIX. Например, можно назначить root’ом Вашего пользователя в домене и управлять всеми общими ресурсами с полными правами:
root@samba:~# cat /etc/samba/smbusers root = AD^domain_admin
При внесении доменных пользователей в данный файл необходимо указывать полное имя в независимости от параметра winbind use default domain. Так же, возможно указать несколько пользователей или доменную группу разделенные пробелами.
Для сопоставления доменных групп по-умолчанию (т.е. таких как Domain Admins, Domain Users и др, которые создаются в SAMBA автоматом, их еще можно просмотреть командой net groupmap list или getent group) и групп UNIX, необходимо выполнить:
$ net groupmap modify ntgroup="Domain_Group" unixgroup=namegroup
Для сопоставления новых доменных групп и групп UNIX, необходимо выполнить:
$ # добавление новой группы $ net rpc group add "NewGroup" $ # сопоставление групп $ net groupmap modify ntgroup="NewGroup" unixgroup=newunixG
При этом, сопоставление сохраняется в одном из tdb файлов SAMBA.
Но! username map не работает, если в конфиге SAMBA на ресурс задан параметр valid users и пользователь, указанный в файле username map не входит в членов параметра valiud users. Чтобы обойти эту проблему, необходимо указать параметр admin users, который синтаксически аналогичен valid users, и определяет указанному пользователю работать с ресурсом в качестве пользователя root.
Кроме того, можно скрыть ресурс от общих глаз, если поставить параметр browseable = no, то ресурс не будет отображаться в проводнике, когда заходишь на сервер, но по полному пути доступ к нему будет.
Кроме стандартных прав (которых, кстати, вполне достаточно для решения основных задач по организации файлового сервера) функциональность можно расширить с помощью т.н. POSIX ACL, которые позволяют назначить права доступа нескольким владельцам или нескольким группам пользователей на уровне файловой системы. POSIX ACL ограничены всё теми же правами rwx. Полноценно редактировать права доступа аналогично Windows, например, назначать пользователю право изменения прав безопасности там возможности нет. Про данную технологию я постараюсь написать отдельную статью, а так же дам ссылки в конце – почитать о POSIX ACL.
Сервер печати в домене Active Directory
Для запуска сервера печати на нашем сервере SAMBA в домене Active Directory, необходимо проделать следующие шаги:
- Установить пакет cups (мне так же необходимо было установить пакет hplip, т.к. используются преимущественно принтеры от HP и пакет smbclient) и настроить сервер печати по вашим нуждам. Как настраивать сервер печати, я писал в статьях Сервер печати на Linux и Как работает SAMBA ч.2. Поэтому обойдусь только указанием настроек из smb.conf.
- Добавить нужные принтеры через веб-интерфейс CUPS.
- Раскомментировать в smb.confпараметры
# принтеры нам нужны printing = CUPS cups options = raw show add printer wizard = yes
- Закомментировать параметры в smb.conf:
# принтеры нам не нужны #load printers = no #show add printer wizard = no #disable spoolss = yes
- Добавить 2 дополнительных раздела:
[root@files ~]# grep "\[printers" -A15 /etc/samba/smb.conf.comment [printers] # опишем принтеры: comment = Очередь печати SMB # включаем возможность печати printable = yes # путь к спулеру path = /var/spool/samba [print$] # опишем каталог драйверов comment = Драйверы принтера # каталог драйверов path = /var/lib/samba/printers # можно писать read only = No
- Перезапустить демонов cups, samba и winbind.
- Добавить драйверы принтеров, как было описано в статье Как работает SAMBA ч.2 (автоматическая загрузка драйверов). Естественно, загружать драйвер нужно от доменного пользователя, указанного в /etc/samba/smbusers, как root.
- По вкусу настроить параметры по умолчанию для принтера через каталог “Принтеры и Факсы” на сервере самба, ибо у меня почему-то по-умолчанию устанавливался размер бумаги – Letter.
- Пользоваться сетевой печатью.
На моем сервере пришлось устанавливать единый драйвер для всех принтеров сети. Это привело к некоторым проблемам при установке драйверов. При этом, 7 шаг у меня немного растянулся и пришлось пользоваться шеллом для назначения драйвера принтеру. Меня спасла команда rpcclient. Об использовании данной команды можно почитать по ссылкам, приведенным в конце статьи. Итого, 7 шаг принял следующую последовательность:
7.1. Добавить драйвер принтера через каталог “Принтеры и факсы на севере files”: ПКМ по пустому месту – Свойства сервера. Вкладка “Драйверы – Добавить”
7.2. Назначение каждому принтеру необходимого драйвера с помощью команды rpcclient, согласно инструкции: http://samba.org/samba/docs/man/Samba-HOWTO-Collection/CUPS-printing.html#id2644219. Необходимо выполнить шаги 2,3,7-15, т.к. принтеры уже у нас установлены, драйвер тоже уже добавлен на сервер. Основная команда привязки принтера к драйверу выглядела так:
rpcclient localhost -Udomain_admin%password -c / 'setdriver printer_name "HP Universal Printing PS"'
Полезные команды управления SAMBA в домене AD
$ # отобразить (-L) список расшаренных ресурсов на хосте 10.0.0.11 анонимно (-N) $ smbclient -N -L 10.0.0.11 $ # подключиться к ресурсу share хоста 10.0.0.11 с логином username и паролем passwd $ smbclient //10.0.0.11/share -Uusername%passwd $ # просмотреть содержимое tdb-базы (необходим пакет tdb-tool) $ tdbdump /var/lib/samba/secrets.tdb $ # список доменов в сети $ wbinfo --all-domains $ # информация о домене DOMAIN $ wbinfo -D DOMAIN $ # проверить связь с доменом $ wbinfo -t
Что почитать
Протокол керберос:
в оригинале: http://web.mit.edu/kerberos/
дополнительно: http://www.oszone.net/4188/Kerberos
Описание файлов TDB SAMBA
http://samba.org/samba/docs/man/Samba-HOWTO-Collection/install.html#tdbdocs
Установка драйверов принтера с помощью утилиты rpcclient в 15 шагов
http://samba.org/samba/docs/man/Samba-HOWTO-Collection/CUPS-printing.html#id2644219
Отдельное спасибо http://wiki.linuxformat.ru/ за некоторую информацию
Главнейший документ о SAMBA: http://samba.org/samba/docs/man/Samba3-HOWTO/
Самба на русском: http://www.samba-doc.ru/
POSIX ACL в оригинале: http://www.suse.de/~agruen/acl/linux-acls/online/
Резюме
Хочу подвести маленький итог сегодняшней статье. Сегодня мы удачно (или неудачно ) интегрировали наш Linux в доменную структуру Active Directory. При этом, организовали файловое хранилище и сервер печати с автоматической загрузкой драйверов для клиентов Windows. В файловом сервере было организовано несколько типовых примеров каталогов общего доступа. Буду очень рад вашим комментариям и дополнениям.
Upd 2011.08.11: добавил параметр socket oprions
С Уважением, Mc.Sim!
net groupmap modify ntgroup=”Domain_Group” unixgroup=namegroup Заменяем на add так как modify изменяет уже существующие группы
ДА, все верно. В данном случае как раз и нужно изменить, т.к. samba у нас член домена, в котором уже есть группы и которые закэшировались в tdb-базах самба.
Добавлять группу в домен, используя интерфейс Samba, когда в венде есть необходимая GUI-шная mmc-остнастка, наверно, не очень удобно )))
В файле /etc/resolv.conf указываете nameserver 10.0.0.4 nameserver 10.0.0.1, а IP контроллеров домена – 10.0.0.2 и 10.0.0.1. Ошибка, как мне кажется.
Да, точно. Спасибо за замечание!
Спасибо, хорошая статья! А как еще дополнительно сделать папку для пользователей, которые не входят в домен? чтобы эту папку могли изменять все пользователи, кто в домене и не в домене. Кучу всего перепробовал, не получается.
Тут 2 выхода:
1. для недоменных создать гостевого пользователя в домене и когда недоменные пользователи будут получать доступ к серверу, будут вводить пароль гостевой учетки
2. попытаться настроить samba на 2 интерфейса и в 2х разных конфигах указать на один и тот же каталог. Да, и не забыть вставить вторую сетевушку.
Хорошая статья. Спасибо.
К сожалению не удалось ввести в домен windows,linux машину.Пишет вот что Failed to join domain: failed to find DC for domain
Здравствуйте, Mc.Sim
Спасибо Вам за ваши статьи. Очень интересно, познавательно и я вижу сколько труда это стоит.
По сабжу:
xattr, map acl inherit дают возможность разделения доступа на уровне пользователей\групп из AD, что в свою очередь, позволяет тюнить права АБСОЛЮТНО так, как Вам нужно. Попробуйте. Это работает (Centos 6). Если нужно из линукса рулить правами, то setfacl и getfacl в прмощь.
Zenith, спасибо за отзыв и комментарий.
По поводу xattr и map acl inherit – это параметры, использующие Posix ACL. Как я в статье написал, Posix ACL все же имеет некоторые рамки функциональности по сравнению с вендовыми правами. (например, не получится назначать пользователю право изменения прав безопасности)
Полноценно “этимологию” работы вендовых прав попытались реализовать в samba4, но до нее пока руки не дошли…
Чтобы не проверять, не сопоставлять, не устанавливать в ручную время с АД,
можно ввести команду(и периодически вызывать раз в сутки):
net time set -I имя контроллера домена
Спасибо за коммент.
Я в статье указал этот вариант:
Настраивал на SLES 11 SP2
Samba 3.6
smb.conf:
[global]
interfaces = eth0
netbios name = BIS
security = ads
workgroup = SAMPOSPB
realm = SAMPOSPB.LOCAL
auth methods = winbind
idmap config * : range = 10000-20000
idmap config * : backend = tdb
winbind separator = ^
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = yes
preferred master = No
log level = 9
load printers = no
show add printer wizard = no
disable spoolss = yes
smb ports = 139
username map = /etc/samba/smbusers
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
nsswitch.conf:
passwd: compat winbind
shadow: compat winbind
group: compat winbind
hosts: files dns
networks: files dns
Машинка в домене, wb отрамаьывает как надо:
# wbinfo -t
checking the trust secret for domain DOMAIN via RPC calls succeeded
# wbinfo -u показывает доменных юзеров
# wbinfo -g показывает доменные группы
# wbinfo –pam-logon=user
Enter user’s password:
plaintext password authentication succeeded
Но id работать не хочет
# id user
id: user: Такого пользователя нет
в итоге при попытке доступа к машине по сети, в логах самбы следующее
Found account name from PAC: user [Name Fam]
[2014/07/30 15:56:38.405637, 3] auth/user_krb5.c:50(get_user_from_kerberos_info)
Kerberos ticket principal name is [[email protected]]
[2014/07/30 15:56:38.405700, 4] auth/user_util.c:361(map_username)
Scanning username map /etc/samba/smbusers
[2014/07/30 15:56:38.405765, 5] lib/username.c:171(Get_Pwnam_alloc)
Finding user DOMAIN^user
[2014/07/30 15:56:38.405805, 5] lib/username.c:116(Get_Pwnam_internals)
Trying _Get_Pwnam(), username as lowercase is domain^user
[2014/07/30 15:56:38.406175, 5] lib/username.c:124(Get_Pwnam_internals)
Trying _Get_Pwnam(), username as given is DOMAIN^user
[2014/07/30 15:56:38.406591, 5] lib/username.c:134(Get_Pwnam_internals)
Trying _Get_Pwnam(), username as uppercase is DOMAIN^USER
[2014/07/30 15:56:38.406942, 5] lib/username.c:143(Get_Pwnam_internals)
Checking combinations of 0 uppercase letters in domain^user
[2014/07/30 15:56:38.407011, 5] lib/username.c:149(Get_Pwnam_internals)
Get_Pwnam_internals didn’t find user [DOMAIN^user]!
[2014/07/30 15:56:38.407053, 5] lib/username.c:171(Get_Pwnam_alloc)
Finding user user
[2014/07/30 15:56:38.407087, 5] lib/username.c:116(Get_Pwnam_internals)
Trying _Get_Pwnam(), username as lowercase is user
[2014/07/30 15:56:38.407354, 5] lib/username.c:134(Get_Pwnam_internals)
Trying _Get_Pwnam(), username as uppercase is USER
[2014/07/30 15:56:38.407666, 5] lib/username.c:143(Get_Pwnam_internals)
Checking combinations of 0 uppercase letters in user
[2014/07/30 15:56:38.407731, 5] lib/username.c:149(Get_Pwnam_internals)
Get_Pwnam_internals didn’t find user [user]!
[2014/07/30 15:56:38.408361, 1] auth/user_krb5.c:162(get_user_from_kerberos_info)
Username DOMAIN^user is invalid on this system
1. Покажите Вывод команды testparm -s -v.
2. попробуйте использовать вместо idmap config * : range = 10000-20000, параметр idmap uid…
Судя по документации нужно использоват именно ” idmap config * : range” т.к. idmap uid устарела.
Проблема решилась через YaST – выставил в “Принадлежность к домену Windows” галочку “Также использовать информацию SMB для аутентификации Linux” После этого всё заработало. Анализировал изменения в конфигах после этого – YaST всё таки настроил krb5.conf
Сейчас другая задача – на сервере на самбовских шарах выставлены права для определённой локальной группы пользователей. Менять нельзя. Не могу добавить доменного пользователя в локальную группу…
Не люблю я этот Yast ))
По поводу прав доступа, можно попробовать:
1. использовать мапирование доменной группы в параметре username map в локального пользователя.
2. использовать acl на файловых правах на файловую систему
Аналогично. Не люблю. Но иногда приходится пользовать…
по предложенным вариантам пойду курить маны. Если нужно могу потом отписаться.
Было бы интересно услышать о результатах )
Не выходит с юзермап.
Я ведь правильно понимаю, что после маппинга юзер должен работать с файловой системой как юниксовый?
@mapdriveo – группа доменная куда входит DOMAIN\user0129
После того как прописал username map вообще перестало пускать на шару
user ‘DOMAIN\user0129’ (from session setup) not permitted to access this share (temp share)
Если коментарю username map – всё работает отлично, но файлы создаются от имени доменного пользователя.
конфиг
[global]
interfaces = eth0
netbios name = BIS
workgroup = DOMAIN
realm = DOMAIN.LOCAL
security = ADS
winbind use default domain = yes
load printers = no
show add printer wizard = no
disable spoolss = yes
winbind refresh tickets = yes
idmap config * : range = 10000-20000
idmap config * : backend = tdb
winbind enum users = Yes
winbind enum groups = Yes
winbind cache time = 30
log level = 2
username map = /etc/samba/username.map
[temp share]
path = /home/bis/temp
valid users = @mapdriveo, linuxuser
read only = no
create mask = 0660
directory mask = 0770
/etc/samba/username.map:
linuxuser = DOMAIN\user0129
В принципе текущас задача решилась через force user но эт как-то не гибко. (
Через force user тоже неплохое решение.
Можно поискать другие пути, тогда покажите ls -la для каталога, в который необходимо обеспечить доступ и покажите полный конфиг самбы testparm -s -v.
Проблема на ubuntu такая же как у Mr.Bes –
id: user: Такого пользователя нет
Сервер в домен добавлен, wbinfo -u \ -g возвращает юзеров и и группы.
Почему юзеры не мапятся, помогите разобраться?
Работаю без gui через ssh.
Если еще актуально, покажите вывод testparm -s -v и содержимое /etc/nsswitch.conf.
Добрый день, у меня проблема как и у CocoJumbo, настроивал все по данной статье.
При регистрации в домене ошибок не было.
wbinfo -u и wbinfo -g выводят пользователей и группы домена соответственно, но id говорит, такого пользователя нет.
Вывод testparm -s -v
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
WARNING: The setting 'security=ads' should NOT be combined with the 'password server' parameter.
(by default Samba will discover the correct DC to contact automatically).
Server role: ROLE_DOMAIN_MEMBER
[global]
dos charset = CP850
unix charset = UTF-8
workgroup = UL
realm = UL.AC.RU
netbios name = IT003
netbios aliases =
netbios scope =
server string = Samba 4.1.11-Ubuntu
interfaces =
bind interfaces only = No
server role = auto
security = ADS
auth methods = winbind
encrypt passwords = Yes
client schannel = Auto
server schannel = Auto
allow trusted domains = Yes
map to guest = Never
null passwords = No
obey pam restrictions = No
password server = acu-v-dc-01.UL.AC.RU acu-v-dc-02.UL.AC.RU
smb passwd file = /etc/samba/smbpasswd
private dir = /var/lib/samba/private
passdb backend = tdbsam
algorithmic rid base = 1000
root directory =
guest account = nobody
enable privileges = Yes
pam password change = No
passwd program =
passwd chat = *new*password* %n\n *new*password* %n\n *changed*
passwd chat debug = No
passwd chat timeout = 2
check password script =
username map = /etc/samba/smbusers
username level = 0
unix password sync = No
restrict anonymous = 0
lanman auth = No
ntlm auth = Yes
client NTLMv2 auth = Yes
client lanman auth = No
client plaintext auth = No
client use spnego principal = No
preload modules =
dedicated keytab file =
kerberos method = default
map untrusted to domain = No
log level = 2
syslog = 1
syslog only = No
log file = /var/log/samba/log.new
max log size = 5000
debug timestamp = Yes
debug prefix timestamp = No
debug hires timestamp = Yes
debug pid = No
debug uid = No
debug class = No
enable core files = Yes
smb ports = 139
large readwrite = Yes
server max protocol = SMB3
server min protocol = LANMAN1
client max protocol = NT1
client min protocol = CORE
unicode = Yes
min receivefile size = 0
read raw = Yes
write raw = Yes
disable netbios = No
reset on zero vc = No
log writeable files on exit = No
defer sharing violations = Yes
nt pipe support = Yes
nt status support = Yes
max mux = 50
max xmit = 16644
name resolve order = lmhosts, wins, host, bcast
max ttl = 259200
max wins ttl = 518400
min wins ttl = 21600
time server = No
unix extensions = Yes
use spnego = Yes
client signing = default
server signing = default
client use spnego = Yes
client ldap sasl wrapping = plain
enable asu support = No
svcctl list =
cldap port = 0
dgram port = 0
nbt port = 0
krb5 port = 0
kpasswd port = 0
web port = 0
rpc big endian = No
deadtime = 0
getwd cache = Yes
keepalive = 300
lpq cache time = 30
max smbd processes = 0
max disk size = 0
max open files = 16384
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
use mmap = Yes
use ntdb = No
hostname lookups = No
name cache timeout = 660
ctdbd socket =
cluster addresses =
clustering = No
ctdb timeout = 0
ctdb locktime warn threshold = 0
smb2 max read = 1048576
smb2 max write = 1048576
smb2 max trans = 1048576
smb2 max credits = 8192
load printers = Yes
printcap cache time = 750
printcap name =
cups server =
cups encrypt = No
cups connection timeout = 30
iprint server =
disable spoolss = No
addport command =
enumports command =
addprinter command =
deleteprinter command =
show add printer wizard = Yes
os2 driver map =
mangling method = hash2
mangle prefix = 1
max stat cache size = 256
stat cache = Yes
machine password timeout = 604800
add user script =
rename user script =
delete user script =
add group script =
delete group script =
add user to group script =
delete user from group script =
set primary group script =
add machine script =
shutdown script =
abort shutdown script =
username map script =
username map cache time = 0
logon script =
logon path = \\%N\%U\profile
logon drive =
logon home = \\%N\%U
domain logons = No
init logon delayed hosts =
init logon delay = 100
os level = 20
lm announce = Auto
lm interval = 60
preferred master = No
local master = Yes
domain master = Auto
browse list = Yes
enhanced browsing = Yes
dns proxy = Yes
wins proxy = No
wins server =
wins support = No
wins hook =
lock spin time = 200
oplock break wait time = 0
ldap admin dn =
ldap delete dn = No
ldap group suffix =
ldap idmap suffix =
ldap machine suffix =
ldap passwd sync = no
ldap replication sleep = 1000
ldap suffix =
ldap ssl = start tls
ldap ssl ads = No
ldap deref = auto
ldap follow referral = Auto
ldap timeout = 15
ldap connection timeout = 2
ldap page size = 1024
ldap user suffix =
ldap debug level = 0
ldap debug threshold = 10
eventlog list =
add share command =
change share command =
delete share command =
preload =
lock directory = /var/run/samba
state directory = /var/lib/samba
cache directory = /var/cache/samba
pid directory = /var/run/samba
ntp signd socket directory =
utmp directory =
wtmp directory =
utmp = No
default service =
message command =
get quota command =
set quota command =
remote announce =
remote browse sync =
nbt client socket address = 0.0.0.0
nmbd bind explicit broadcast = Yes
homedir map = auto.home
afs username map =
afs token lifetime = 604800
log nt token command =
NIS homedir = No
registry shares = No
usershare allow guests = No
usershare max shares = 100
usershare owner only = Yes
usershare path = /var/lib/samba/usershares
usershare prefix allow list =
usershare prefix deny list =
usershare template share =
async smb echo handler = No
panic action = /usr/share/samba/panic-action %d
perfcount module =
host msdfs = Yes
passdb expand explicit = No
idmap backend = tdb
idmap cache time = 604800
idmap negative cache time = 120
idmap uid =
idmap gid =
template homedir = /home/%D/%U
template shell = /bin/false
winbind separator = ^
winbind cache time = 300
winbind reconnect delay = 30
winbind max clients = 200
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind trusted domains only = No
winbind nested groups = Yes
winbind expand groups = 1
winbind nss info = template
winbind refresh tickets = No
winbind offline logon = No
winbind normalize names = No
winbind rpc only = No
create krb5 conf = Yes
ncalrpc dir = /var/run/samba/ncalrpc
winbind max domain connections = 1
winbindd socket directory =
winbindd privileged socket directory =
winbind sealed pipes = No
allow dns updates = disabled
dns forwarder =
dns update command =
nsupdate command =
rndc command =
multicast dns register = Yes
samba kcc command =
server services =
dcerpc endpoint servers =
spn update command =
share backend =
tls enabled = No
tls keyfile =
tls certfile =
tls cafile =
tls crlfile =
tls dh params file =
idmap config * : range = 10000-20000
idmap config * : backend = tdb
comment =
path =
username =
invalid users =
valid users =
admin users =
read list =
write list =
force user =
force group =
read only = Yes
acl check permissions = Yes
acl group control = No
acl map full control = Yes
acl allow execute always = No
create mask = 0744
force create mode = 00
directory mask = 0755
force directory mode = 00
force unknown acl user = No
inherit permissions = No
inherit acls = No
inherit owner = No
guest only = No
administrative share = No
guest ok = No
only user = No
hosts allow =
hosts deny =
allocation roundup size = 1048576
aio read size = 0
aio write size = 0
aio write behind =
ea support = No
nt acl support = Yes
profile acls = No
map acl inherit = No
afs share = No
smb encrypt = default
durable handles = Yes
block size = 1024
change notify = Yes
directory name cache size = 100
kernel change notify = Yes
max connections = 0
min print space = 0
strict allocate = No
strict sync = No
sync always = No
use sendfile = No
write cache size = 0
max reported print jobs = 0
max print jobs = 1000
printable = No
print notify backchannel = Yes
print ok = No
printing = cups
cups options = raw
print command =
lpq command = %p
lprm command =
lppause command =
lpresume command =
queuepause command =
queueresume command =
printer name =
use client driver = No
default devmode = Yes
force printername = No
printjob username = %U
default case = lower
case sensitive = Auto
preserve case = Yes
short preserve case = Yes
mangling char = ~
hide dot files = Yes
hide special files = No
hide unreadable = No
hide unwriteable files = No
delete veto files = No
veto files =
hide files =
veto oplock files =
map archive = Yes
map hidden = No
map system = No
map readonly = yes
mangled names = Yes
store dos attributes = No
dmapi support = No
browseable = Yes
access based share enum = No
blocking locks = Yes
csc policy = manual
fake oplocks = No
kernel oplocks = No
kernel share modes = Yes
locking = Yes
oplocks = Yes
level2 oplocks = Yes
oplock contention limit = 2
posix locking = Yes
strict locking = Auto
dfree cache time = 0
dfree command =
copy =
preexec =
preexec close = No
postexec =
root preexec =
root preexec close = No
root postexec =
available = Yes
volume =
fstype = NTFS
wide links = No
follow symlinks = Yes
dont descend =
magic script =
magic output =
delete readonly = No
dos filemode = No
dos filetimes = Yes
dos filetime resolution = No
fake directory create times = No
vfs objects =
msdfs root = No
msdfs proxy =
ntvfs handler =
И cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat winbind
group: compat winbind
shadow: compat winbind
hosts: files dns wins
#[SADMS]#hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Подскажите, в чем может быть проблема?
ОС Ubuntu 14.10
Попробуйте решение, которое предложил CocoJumbo.
Спасибо за статью.
Один момент остался не совсем понятым.
В статья хорошо описывается, как сам пишет автор, “Введение Linux в домен Active Directory”.
Прошу уточнить. Правильно ли я понимаю, чтобы вывести Linux из домена достаточно лишь удалить соответствующую машину в консоли AD?
В целом – да. Еще, чтобы samba не отправляла запросы аутентификации в АД, необходимо остановить (либо удалить) службу samba.
Решил проблему с id(пользователь не найден), поменял строку:
idmap config DOMAIN : backend = tdbidmap config DOMAIN : backend = rid
Отлично. Рад, что все получилось.
Спасибо. Оч хорошая статья.
На удивление вполне вменяемая статья, столько лет прошло а конфиг вполне рабочий, спасибо автору.