В публикации рассматриваются все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Как случаи, когда сервер 1С авторизирует веб и обычных клиентов 1С в active directory, так и когда сам сервер является клиентом, например при HTTP запросах выполняемых сервером 1С. Тех, кто заинтересовался, прошу под кат…



Путь в тысячу ли начинается с первого шага.
©Лао-цзы





Когда публиковались первые статьи серии "Три пингвина под окном…", проходившие мимо админы делали грустную мину и рассказывали, как непосильно тяжело будет при переходе с обычной рабочей группы на серверах РедОС в домен active directory.



Лирическое отступление

Из объяснительной админа,
почему ничего не сделано за рабочий день...
  — Иди, — говорю ему, — купи две третьих балтики.
Пришёл, ставит на стол упаковку.
  — Ты что купил? Девятку?
  — А я взял шесть девятых. Две третьих — это же шесть девятых!
Математик хренов.

 



Админы, носящие гордое звание системных, уже не те, как прежде.
Это раньше они слушали музыку сервера (или музыку у сервера) и за некоторое количество крепких, крепленых и слегка разбавленных напитков их можно было заинтересовать проблемами 1С.
Нынче админы витают в облаках, переносят там что-то между лезвиями и на просьбы поминают всех скандинавских богов и самого Линуса всуе.
Возможно изначально линуксовые админы и в курсе проблемы, но в основной массе они считают, завести сервер 1С в домен, создать пользователя для службы и выдать права программисту 1С, на этом миссия выполнена.
Поэтому большинству 1С ников придется погрузиться в мифологию Kerberos.
В домене AD проблема усукабляется еще и тем, что у вас не будет прав проверить, как администраторы выполнили ваши просьбы по инструкции с ИТС.
 





 



Масла в огонь подлило выступление на IE 2023 спикеров из Авито, как им даже в паре с 1С РКЛ не удалось настроить доменную авторизацию 1С апача на линуксе.



Лирическое отступление

С такими исходными данными мы выступаем в поход за авторизацию ОС сервером 1С (и сервера 1С) в смешанном домене windows (linux & windows рабочие станции).



Ингредиенты:



  • Контроллер домена, сервер Windows 2012 R2, домен AD уровня Windows 2012. dc.test.loc
  • Рабочая станция Windows 10. win-cln01.test.loc
  • Рабочая станция РедОС 8. red8-cln01.test.loc
  • Сервер 1С РедОС 8 настроенный. red8-srv.test.loc
  • Сервер 1С РедОС 8 настраиваемый. red-srv.test.loc
  • Postgres 16 от PostgresPro
  • 1С Предприятие 64-х 8.3.24.1467
  • все в домене test.loc. 
    Пользователь, от которого работает сервер 1С usr1cv83, пароли у всех 123456.
    Все эти значения произвольные и должны в скриптах быть заменены на ваши.
    Имя домена *.local не рекомендуют коллеги РедОС.
  • все по железу 4ГБ RAM 50ГБ SSD 2 Ядра CPU
  • все развернуто в облаке из оригинальных iso образов производителей для чистоты эксперимента.
    Благодарю компанию ©Serverspace за предоставленное оборудование, без поддержки собрать такой пингвинариум мне было бы негде.
    Хорошо, что у локального офиса международного облачного провайдера остался питерский, а возможно петровский, дух покровительства знаниям и наукам.


По поводу РедОС 8 и Postgres 16. В продуктовой среде на них рано переходить, но в тестовой, хочется попробовать все новинки, этим обусловлен такой выбор.
Чтобы заработала 1С в РедОС 8 достаточно одной строки bash, для аккуратных двух



Командная строка

 find '/opt/1c*'  -name 'libstdc++.so.6'  -print0 | xargs -n1 -0 -t rename -v -n 'so.6' 'so.6.bak'
эта покажет что будет переименовано
find '/opt/1c*'  -name 'libstdc++.so.6'  -print0 | xargs -n1 -0 -t rename -v 'so.6' 'so.6.bak'
эта переименует
для установки Postgres потребуется
wget rpms.remirepo.net/enterprise/8/remi/x86_64/libicu65-65.1-1.el8.remi.x86_64.rpm
rpm -ivh *.rpm





Кроме того, что под капотом (новое ядро, новые сборки пакетов) РедОС 8 включает в себя возможность пользователю выбрать самому где у него будет кнопка Пуск находиться или выбрать интерфейс в стиле Mac.



