Персональные инструменты
Вы здесь: Главная / Статьи / Многофункциональный офисный сервер на Linux / Самба4 установка членом домена AD

Самба4 установка членом домена AD

Установка-настройка Samba4 as AD domain member с включением локальной авторизации пользователям домена

Инструкция проверена на Ubuntu 14.04 LTS DVD. Конечная система используется, как заготовка, для реализации дополнительных Linux-сервисов на той же машине (почтовик, шлюз, файл-сервер) с авторизацией доменных пользователей.

Установка необходимых пакетов (от рута, или с sudo)

Выполняем обновление

apt-get update
apt-get upgrade

Ставим нужные пакеты

apt-get install krb5-user samba winbind ntp libpam-krb5 libpam-winbind libnss-winbind acl attr

Настраиваем DNS (здесь и в дальнейшем - не забывайте заменять указанные курсивом значения на свои)

/etc/resolv.conf

domain domain.lan
search domain.lan
nameserver 192.168.0.1

Синхронизируем время с Домен контроллера (комментируем сервера времени Ubuntu и добавляем ссылку на контроллер домена)

/etc/ntp.conf

server domain.lan

При необходимости мы можем отключить поддержку IPv6 для ntp отредактировав файл /etc/default/ntp. Для этого нужно заменить строку…

NTPD_OPTS='-g'

…на:

NTPD_OPTS='-4 -g'

Чтобы сказать ntpd прослушивать только интерфейсы клиентских подсетей, в конец конфигурационного файла /etc/ntp.conf добавляем строчки:

interface ignore wildcard
interface listen 192.168.0.2

Перезапустим демон ntpd

/etc/init.d/ntp restart

и проверяем результат:

invoke-rc.d ntp stop
* Stopping NTP server ntpd   [ OK ]

invoke-rc.d ntp start * Starting NTP server ntpd [ OK ]

ss -lnptu | sort | grep :123 tcp UNCONN 0 0 10.160.0.2:123 *:* users:(("ntpd",12738,17)) tcp UNCONN 0 0 127.0.0.1:123 *:* users:(("ntpd",12738,16))

Проверяем статус синхронизации

ntpq –4 -p

Проверяем текущее время:

date

Чтобы установить доверительные отношения с сервером нужно принять билет от Kerberos настроим его:
Сохраните конфиг по-умолчанию и вставляйте приведенный (или отредактируйте копию того, что по-умолчанию)

cp /etc/krb5.conf /etc/krb5.conf.save

Делаем конфиг пустым

:> /etc/krb5.conf

Вставляем следующий конфиг, меняем имя Домена на своё, где имена верхнем регистре соблюдаем именно верхний!

[libdefaults]
        default_realm = DOMAIN.LAN
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
        v4_instance_resolve = false
        v4_name_convert = {
                host = {
                        rcmd = host
                        ftp = ftp
                }
                plain = {
                        something = something-else
                }
        }
        fcc-mit-ticketflags = true

[realms]
        DOMAIN.LAN = {
                kdc = dc.domain.lan
                admin_server = dc.domain.lan
                default_domain = domain.lan
        }

[domain_realm]
        .domain.lan = DOMAIN.LAN
        domain.lan = DOMAIN.LAN
[login]
        krb4_convert = false
        krb4_get_tickets = false

Проверим авторизацию запросим билет любого Доменного пользователя

kinit user@DOMAIN.LAN

Убедимся что билет есть

klist

Должны появится что-то на подобие

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: user@DOMAIN.LAN

Valid starting     Expires            Service principal
09/27/12 09:24:24  09/27/12 19:24:27  krbtgt/DOMAIN.LAN@DOMAIN.LAN
    renew until 09/28/12 09:24:24

Настройка SAMBA

cp /etc/samba/smb.conf  /etc/samba/smb.conf.save
 :>/etc/samba/smb.conf

Редактируем

/etc/samba/smb.conf 

  socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  security = ads
  map to guest = bad user
  log file = /var/log/samba/log.%m
  log level = 4
  usershare allow guests = yes
  realm = DOMAIN.LAN
  dns proxy = no
  auto services = global
  server string = %h server (Samba, Ubuntu)
  passwd program = /usr/bin/passwd %u
  passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
  pam password change = yes
  server role = standalone server
  unix password sync = yes
  netbios name = iGATE
  panic action = /usr/share/samba/panic-action %d
  syslog = 0
  obey pam restrictions = yes
  workgroup = DOMAIN
  interfaces = p5p1 p7p1 lo
  max log size = 1000
  passdb backend = tdbsam
  os level = 1
  allow trusted domains = yes
  preferred master = No
  local master = No
  domain master = No
  ldap ssl = no
  strict locking = No
  time server = no
  auth methods = winbind
  encrypt passwords = yes
  unix charset = utf-8
  dos charset = cp866
  nt acl support = yes
  hosts allow = 192.168. 10.0.0. 127.
obey pam restrictions = yes
usershare allow guests = yes
template shell = /bin/bash
template homedir = /home/%D/%U
acl group control = yes
map acl inherit = yes
usershare path = /home/shares
printing = cups
printcap name = cups
printcap cache time = 750
cups options = raw

Проверим конфиг smb.conf
Выполним:

