Доброго всем дня. Этот маленький обзорчик я пишу, так сказать, прямо с полей. Сегодня я наконец то разобрался с таким ужасом как 1с 8.2 + centos + AD авторизации. Вообщем на первой связке вопросов у меня не было особых, но вот вторая… Это тихий ужас. О нем и пойдет речь. И так — 1C8.2 + Windows 2012 R2 AD. В статье предполагается, что у вас уже есть настроенный сервер 1С и задача стоит только в авторизации.
Начало.
В данной статье рассматривается след. Схема:
1. Сервер 1С (Centos 6 x86_6, IP 10.1.1.5) На нем основная работа и будет происходить.
2. Сервер AD (Windows 2012 R2, IP 10.1.1.1)
3. Рабочая станция, которая у нас будет клиентом (в моем случае Windows 7 x86_64, IP 10.1.1.100)
Заходим на Сервер 1С и понеслась)))
Перво на перво убедитесь, что IP ваше сервера — статический. Следующий шаг — пропишем DNS нашего домена в /etc/resolv.conf
1 2 3 4 | nano /etc/resolv.conf domain TEST.LOCAL search TEST.LOCAL nameserver 10.1.1.1 |
Далее ставим необходимые пакеты
1 | yum install samba.x86_64 samba-client.x86_64 samba-common.x86_64 samba-winbind.x86_64 samba-winbind-clients.x86_64 ntp libsmbclient.x86_64 krb5-workstation.x86_64 krb5-server-ldap.x86_64 krb5-server.x86 |
Вкратце расскажу про пакет – krb5-workstation. Данный пакет дает нам возможность использовать шифрование RC4-HMAC (по умолчанию в windows) в билете kerberos. В принципе вы можете и без него (по ходу дела напишу как), но все же с ним правильнее, как мне кажется.
Настраиваем kerberos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | nano /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 = TEST.LOCAL dns_lookup_realm = false dns_lookup_kdc = false default_tkt_enctypes = rc4-hmac #если не RC4-HMAC, то значение des-cbc-crc des-cbc-md5 default_tgs_enctypes = rc4-hmac #если не RC4-HMAC, то значение des-cbc-crc des-cbc-md5 allow_weak_crypto = yes [realms] TEST.LOCAL = { kdc = dc01.test.local:88 default_domain= test.local admin_server = dc01. test.local kpasswd_server = dc01. test.local } [domain_realm] .TEST.LOCAL = TEST.LOCAL TEST.LOCAL = TEST.LOCAL .TEST.LOCAL = TEST.LOCAL TEST.LOCAL = TEST.LOCAL [kdc] profile = /var/kerberos/krb5kdc/kdc.conf [appdefaults] pam = { debug = true ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = false krb4_convert = false } Вгоняем наш 1с сервер в домен nano /etc/samba/smb.conf [global] workgroup = TEST.LOCAL server string = securitu ADS realm TEST.LOCAL map to guest = Bad User obey pam restrictions = Yes password server = dc01.test.local passdb backend = tdbsam unix password sync = Yes syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192 dns proxy = No wins server = 10.1.1.1 usershare allow guests = Yes panic action = /usr/share/samba/panic-action %d idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = Yes winbind enum groups = Yes winbind use default domain = Yes [tmp] comment = Temporary files path = /tmp read only = No create mask = 0644 directory mask = 0744 guest ok = Yes [IPC$] path = /tmp hosts allow = 10.1.1.0/24, 127.0.0.1 hosts deny = 0.0.0.0/0 |
1 2 3 4 | nano /etc/nsswitch.conf passwd: compat winbind group: compat winbind |
Синхронизируем часы
1 | ntpdate dc01.test.local |
Вводим в домен
1 | net ads join -U admin |
Стартуем сервисы
1 2 | /etc/init.d/samba start /etc/init.d/winbind start |
Теперь я вам настоятельно советую проверить наличие DNS записей о нашем 1c.test.local (как A так и PTR) на DNS-сервере dc01.test.local
Далее пробуем получить билет kerberos для какого нибудь доменного юзверя (в моем случае admin)
1 2 | kinit admin В ответ нас спросят пароль, вводим: |
Проверяем наш билетик, если ответ похож на мой, то все ок
1 2 3 4 5 6 7 | klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: usr1cv82/1c.test.local@TEST.LOCAL Valid starting Expires Service principal 10/18/13 12:47:27 10/18/13 22:47:27 krbtgt/1c.test.local@TEST.LOCAL renew until 10/19/13 12:47:27 |
Теперь наша задача сгенерить себе keytab. Идем на наш AD (10.1.1.1). Создаем учетную запись через которую будет происходить авторизация пользователей, в моем случае это usr1c и пароль pass1c, после создания учетной записи проверьте отсутствие галочки «Use DES encryption types with this account» (а в случае не использования шифрования RC4-HMAC, наоборот наличие этого флага). Далее, нам необходим файловый ключ (keytab), для его генерации – запускаем консоль от имени администратора:
1 | ktpass -princ usr1cv82/1c.test.local@TEST.KZ -mapuser usr1c -pass pass1c -out usr1cv82.keytab |
Я больше всего уверен, что если проблемы и возникнут — они будут именно на этом шаге. Давайте разберем эту строчку:
-princ usr1cv82/1c.test.local@TEST.KZ
usr1cv82 — дефолтовый юзер сервиса 1с
1c.test.local — имя машины для которой создается ключ.
TEST.KZ — NETBIOS имя домена, пишется только заглавными буквами не перепутайте.
-mapuser usr1c
usr1c — наш доменный пользователь с которым мы будем ассоциировать usr1cv82
-pass pass1c
pass1c — пароль доменного пользователя
-out usr1cv82.keytab
usr1cv82.keytab — имя файла ключа.
Теория авторизации довольно замудренная, прямого коннектора к LDAP у 1с нету, поэтому у нас будет kerberos, средствами которого и будет производиться авторизация (через опу, если честно). Работает это так — при инициализации keytab у пользователя usr1c в LDAP записи создается атрибут — userPrincipalName=usr1cv82/1c.test.local@TEST.KZ, который привязывает LDAP пользователя к локальному usr1cv82 через которого и происходит сама авторизация. Вот такая хренатенька)))
Для не использующих шифрования RC4-HMAC, стока будет такая:
1 | ktpass -crypto DES-CBC-CRC -princ usr1cv82/1c.test.local@TEST.KZ -mapuser usr1c -pass pass1c -out usr1cv82.keytab |
Теперь надо переместить полученный ключ на сервер 1с в директорию /opt/1C/v8.2/x86_64/. И назначить ему след. Права:
1 2 3 | cd /opt/1C/v8.2/x86_64/ chown usr1cv82:grp1cv82 usr1cv82.keytab chmod 600 usr1cv82.keytab |
Далее проверяем загруженный файл:
1 | klist -ekt /opt/1C/v8.2/x86_64/usr1cv82.keytab |
Выхлоп должен быть приблизительно таким:
1 2 3 4 | Keytab name: FILE:/opt/1C/v8.2/x86_64/usr1cv82.keytab KVNO Timestamp Principal ---- ----------------- -------------------------------------------------------- 5 01/01/70 06:00:00 usr1cv82/1c.test.local@TEST.KZ (arcfour-hmac) |
Теперь пытаемся заимпортировать наш keytab
1 | kinit -k -t /opt/1C/v8.2/x86_64/usr1cv82.keytab usr1cv82/1c.test.local@TEST.KZ |
Если ошибок не было, то проверяем кэш на наличие ключа:
1 2 3 4 5 6 7 8 | klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: usr1cv82/1c.test.local@TEST.KZ Valid starting Expires Service principal 10/18/13 12:47:27 10/18/13 22:47:27 krbtgt/TEST.KZ @TEST.KZ renew until 10/19/13 12:47:27 |
Некоторые howto советуют так же сделать симлинк:
1 | ln -s /usr/lib/libgssapi_krb5.so{.2,} |
Но я не делал и все работает. Пробуйте залогиниться (стоит учитывать тот факт, что из-за работы через kerberos рабочая станция с которой вы входите в 1с должна быть в домене).
Собственно все. Всем удачи и поменьше подобрых грабель.
Добавить комментарий