Для samba4:
Так как полноценных официальных сборок samba4 для RHEL/СentOS/etc еще нет, мне пришлось собирать пакеты вручную. Можно также собрать из официальных релизов и git.
Подключаем репозиторий raven-extras - создаем файл /etc/yum.repos.d/raven.repo со следующим содержимым:
Код: Выделить всё
[raven-extras]
name=Raven's extra package repository
baseurl=http://pkgs.dyn.su/el6-extras/$basearch/
enabled=1
gpgcheck=0
Устанавливаем пакеты:
Код: Выделить всё
# yum install samba4-winbind-clients samba4-winbind-krb5-locator samba4-client samba4-winbind nss-pam-ldapd nss-util nss-tools nss krb5-workstation krb5-libs ntpdateКод: Выделить всё
# ntpdate kg.pool.ntp.orgКод: Выделить всё
[global]
        workgroup = OFFICE # Рабочая группа в домене
        realm = DC.DOMAIN.TLD # Полное имя нашего домена
        netbios name = linux # Локальное имя компьютера
        security = ADS
        obey pam restrictions = Yes
        restrict anonymous = 2
        socket options = SO_KEEPALIVE SO_BROADCAST TCP_NODELAY IPTOS_THROUGHPUT SO_RCVBUF=4096 SO_SNDBUF=4096
        load printers = No
        disable spoolss = Yes
        show add printer wizard = No
        os level = 0
        local master = No
        domain master = No
        kerberos method = secrets and keytab
        template homedir = /home/%D/%U  # Путь к домашним директориям. В данном случае будет выглядеть как /home/OFFICE/username
        template shell = /bin/bash # Шелл пользователя
        winbind separator = ~
        winbind cache time = 3600
        winbind enum users = Yes
        winbind enum groups = Yes
        winbind use default domain = yes
        winbind refresh tickets = Yes
        winbind offline logon = Yes
        winbind nested groups = yes
        winbind expand groups = 3
        idmap config * : range = 10000-20000
        idmap config * : backend = tdb
Для использования в качестве клиента samba3 можно обойтись стандартными репозиториями для вашего дистрибутива напр. CentOS-base. Команда установки пакетов в данном случае быдет выглядеть так:
Код: Выделить всё
# yum install samba-winbind-clients samba-winbind-krb5-locator samba-client samba-winbind nss-pam-ldapd nss-util nss-tools nss krb5-workstation krb5-libs ntpdateВ некоторых особо устаревших версиях samba возможно не подгребутся строки конфига:
Код: Выделить всё
        idmap config * : range = 10000-20000 
        idmap config * : backend = tdbКод: Выделить всё
        idmap gid = 10000-20000
        idmap gid = 10000-20000Реализация не опробована, но подозреваю что это достаточно тривиальная задача.
Текущие версии Fedora
Реализация идентична el6, с той лишь разницей, что все уже есть в репозиториях и вместо sysvinit используется systemd.
Проверяем наш конфиг
Код: Выделить всё
# testparmСоздаем конфиг /etc/krb5.conf
Код: Выделить всё
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log
[libdefaults]
 default_realm = DC.DOMAIN.TLD
 dns_lookup_realm = false
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
[realms]
DC.SMARTJOBBOARD.COM = {
    kdc = dc.domain.tld # адрес сервера
    password_server = 192.168.0.10 # ip сервера
    admin_server = dc.domain.tld
    default_domain = DC.DOMAIN.TLD
}
[domain_realm]
    .DC.DOMAIN.TLD = DC.DOMAIN.TLD
    DC.DOMAIN.TLD = DC.DOMAIN.TLD
[appdefaults]
 pam = {
    debug = false
    ticket_lifetime = 36000
    renew_lifetime = 36000
    forwardable = true
    krb4_convert = false
 }Код: Выделить всё