Результат:



  • прозрачная авторизация ОС для обычных клиентов 1С с рабочих станций
  • прозрачная авторизация ОС для веб-клиентов 1С с рабочих станций

  • прозрачная авторизация ОС 1С открытой в браузере
  • прозрачная авторизация ОС запросов идущих с сервера 1С, на примере обращения к веб-серверу с отключенной анонимной и включенной авторизацией windows


Те, кто больше любит видео, могут и сейчас посмотреть его вместо чтения статьи, желательно и то, и другое.



Видео

Для остальных приступаем.



Аперитив



Рутинные операции первичной настройки сервера: обновление пакетов, настройка сети, настройка синхронизации времени. Тем не менее, не стоит пренебрегать их важностью. Здесь фраза: Как вы яхту назовете, как нельзя кстати. 

Если вы используете FQDN (предпочтительный вариант), то везде дальше надо использовать полное имя, решили пойти коротким путем, аналогично. Смешивать не рекомендую.
Все настройки по инструкциям с сайта РедОС и 1С ИТС.



Лирическое отступление

 Украли американские шпионы чертежи МИГ-29.
Собрали у себя, получается паровоз.Снова собрали-опять паровоз!
Ничего понять не могут. Решили сознаваться.
На нашем заводе собирают-стоит МиГ-29!
Спрашивают рабочего:"Как же ты его собрал, по чертежам?"
Он им отвечает:"Внизу, мелкими буквами написано:
"После сборки-обработать напильником!".

©анекдот времен СССР



Перефразируя классика, если жизнь и рассудок дороги вам, то используйте инструкции официальных производителей.
В данном случае базу знаний РедОС и сайт 1С ИТС. Попытка скопировать ошибку и поиском по интернету найти ее решение точно не лучший вариант, оптимальнее понять логику инструкции, хотя она иногда и исходит из неизвестного начального состояния системы.
Не верите, поищите "ошибка HTTP-ответ 402 Payment Required" в контексте настройки авторизации ОС 1С, узнаете невероятно много нового, но ни одного правильного ответа.

 




Аналогично, пристальное внимание нужно уделить синхронизации времени, так как это базовая часть Kerberos и такая мелочь приводит к трудно диагностируемым ошибкам.



Так же в тестовом контуре вольно отнесемся к безопасности и отключим Selinux, ошибки которые порождает он могут в самых неожиданных местах проявляться.
Как с ним жить не отключая, описано в публикации
Установка 1С: Сервера взаимодействия. Заметки на полях



Командная строка

 



#изменяем локаль на русскую
localectl
dnf install glibc-langpack-ru -y
localectl set-locale LANG=ru_RU.utf8
localectl



#изменяем профиль производительности на высокую производительность
dnf install tuned -y
systemctl enable --now tuned
tuned-adm active
tuned-adm profile throughput-performance
tuned-adm active



#обновляем установленные пакеты 
dnf update -y
dnf install mc -y



#Отключение SeLinux
perl -i"*_$(date +'%Y%m%d_%H%M%S').bak" -pE 's/SELINUX=enforcing/SELINUX=permissive/i' /etc/selinux/config
setenforce 0



#Настройка сети и имени хоста
hostnamectl set-hostname red-srv.test.loc
sh -c "echo '127.0.0.1  `hostname -f` `hostname -s`' >> /etc/hosts"
cat /etc/hosts
nmtui
# или
#ls -1 /etc/NetworkManager/system-connections/
#mcedit /etc/NetworkManager/system-connections/ххх.nmconnection
systemctl restart NetworkManager



reboot



nslookup dc
nslookup dc.test.loc
#mcedit /etc/resolv.conf



#Настройка синхронизации времени
#systemctl disable chronyd --now
#mcedit /etc/systemd/timesyncd.conf
#systemctl restart systemd-timesyncd
#timedatectl status
#timedatectl timesync-status
#mcedit /etc/systemd/timesyncd.conf
#systemctl restart systemd-timesyncd
#timedatectl status
timedatectl list-timezones
timedatectl set-timezone Europe/Moscow



sed -i 's/server/#server/g' /etc/chrony.conf
sh -c "echo 'server dc.test.loc iburst' >> /etc/chrony.conf"
systemctl restart chronyd
chronyc tracking