testparm

Вывод примерно такой:

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

Выполним ввод в домен (от учетки доменного админа):

net ads join -U admin -D DOMAIN
Вводим пароль

И если все хорошо , то примерно так:

Using short domain name -- DOMAIN
Joined 'SMBSRV01' to realm 'domain.lan'

Проверим

net ads testjoin

И если прошли то

Join is OK

Настройка Winbind

etc/samba/smb.conf

Добавьте в конец файла:

  idmap config DOMAIN:backend = ad
  idmap config DOMAIN:range = 10000 – 50000
  idmap config DOMAIN:schema_mode = rfc2307
  winbind enum groups = yes
  winbind enum users = yes
winbind nested groups = yes
 winbind use default domain = no
 template shell = /bin/bash winbind refresh tickets = yes winbind uid = 10000 - 50000 winbind gid = 10000 - 50000

Теперь перезагрузим Демонов

service winbind restart
service smbd restart
service nmbd restart

Проверим доверительные отношения с AD

wbinfo -t

Проверим отображаются ли доменные пользователи и группы

wbinfo -u
wbinfo -g

Для прозрачной работы (системы авторизации) Linux машины и AD

/etc/nsswitch.conf

passwd:         compat winbind
group:          compat winbind

Проверим работоспособность

getent passwd
getent group

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

Теперь дадим пользователям домена возможность входить на консоль Linux-машины.

Несмотря на то, что все пользователи домена фактически стали полноценными пользователями системы (в чём можно убедиться, выполнив последние две команды из предыдущего раздела), зайти ни под кем из них в систему всё ещё нельзя. Для включения возможности авторизации пользователей домена на компьютере с Ubuntu необходимо настроить PAM на работу с Winbind.

Он-лайн авторизация:

Добавьте всего одну строку в файле /etc/pam.d/common-session, т.к. PAM и так неплохо справляется с авторизацией:

session  optional  pam_mkhomedir.so skel=/etc/skel/ umask=0077

Офф-лайн авторизация:

Часто возникает ситуация, когда контроллер домена недоступен по различным причинам — профилактика, отключение света или вы принесли ноутбук домой и хотите поработать. В этом случае для Winbind можно настроить кэширование учетных записей пользователей домена. Для этого необходимо сделать следующее. Добавьте в секцию [global] файла /etc/samba/smb.conf следующие строки:

[global]
# Возможность оффлайн-авторизации при недоступности доменконтроллера
winbind offline logon = yes
# Период кэширования учетных записей, по умолчанию равен 300 секунд (эта настройка уже есть в Вашем конфиге - просто укажите достаточное время жизни кэша)
winbind cache time = 600

Теперь в нашем распоряжении не только пользователи локальной системы но и доменные пользователи -  можно назначать их владельцами файлов и директорий (и доменные группы использовать наравне с локальными). Поэтому выполнение операций от имени доменных пользователей в такой системе Linux становится совершенно прозрачным (кроме того, для поддержки раздачи прав на файлы Самба-сервера с клиентов Windows, мы установили поддержку - acl и attr - в файловых системах сервера расширенных атрибутов, и в настройке Самбы включили использование этих атрибутов и списков доступа).

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

[distr]
# Здесь пишем комментарий к шаре (обычно показывается в скобках)
comment = Distributives
# Путь к директории в которой будет размещена шара (общий ресурс)
path = /home/shares/distr
# Устанавливает отображение шары в списке ресурсов сервера (если no, то ресурс будет скрытым, системным)
browseable = yes
# Устанавливает режим только чтение по-умолчанию для шары
read only = yes
# Маска файла (выполнение операции AND с битовой маской создаваемого в Linux файла) присваиваемая при создании 0640 - владельцу права читать и писать, группе- только чтение и выполнение, остальным - запрет .
create mask = 100640
# Маска присваиваемая (тоже AND) директории при создании 0750 - владельцу полный доступ, группе чтение и траверз, остальным - запрет.
directory mask = 40750
# Маска присваиваемая директории (от предыдущей отличается только операцией OR вместо AND).
force directory mode = 40750
# Здесь, через пробел, перечисляются пользователи и группы которым предоставляется доступ к шаре.
# Локальные пользователи указываются просто по имени, доменные как ДОМЕН\пользователь (если имя содержит пробелы - заключите всю конструкцию в кавычки), для указания группы поставьте перед конструкцией знак @
valid users = @"DOMAIN\пользователи домена"
# Указывает не наследовать владельца от родительской папки
inherit owner = no
# Указывает не наследовать разрешения от родительской папки
inherit permissions = no
# Указывает не наследовать списки доступа
inherit acls = no
# Указывает включить режим совместимости Windows наследования с Linux
map acl inherit = yes
# Включает режим совместимости списков доступа с NTFS (отображение прав доступа Windows на права доступа Linux)
nt acl support = yes
# Список пользователей и групп имеющих право записи в шару (вопреки запрету опцией read only)
write list = @"DOMAIN\администраторы домена"
# Задает список администраторов шары (они будут отображаться в системного владельца ресурса)
admin users = "DOMAIN\user01"
# Указывает скрывать системные (скрытые) ресурсы
hide unreadable = yes

Основная статья.