вторник, 6 января 2015 г.

Установка файлового Samba сервера на CentOS 7 с аутентификацией в Active Directory с использованием winbind

Задача: перенести существующий файловый сервер под управлением Debian Squeeze на новый сервер, под управлением CentOS 7.
Сервер должен быть интегрирован с Active Directory и выполнять прозрачную аутентификацию пользователей.
В CentOS 7 есть довольно-простой способ поставить Samba-сервер с интеграцией в AD, но мне он не подошёл, т.к. у меня имеется уже довольно большая база домашних каталогов формата \\fileserver\username\, а представленный способ даёт пути вида \\fileserver\username@domain.local, что влечёт за собой большую работу по переконфигруированию огромного количества рабочих станций и я так и не смог разобраться, как при таком способе назначать владельцем файла пользователя и группу AD, т.к. они не присутствуют в системе в списках пользователей и групп.
В итоге я решил для получения групп использовать winbind.
Устанавливаем систему с диска проводим базовую настройку сети.

Обновим систему:
# yum update -y
Для установки htop и удобного мониторинга процессов подключим репозиторий EPEL (не обязательно):
# rpm -ivh http://mirror.yandex.ru/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
Установим необходимые пакеты:
# yum install realmd samba samba-common samba-winbind samba-winbind-clients oddjob acl oddjob-mkhomedir ntpdate ntp krb5-workstation pam_krb5 htop -y
Отключаем SELinux
#vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
Перезагружаемся:
# reboot
После перезагрузки настраиваем параметры аутентификации:
# authconfig --updateall --enablewinbind --enablewinbindauth --enablewinbindusedefaultdomain --smbsecurity=ads --smbworkgroup=SEZAR --smbrealm=SEZAR.LOCAL --winbindtemplatehomedir=/home/%D/%U --winbindtemplateshell=/bin/bash --enablekrb5 --krb5realm=SEZAR.LOCAL --enablekrb5kdcdns --enablekrb5realmdns --enablelocauthorize --enablemkhomedir --enablepamaccess
Настраиваем Kerberos:
#vi /etc/krb5.conf
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 default_realm = SEZAR.LOCAL
 default_ccache_name = KEYRING:persistent:%{uid}
 dns_lookup_kdc = true

[realms]
SEZAR.LOCAL = {
  kdc = adds01.sezar.local
  kdc = adds02.sezar.local
  admin_server = adds01.sezar.local
  admin_server = adds02.sezar.local
  default = SEZAR.LOCAL
 }

[domain_realm]
 .sezar.local = SEZAR.LOCAL
sezar.local = SEZAR.LOCAL
Можно воспользоваться макросами vi:
%s/example.com/sezar.local/g
%s/EXAMPLE.COM/SEZAR.LOCAL/g
%s/kerberos./adds./g
Настроим NTP-клиент:
# vi /etc/ntp.conf
server adds01.sezar.local
server adds02.sezar.local
Включим сервис, синхронизируем время и запустим его:
# systemctl enable ntpd.service
# ntpdate adds01.sezar.local
# systemctl start ntpd.service
Теперь приступим к настройки Samba
Сделаем копию файла конфигурации:
# cp /etc/samba/smb.conf /etc/samba/smb.conf.dist
И приводим конфиг самбы к следующему состоянию (удалены все закоментированные строки):
# vi /etc/samba/smb.conf
[global]
        workgroup = SEZAR
        realm = SEZAR.LOCAL
        server string = Samba Server Version %v
        security = ADS
        kerberos method = system keytab
        log file = /var/log/samba/log.%m
        max log size = 50
        load printers = No
        printcap name = /dev/null
        template shell = /bin/bash
        winbind enum users = Yes
        winbind enum groups = Yes
        winbind use default domain = Yes
        winbind refresh tickets = Yes
        winbind offline logon = Yes
        idmap config * : range = 10000-2000000
        idmap config * : backend = tdb
        cups options = raw

[homes]
        comment = Home Directories
        valid users = %D\%S
        read only = No
        create mask = 0600
        directory mask = 0700
        browseable = No
        root preexec = mkdir -p /home/%D/%S
Для того, чтобы Samba могла аутентифицировать пользователей через winbind создадим файл pam для неё со следующим содержимым:
# vi /etc/pam.d/samba
auth       required     pam_nologin.so
auth       include      system-auth
account    include      system-auth
session    include      system-auth
password   include      system-auth
Добавим самбу в сетевой экран:
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload
Включим и запустим самбу и winbind:
# systemctl enable smb.service
# systemctl start smb.service