На выходе обязательно надо получить 100% результат при 



  • nslookup dc.test.loc
  • timedatectl status либо аналогичный сервис синхронизации времени, например chronyd
    так как тестовый контур в этом плане очень нестабилен из-за постоянных перезагрузок, после которых рабочая станция в хаотичном порядке может принять время хоста, а время дорого в прямом и переносном смысле, то использовал их оба.


Ввод РЕД ОС в домен Windows



Командная строка

 



#Ввод в домен
dnf install -y realmd sssd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation
realm discover test.loc
realm join -U -v administrator test.loc
realm discover test.loc



sed -i 's/use_fully_qualified_names = True/use_fully_qualified_names = False/g' /etc/sssd/sssd.conf
sh -c "echo 'ad_gpo_access_control = permissive' >> /etc/sssd/sssd.conf"
authselect select sssd with-fingerprint with-gssapi with-mkhomedir with-smartcard --force
sh -c "echo '*               —       nofile          16384' >> /etc/security/limits.conf"
sh -c "echo 'root            -       nofile          16384' >> /etc/security/limits.conf"



sed -i 's;default_ccache_name = KEYRING:persistent:%{uid};default_ccache_name = FILE:/tmp/krb5cc_%{uid};g' /etc/krb5.conf
sed -i '/krb5cc_%{uid}/a default_realm = TEST.LOC' /etc/krb5.conf



sh -c "echo '%Domain\ Admins ALL=(ALL) ALL' >> /etc/sudoers"
sh -c "echo '%администраторы\ домена ALL=(ALL) ALL' >> /etc/sudoers"



#mcedit /etc/krb5.conf



#default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5
#default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5
#preferred_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5



perl -i"*_$(date +'%Y%m%d_%H%M%S').bak" -pE 's/permitted_enctypes = aes256-cts-hmac-sha1-96/#permitted_enctypes = aes256-cts-hmac-sha1-96/i' /etc/krb5.conf.d/crypto-policies



service sssd restart
service sssd status    



id usr1cv83
kinit usr1cv83
#login usr1cv83



su usr1cv83




Здесь тоже все по инструкции с сайта производителя.
Единственный подводный камень — файл /etc/krb5.conf.d/crypto-policies который устанавливает предпочтительный вариант шифрования файла keytab в aes256-cts-hmac-sha1-96, а 1С пока хочет видеть RC4-HMAC.
Его комментируем строкой на perl.



На выходе обязательно надо получить 100% результат при выполнении команд



id usr1cv83
kinit usr1cv83



Не забываем о том, что 1С рекомендует однократно войти под логином пользователем сервера, чтобы создался его домашний каталог



Первое блюдо



Устанавливаем и настраиваем сервер 1С и postgres



Командная строка

 



#Установка 1С 
mkdir -p /1c
chmod -R +777 /1c
tar xvzf *.tar.gz
unzip *.zip
./setup-full-8.3.*.run --enable-components server
usermod -aG grp1cv8 usr1cv83
chown -R usr1cv83:grp1cv8 /1c




chmod -R +777 /1c
chown -R usr1cv83:grp1cv8 /var/1C/licenses/
chown -R usr1cv83:grp1cv8 /home/usr1cv83@test.loc/
chown -R usr1cv83:grp1cv8 /1c



#Установка postgreSQL
wget repo.postgrespro.ru/1c-16/keys/pgpro-repo-add.sh
sh pgpro-repo-add.sh
wget rpms.remirepo.net/enterprise/8/remi/x86_64/libicu65-65.1-1.el8.remi.x86_64.rpm
rpm -ivh *.rpm
#rename -v -n 'so.6' 'so.6.bak' /opt/1cv8/x86_64/8.3.2*.*/libstdc++.so.6
#для рабочей станции 
#find '/opt'  -name 'libstdc++.so.6'  -print0 | xargs -n1 -0 -t rename -v -n 'so.6' 'so.6.bak'
#find '/opt'  -name 'libstdc++.so.6'  -print0 | xargs -n1 -0 -t rename -v 'so.6' 'so.6.bak'
yum install postgrespro-1c-16 -y
sudo -u postgres psql -U postgres -c "alter user postgres with password '123456';"



 




На выходе обязательно надо получить 100% результат работающий сервер 1С и возможность подключиться к нему с клиентов, в этот же момент можно создать чистую базу 1С.