# kinit administrator@DC.DOMAIN.TLD
Password for admistrator@DC.DOMAIN.TLD: вводим пароль админа домена
Warning: Your password will expire in 991 days on Sat Jul  4 09:29:56 2015 # все ОК
# klist                # смотрим список билетов
# kdestroy         # Удаляем билеты - оно пока не надо)))Код: Выделить всё
passwd:     files
shadow:     files
group:      filesКод: Выделить всё
passwd:     files winbind
shadow:     files winbind
group:      files winbindКод: Выделить всё
auth        required      pam_env.so
auth        sufficient    pam_unix.so likeauth nullok
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        optional      pam_group.so
auth        sufficient    pam_winbind.so cached_login use_first_pass
auth        required      pam_deny.so
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_winbind.so cached_login
account     required      pam_permit.so
password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_winbind.so cached_login use_authtok
password    required      pam_deny.so
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_mkhomedir.so umask=0022 skel=/etc/skel
session     required      pam_unix.soКод: Выделить всё
cached_login = yesКод: Выделить всё
# sestatusКод: Выделить всё
SELinux status:                 enabledSELINUX=enforcing
изменяем на
SELINUX=disabled.
Добавляем демоны в автозагрузку:
Код: Выделить всё
# chkconfig smb on
# chkconfig winbind onКод: Выделить всё
# samba-tool dns add 192.168.0.10 dc.domain.tld <linux> A <ip>        # добавляем запись в DNS
# net ads join -W DC.DOMAIN.TLD -U administrator@DC.DOMAIN.TLD          # Добавляем машину в доменГде <linux> - локальное имя машины, <ip> - ip-адрес хоста добавляемого в домен.
Может случиться так, что последняя команда вывалит следующую ругань:
Это не страшно, машина в домен добавлена, просто не обновлена запись в DNS. Лично для меня это не критично и в случае крайней необходимости можно запись поправить руками.Enter administrator@DC.DOMAIN.TLD's password:
Using short domain name -- OFFICE
Joined '<linux>' to realm 'dc.domain.tld'
No DNS domain configured for <linux>. Unable to perform DNS Update.
DNS update failed!
Стартуем сервисы (если на машине пришлось отключать selinux, то нужно ее просто перезагрузить):
Код: Выделить всё
service smb start
service winbind startКод: Выделить всё
# wbinfo -u
# wbinfo -g
# getent passwd
# getent groupДля того, чтобы наши доменные пользователи имели права на монтирование флешек, проигрывание аудио и прочих благ присущих локальным пользователям, необходимо включить доменных пользователей в локальные группы. Лучше всего это сделать отредактировав файл /etc/security/groups.conf и добавив в него следующую строку:
Код: Выделить всё
*;*;%domain users;Al0000-2400;dialout,cdrom,audio,floppy,dip,video,plugdev,scanner,netdev,lpadmin,powerdev,pulse,pulse-accessКод: Выделить всё
uid=10000(raven) gid=10000(domain users) groups=10000(domain users),11(cdrom),18(dialout),19(floppy),39(video),40(dip),63(audio),994(pulse-access),995(pulse)Код: Выделить всё
%domain\ users        ALL=(ALL) ALLконфигурационные файлы smb.conf, krb5.conf и nsswitch.conf используются идентичные, различия лишь в следующем:
Установка необходимых пакетов:
Код: Выделить всё
# aptitude install samba ntpdate smbclient winbind krb5-config krb5-usercommon-auth
Код: Выделить всё
auth        required      pam_env.so
auth        sufficient    pam_unix.so likeauth nullok
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        optional      pam_group.so
auth        sufficient    pam_winbind.so use_first_pass
auth        required      pam_deny.so
auth        optional      pam_cap.soКод: Выделить всё
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     sufficient    pam_winbind.so use_first_pass
account     required      pam_permit.soКод: Выделить всё
password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        requisite                       pam_deny.so
password        required                        pam_permit.so
password        optional                        pam_gnome_keyring.soКод: Выделить всё
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_mkhomedir.so umask=0022 skel=/etc/skel
session     required      pam_unix.so
session     required      pam_winbind.so use_first_passЕсли на машине существует локальная учетка, то чтобы залогигиться под доменным пользователем необходимо обособить тот факт, что пользователь из домена. Для этого необходимо указать домен. В данной конфигурации это делается так: OFFICE~user, например
Код: Выделить всё
# ssh <ip> -l OFFICE~user