# systemctl enable winbind.service
# systemctl start winbind.service
Теперь можно подключаться к домену:
# realm join --user=Administrator sezar.local --client-software=winbind
Если вдруг произошла ошибка, домен можно покинуть следующим образом:
# realm leave
Проверим ещё раз опции конфига /etc/samba/smb.conf, они должны быть следующими:
# vi /etc/samba/smb.conf
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
winbind offline logon = yes
obey pam restrictions = no
Если они изменились, то их необходимо изменить на приведённые выше.

Стоит обратить особое внимание на obey pam restrictions = no, если опция выставленна в "yes", то подключиться к файловому серверу не получится, а в логах будет ошибка:
  STATUS=daemon 'smbd' finished starting up and ready to serve connectionssmb_pam_account: PAM: UNKNOWN PAM ERROR (28) during Account Management for User: DOMAIN\user
[2015/01/06 19:42:54.476881,  0] ../source3/auth/pampass.c:797(smb_pam_accountcheck)
  smb_pam_accountcheck: PAM: Account Validation Failed - Rejecting User DOMAIN\user!
  STATUS=daemon 'smbd' finished starting up and ready to serve connectionssmb_pam_account: PAM: UNKNOWN PAM ERROR (28) during Account Management for User: DOMAIN\user
[2015/01/06 19:42:54.501608,  0] ../source3/auth/pampass.c:797(smb_pam_accountcheck)
  smb_pam_account: PAM: UNKNOWN PAM ERROR (28) during Account Management for User: user
[2015/01/06 19:43:52.827446,  0] ../source3/auth/pampass.c:797(smb_pam_accountcheck)
  smb_pam_accountcheck: PAM: Account Validation Failed - Rejecting User night!
 Проверяем, получаем ли мы список пользователй и групп из AD командами:
# wbinfo -u
# wbinfo -g
Теперь правим в smb.conf шары:
# vi /etc/samba/smb.conf
[homes]
        comment = Home Directories
        browseable = no
        writable = yes
        valid users = %D\%S
        create mask = 600
        directory mask = 700
        root preexec = mkdir -p "/home/%D/%S"

[Backup]
    path = /storage/backup
    valid users = "@Domain Admins", sqlserver, sqlagent
    admin users = "@Domain Admins"
    read only = No
После этого нам должны быть доступны две папки:
\\fileserver\Backup
\\fileserver\<username>

Перезапускаем samba и winbind:
# systemctl restart smb.service
# systemctl restart winbind.service
На этом всё. Остаётся только настроить нужные шары, права доступа и можно начать использовать файловый сервер.

2 комментария:

  1. [root@share ~]# systemctl start winbind.service
    Job for winbind.service failed. See 'systemctl status winbind.service' and 'journalctl -xn' for details.
    [root@share ~]# systemctl status winbind.service
    winbind.service - Samba Winbind Daemon
    Loaded: loaded (/usr/lib/systemd/system/winbind.service; enabled)
    Active: failed (Result: exit-code) since Wed 2015-04-22 21:22:17 EEST; 19s ago
    Process: 4472 ExecStart=/usr/sbin/winbindd $WINBINDOPTIONS (code=exited, status=1/FAILURE)
    Main PID: 4472 (code=exited, status=1/FAILURE)
    Status: "Starting process..."

    Apr 22 21:22:16 share systemd[1]: Starting Samba Winbind Daemon...
    Apr 22 21:22:17 share winbindd[4472]: [2015/04/22 21:22:17.130315, 0] ../s...t)
    Apr 22 21:22:17 share winbindd[4472]: Could not fetch our SID - did we join?
    Apr 22 21:22:17 share winbindd[4472]: [2015/04/22 21:22:17.130544, 0] ../s...s)
    Apr 22 21:22:17 share winbindd[4472]: unable to initialize domain list
    Apr 22 21:22:17 share systemd[1]: winbind.service: main process exited, cod...RE
    Apr 22 21:22:17 share systemd[1]: Failed to start Samba Winbind Daemon.
    Apr 22 21:22:17 share systemd[1]: Unit winbind.service entered failed state.
    Hint: Some lines were ellipsized, use -l to show in full.
    Что делать подскажите пожалуста???

    ОтветитьУдалить
  2. Отличная инструкция, огромное спасибо!

    ОтветитьУдалить