Пока устанавливается сервер идем на контроллер домена и создаем учетную запись под которой будет работать сервер 1С, почти аналогично как это было для сервера на windows. Но не совсем...
Для нее нам нужно будет создать и передать на linux файл keytab с паролем и записями для служб.
В нашем случае в финальном файле keytab будут три записи принципиалов:



  • usr1cv83 для пользователя (имя произвольное) под которым будет работать сервер 1С
  • usr1cv83/red-srv.test.loc для службы сервера 1С на конкретном компьютере, помните мы говорили про FQDN, тут надо обратить на это внимание
  • HTTP/red-srv.test.loc для службы http на конкретном компьютере


Командная строка

 #Кейтаб domain controller
ktpass -princ usr1cv83@TEST.LOC -mapuser usr1cv83 -pass 123456 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT -out %userprofile%\downloads\usr1cv83.keytab -setupn
ktpass -princ usr1cv83/red-srv.test.loc@TEST.LOC -mapuser usr1cv83 -pass 123456 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT -pass 123456 -setpass /in %userprofile%\downloads\usr1cv83.keytab /out %userprofile%\downloads\usr1cv83_1.keytab -setupn
ktpass -princ HTTP/red-srv.test.loc@TEST.LOC -mapuser usr1cv83 -pass 123456 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT -pass 123456 -setpass /in %userprofile%\downloads\usr1cv83_1.keytab /out %userprofile%\downloads\usr1cv83.keytab -setupn




Передаем keytab файл на linux сервер и кладем в каталог с доступом служб сервера 1С и HTTP



Важно
В продуктивной среде этот файл нужно максимально защитить.



Важно
Для учетных записей пользователя и компьютера сервера 1С нужно установить признак делегирования Kerberos



Без этого магия не сработает и вы получите как раз ту самую ошибку 402 Payment Required, она связана именно с этим, а не с тем, о чем все сразу подумали.
Что касается самого пользователя usr1cv83,  UPN его не изменится, но обязательно должны добавиться SPN




На выходе обязательно надо получить 100% результат при выполнении команд



klist -e -k -t /1c/usr1cv83.keytab



покажет содержимое файла

kinit -k -t /1c/usr1cv83.keytab usr1cv83@TEST.LOC

аутентифицируется на сервере Kerberos используя записи keytab файла
команда не должна выдать ошибок
klist -e 
покажет полученный тикет



Правим файл конфигурации сервера 1С, указав, где находится файл keytab, и поменяв, учетную запись запускаем сервер



Командная строка

 



mcedit /opt/1cv8/x86_64/8.3.*/srv*@.service



systemctl link /opt/1cv8/x86_64/8.3.24.1467/srv1cv8-8.3.24.1467@.service
systemctl enable srv1cv8-8.3.24.1467@default --now
systemctl restart srv1cv8-8.3.24.1467@default
systemctl status srv1cv8-8.3.24.1467@default --no-pager -l
dnf install msttcore-fonts-installer -y



#/opt/1cv8/x86_64/8.3.*/ras cluster --port=1545






После этого можно в базе 1С создать пользователей с авторизацией ОС, если вы не сделали это раньше и пробовать авторизацию в обычном клиенте 1С.






Второе блюдо



Устанавливаем HTTP сервер и публикуем на нем базу



Командная строка

 dnf install httpd -y
systemctl enable httpd --now
touch  /etc/httpd/conf.d/demo.conf
/opt/1cv8/x86_64/8.3.*/webinst -publish -apache24 -wsdir demo -dir /var/www/demo -connstr "Srvr=red-srv;Ref=demo" -confpath /etc/httpd/conf.d/demo.conf




Из хитростей только то, что мы не портим меняем общий файл конфигурации веб-сервера, а создаем отдельный файл конфигурации для отдельной базы 1С



в него мы прописываем настройки для авторизации Kerberos



Командная строка

 # 1c publication
Alias "/demo" "/var/www/demo/"
<Directory "/var/www/demo/">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
    SetHandler 1c-application
    AuthName "1C:Enterprise web client"
    AuthType Kerberos
    Krb5Keytab /1c/usr1cv83.keytab
    KrbVerifyKDC off
    KrbDelegateBasic off
    KrbServiceName HTTP/red-srv.test.loc@TEST.LOC
    #KrbServiceName any не надо так делать
    KrbSaveCredentials on
    KrbMethodK5Passwd off
    KrbAuthRealms TEST.LOC
    KrbMethodNegotiate on
    Require valid-user
