Самба4 установка членом домена AD
Инструкция проверена на 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