#    Require all granted для проверки можно раскомментировать
    ManagedApplicationDescriptor "/var/www/demo/default.vrd"
</Directory>





не забываем сам пакет mod_auth_kerb установить и перезапустить веб-сервер



dnf install mod_auth_kerb -y



systemctl restart httpd 
systemctl status httpd --no-pager -l



Если все сделано правильно, то после перезапуска сервера мы сможем войти в базу 1С как из веб-клиента 1С, так и обычного браузера.
Со всех рабочих станций





На РедОС надо еще настроить браузеры на прозрачную авторизацию ОС для нашего домена.



Командная строка

 



mkdir -p /etc/chromium/policies/managed/
touch /etc/chromium/policies/managed/mydomain.json
mcedit /etc/chromium/policies/managed/mydomain.json



mkdir -p /etc/opt/yandex/browser/policies/managed/
touch /etc/opt/yandex/browser/policies/managed/mydomain.json
mcedit /etc/opt/yandex/browser/policies/managed/mydomain.json



содержимое файла

  "AuthServerAllowlist": "*.test.loc",
  "AuthNegotiateDelegateAllowlist": "*.test.loc"
}







Сладкое и компот



Если вы не устали, то продолжим.
Сервер 1С сам достаточно часто является клиентом, например другого сервера 1С, поэтому нужно чтобы и его могли прозрачно авторизовать по учетной записи ОС.
Эта часть ни в какой документации не описана, поэтому подробнее.
В windows мы просто в службах прописывали учетную запись и пароль пользователя от которого работает сервер 1С.
В linux мы нигде пароль не сохраняем, единственное, что нам может помочь, это билет пользователя Kerberos.
Когда мы вводили компьютер в домен, то в файле /etc/krb5.conf указали место хранения кэша 
default_ccache_name = FILE:/tmp/krb5cc_%{uid}
Пользователь авторизуется и его билет помещается в кэш.


Пока он там, сервер 1С авторизуется как обычный пользователь на сервисах домена и все идет по плану. Мы делаем HTTP запрос &НаСервере и проходим авторизацию на веб сервере DC

Если бы не время жизни билета. Обычно оно составляет 24 часа. 



Нет билета, нет авторизации

Вариант простой, как гвоздь, раз в сутки авторизоваться с учетной записью usr1cv83.
вижу как в меня летит помидор
Не вариант.
Но у нас есть keytab файл для пользователя usr1cv83. Делаем 
kinit -k -t /1c/usr1cv83.keytab usr1cv83@TEST.LOC
сейчас билет usr1cv83 попал в кэш по id root, если мы под рутом.
Осталось узнать id usr1cv83
id -u usr1cv83



в нашем случае это 149401151 и сделать
mv /tmp/krb5cc_0 /tmp/krb5cc_149401151
chown -R usr1cv83:grp1cv8 /tmp/krb5cc_149401151



Заносим эти строки в скрипт и запускаем его чуть чаще, чем время жизни билета.



Все. Обед готов.
Ничего особо сложного.



Варите свой сервер по данному рецепту, у вас не будет проблем с авторизацией ОС 1С и вы будете жить с ним долго и счастливо, пока обновление не разлучит вас.



В планах написать продолжение, в котором расставить точки над ё рассказать, как отлаживать эту систему на этапе настройки, какие могут быть ошибки и как они проявляются.
Будет интересно, вы знаете, что сделать.
Найдете ошибки, вы знаете, где меня искать.
Ошибки есть у всех, в планах сделать публикацию(и) из серии "Разрушители легенд", где поразбирать ошибки других публикаций)



Лирическое отступление

 В театре посреди спектакля крик из зала.
— Врач! В зале есть врач?
— Я врач!
— Что за фигню нам показывают, коллега?



В благословенные времена, когда семинары проходили не онлайн, а в конференц-холлах, обязательно на галерке сидел технически продвинутый человек, который рвал на себе волосы показывая пальцем в докладчика и тихим шепотом советуя так не делать.
Причем иногда количество волос на голове этого человека намекало, на скольки конференциях он уже побывал.




Статья продолжает серию публикаций:





Серия "Рецепты от Капитана" на всякий случай





Также на всякий случай полный листинг установки



Командная строка

 



#Листинг установки к публикации "В облако на работу: Все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Рецепты от Капитана"
#https://infostart.ru/1c/2060304/
#Автор Андрей Капитонов
#свободное распостранение с указанием авторства




#изменяем локаль на русскую
localectl
dnf install glibc-langpack-ru -y
localectl set-locale LANG=ru_RU.utf8
localectl



#изменяем профиль производительности на высокую производительность
dnf install tuned -y
systemctl enable --now tuned
tuned-adm active
tuned-adm profile throughput-performance
tuned-adm active



#обновляем установленные пакеты 
dnf update -y
dnf install mc -y



#Отключение SeLinux
perl -i"*_$(date +'%Y%m%d_%H%M%S').bak" -pE 's/SELINUX=enforcing/SELINUX=permissive/i' /etc/selinux/config
setenforce 0



#Настройка сети и имени хоста
hostnamectl set-hostname red-srv.test.loc
sh -c "echo '127.0.0.1  `hostname -f` `hostname -s`' >> /etc/hosts"
cat /etc/hosts
nmtui
# или
#ls -1 /etc/NetworkManager/system-connections/
#mcedit /etc/NetworkManager/system-connections/ххх.nmconnection
systemctl restart NetworkManager



reboot



nslookup dc
nslookup dc.test.loc
#mcedit /etc/resolv.conf



#Настройка синхронизации времени
#systemctl disable chronyd --now
#mcedit /etc/systemd/timesyncd.conf
#systemctl restart systemd-timesyncd
#timedatectl status
#timedatectl timesync-status
#mcedit /etc/systemd/timesyncd.conf
#systemctl restart systemd-timesyncd
#timedatectl status
timedatectl list-timezones
timedatectl set-timezone Europe/Moscow



sed -i 's/server/#server/g' /etc/chrony.conf
sh -c "echo 'server dc.test.loc iburst' >> /etc/chrony.conf"
systemctl restart chronyd
chronyc tracking



#Ввод в домен
dnf install -y realmd sssd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation
realm discover test.loc
realm join -U -v administrator test.loc
realm discover test.loc



sed -i 's/use_fully_qualified_names = True/use_fully_qualified_names = False/g' /etc/sssd/sssd.conf
sh -c "echo 'ad_gpo_access_control = permissive' >> /etc/sssd/sssd.conf"
authselect select sssd with-fingerprint with-gssapi with-mkhomedir with-smartcard --force
sh -c "echo '*               —       nofile          16384' >> /etc/security/limits.conf"
sh -c "echo 'root            -       nofile          16384' >> /etc/security/limits.conf"



sed -i 's;default_ccache_name = KEYRING:persistent:%{uid};default_ccache_name = FILE:/tmp/krb5cc_%{uid};g' /etc/krb5.conf
sed -i '/krb5cc_%{uid}/a default_realm = TEST.LOC' /etc/krb5.conf



sh -c "echo '%Domain\ Admins ALL=(ALL) ALL' >> /etc/sudoers"
sh -c "echo '%администраторы\ домена ALL=(ALL) ALL' >> /etc/sudoers"



#mcedit /etc/krb5.conf



#default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5
#default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5
#preferred_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 RC4-HMAC DES-CBC-CRC DES3-CBC-SHA1 DES-CBC-MD5



perl -i"*_$(date +'%Y%m%d_%H%M%S').bak" -pE 's/permitted_enctypes = aes256-cts-hmac-sha1-96/#permitted_enctypes = aes256-cts-hmac-sha1-96/i' /etc/krb5.conf.d/crypto-policies



service sssd restart
service sssd status    



id usr1cv83
kinit usr1cv83
su usr1cv83
#login usr1cv83



#Установка 1С 
mkdir -p /1c
chmod -R +777 /1c
tar xvzf *.tar.gz
unzip *.zip
./setup-full-8.3.*.run --enable-components server
usermod -aG grp1cv8 usr1cv83
chown -R usr1cv83:grp1cv8 /1c




chmod -R +777 /1c
chown -R usr1cv83:grp1cv8 /var/1C/licenses/
chown -R usr1cv83:grp1cv8 /home/usr1cv83@test.loc/
chown -R usr1cv83:grp1cv8 /1c



mcedit /opt/1cv8/x86_64/8.3.*/srv*@.service



systemctl link /opt/1cv8/x86_64/8.3.24.1467/srv1cv8-8.3.24.1467@.service
systemctl enable srv1cv8-8.3.24.1467@default --now
systemctl restart srv1cv8-8.3.24.1467@default && sleep 10 && systemctl status srv1cv8-8.3.24.1467@default --no-pager -l
systemctl status srv1cv8-8.3.24.1467@default --no-pager -l
dnf install msttcore-fonts-installer -y



#Установка postgreSQL
wget repo.postgrespro.ru/1c-16/keys/pgpro-repo-add.sh
sh pgpro-repo-add.sh
#wget rpms.remirepo.net/enterprise/8/remi/x86_64/libicu65-65.1-1.el8.remi.x86_64.rpm
#rename -v -n 'so.6' 'so.6.bak' /opt/1cv8/x86_64/8.3.2*.*/libstdc++.so.6
#для рабочей станции 
#find '/opt'  -name 'libstdc++.so.6'  -print0 | xargs -n1 -0 -t rename -v -n 'so.6' 'so.6.bak'
#find '/opt'  -name 'libstdc++.so.6'  -print0 | xargs -n1 -0 -t rename -v 'so.6' 'so.6.bak'
yum install postgrespro-1c-16 -y
sudo -u postgres psql -U postgres -c "alter user postgres with password '123456';"



#/opt/1cv8/x86_64/8.3.*/ras cluster --port=1545



#Кейтаб domain controller
ktpass -princ usr1cv83@TEST.LOC -mapuser usr1cv83 -pass 123456 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT -out %userprofile%\downloads\usr1cv83.keytab -setupn
ktpass -princ usr1cv83/red-srv.test.loc@TEST.LOC -mapuser usr1cv83 -pass 123456 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT -pass 123456 -setpass /in %userprofile%\downloads\usr1cv83.keytab /out %userprofile%\downloads\usr1cv83_1.keytab -setupn
ktpass -princ HTTP/red-srv.test.loc@TEST.LOC -mapuser usr1cv83 -pass 123456 -ptype KRB5_NT_PRINCIPAL -crypto RC4-HMAC-NT -pass 123456 -setpass /in %userprofile%\downloads\usr1cv83_1.keytab /out %userprofile%\downloads\usr1cv83.keytab -setupn



klist -e -k -t /1c/usr1cv83.keytab
kinit -k -t /1c/usr1cv83.keytab usr1cv83@TEST.LOC



#Веб сервер
dnf install httpd -y
systemctl enable httpd --now
touch  /etc/httpd/conf.d/demo.conf
/opt/1cv8/x86_64/8.3.*/webinst -publish -apache24 -wsdir demo -dir /var/www/demo -connstr "Srvr=red-srv;Ref=demo" -confpath /etc/httpd/conf.d/demo.conf
mcedit /etc/httpd/conf.d/demo.conf




# 1c publication
Alias "/demo" "/var/www/demo/"
<Directory "/var/www/demo/">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
    SetHandler 1c-application
    AuthName "1C:Enterprise web client"
    AuthType Kerberos
    Krb5Keytab /1c/usr1cv83.keytab
    KrbVerifyKDC off
    KrbDelegateBasic off
    KrbServiceName HTTP/red-srv.test.loc@TEST.LOC
    #KrbServiceName any
    KrbSaveCredentials on
    KrbMethodK5Passwd off
    KrbAuthRealms TEST.LOC
    KrbMethodNegotiate on
    Require valid-user
#    Require all granted
    ManagedApplicationDescriptor "/var/www/demo/default.vrd"
</Directory>



dnf install mod_auth_kerb -y
systemctl restart httpd 
systemctl status httpd --no-pager -l



#Обратная авторизация 1С
id -u usr1cv83
kinit -k -t /1c/usr1cv83.keytab usr1cv83@TEST.LOC
mv /tmp/krb5cc_0 /tmp/krb5cc_149401151
chown -R usr1cv83:grp1cv8 /tmp/krb5cc_149401151



#настройка браузеров на линукс клиенте
mkdir -p /etc/chromium/policies/managed/
touch /etc/chromium/policies/managed/mydomain.json
mcedit /etc/chromium/policies/managed/mydomain.json



mkdir -p /etc/opt/yandex/browser/policies/managed/
touch /etc/opt/yandex/browser/policies/managed/mydomain.json
mcedit /etc/opt/yandex/browser/policies/managed/mydomain.json

  "AuthServerAllowlist": "*.test.loc",
  "AuthNegotiateDelegateAllowlist": "*.test.loc"
}