< meta name="referrer" content="origin">
Home » Linux » CentOS » Ввод CentOS 7 в домен Active Directory и авторизация по SSH доменных пользователей

Ввод CentOS 7 в домен Active Directory и авторизация по SSH доменных пользователей

Мне понадобилось настроить авторизацию доменный учетных записей Active Directory по ssh на linux сервер. В моем случае это будет система CentOS 7. Данная возможность будет очень удобна для организаций с внедренной доменной структурой Windows. С помощью групп доступа в AD вы сможете централизованно управлять доступом к linux серверам.

Подготовка сервера

Если у вас еще нет готового сервера, то можете воспользоваться моими материалами на эту тему — установка и настройка centos 7. Так же рекомендую настроить iptables для корректной работы сервера с доменом windows. Далее я не буду каcаться этого вопроса, мы просто отключим фаерволл, потому что его настройка не тема этой статьи.

Информационная таблица
xs.local название домена
10.1.3.4 ip адрес контроллера домена
xs-winsrv.xs.local полное имя контроллера домена
xs-centos7-test имя сервера centos, который вводим в домен
administrator учетная запись администратора домена
gr_linux_adm группа в AD, для которой разрешено подключение к серверам по ssh
lin-user учетная запись в AD для проверки подключений по ssh

Выключаем firewalld:

# systemctl stop firewalld && systemctl disable firewalld
Перед дальнейшей настройкой, убедитесь, что с вашего сервера centos вы без проблем пингуете и резолвите контроллер домена по полному имени. Если есть какие-то проблемы, исправьте это либо указанием нужного dns сервера, либо правкой файла hosts.

Настроим синхронизацию времени с контроллером домена. Это важно, у вас должно быть одинаковое время с контроллером домена. Проверьте его и убедитесь, что стоят одинаковые часовые пояса.

Устанавливаем утилиту для синхронизации времени chrony:

# yum install chrony

Добавляем в конфиг /etc/chrony.conf адрес контроллера домена. И делаем его единственным сервером для синхронизации, остальные удаляем.

server xs-winsrv.xs.local iburst

Сохраняем конфиг, запускаем chrony и добавляем в автозагрузку.

# systemctl start chronyd && systemctl enable chronyd

Проверим, что с синхронизацией.

# cat /var/log/messages | grep chronyd
Jul 12 17:58:38 xs-centos7-test chronyd[10620]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +DEBUG +ASYNCDNS +IPV6 +SECHASH)
Jul 12 17:58:38 xs-centos7-test chronyd[10620]: Frequency 0.000 +/- 1000000.000 ppm read from /var/lib/chrony/drift
Jul 12 17:02:54 xs-centos7-test chronyd[10620]: Selected source 10.1.3.4
Jul 12 17:02:54 xs-centos7-test chronyd[10620]: System clock wrong by -3348.457170 seconds, adjustment started
Jul 12 17:02:54 xs-centos7-test chronyd[10620]: System clock was stepped by -3348.457170 seconds

Все в порядке. Синхронизировали время с контроллером домена. По логу видно, что время на сервере убежало вперед на 56 минут, но мы это исправили.

Подключение CentOS 7 к домену

Устанавливаем софт, который нам понадобится, для корректного ввода centos в домен windows.

# yum install realmd sssd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools

Вводим Centos 7 в домен:

# realm discover XS.LOCAL
xs.local
  type: kerberos
  realm-name: XS.LOCAL
  domain-name: xs.local
  configured: no
  server-software: active-directory
  client-software: sssd
  required-package: oddjob
  required-package: oddjob-mkhomedir
  required-package: sssd
  required-package: adcli
  required-package: samba-common-tools
# realm join -U administrator XS.LOCAL
Password for administrator:

Если не получили никакой ошибки, значит все прошло нормально. Можно зайти на контроллер домена и проверить, появился ли наш linux сервер в домене.
Ввод centos 7 в домен AD
Изменим немного конфиг sssd для того, чтобы не нужно было вводить полное имя домена при логине, а только username.

# mcedit /etc/sssd/sssd.conf
use_fully_qualified_names = False

Разрешаем доменным пользователям создавать домашние директории:

# authconfig --enablemkhomedir --enablesssdauth --updateall

Запускаем службу sssd и добавляем в автозагрузку:

# systemctl enable sssd.service && systemctl restart sssd

Проверяем авторизацию по ssh, подключившись по любой доменной учетной записи.
Вход доменным пользователем по ssh
Для пользователя будет создана домашняя директория /home/lin-user@xs.local.

Ограничение доступа ssh по группам и пользователям домена

На текущий момент подключиться к серверу может любой пользователь домена. Исправим это и разрешим подключаться только пользователям из группы gr_linux_adm. Для этого правим конфиг /etc/sssd/sssd.conf, добавляя туда новые параметры.

# mcedit /etc/sssd/sssd.conf
access_provider = simple
simple_allow_users = user55@xs.local
simple_allow_groups = gr_linux_adm@xs.local

Обращаю внимание, что параметр access_provider у вас уже будет установлен в другое значение. Надо это изменить. Вы можете добавить разрешение как для конкретного пользователя, так и для целых групп. Сохраняйте конфиг и перезапускайте sssd.

# systemctl restart sssd

Теперь подключиться по ssh к серверу сможет только пользователь домена user55 и все члены группы gr_linux_adm.

Для разбора полетов и решения проблем нужно использовать лог файл — /var/log/secure. Вот пример успешного подключения:

Jul 12 18:10:44 xs-centos7-test sshd[4163]: pam_sss(sshd:auth): authentication success; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.1.3.221 user=lin-user
Jul 12 18:10:44 xs-centos7-test sshd[4163]: Accepted password for lin-user from 10.1.3.221 port 51063 ssh2
Jul 12 18:10:45 xs-centos7-test sshd[4163]: pam_unix(sshd:session): session opened for user lin-user by (uid=0)

А вот кусок лога подключения доменного пользователя, для которого доступ по ssh закрыт.

Jul 12 18:08:28 xs-centos7-test sshd[4059]: pam_sss(sshd:auth): authentication success; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.1.3.221 user=vzap
Jul 12 18:08:28 xs-centos7-test sshd[4059]: pam_sss(sshd:account): Access denied for user vzap: 6 (Permission denied)
Jul 12 18:08:28 xs-centos7-test sshd[4059]: Failed password for vzap from 10.1.3.221 port 51057 ssh2
Jul 12 18:08:28 xs-centos7-test sshd[4059]: fatal: Access denied for user vzap by PAM account configuration [preauth]

Здесь видно, что идентификация пользователя прошла корректно, но доступ к серверу запрещен.

Ограничение доступа к sudo по доменным группам

Ограничение доступа к ssh по группам и пользователям настроили, теперь надо разрешить доменным учетным записям получать права суперпользователя в системе. Сейчас у них нет такой возможности.

[sudo] password for lin-user:
lin-user is not in the sudoers file. This incident will be reported.

Создаем новый файл в директории /etc/sudoers.d.

# mcedit /etc/sudoers.d/xs
%gr_linux_adm@xs.local ALL=(ALL) ALL
Обращаю внимание, что имя данного файла не должно содержать точки. Я сначала не знал об этом и сделал файл с именем xs.local и долго не мог понять, почему не работает. Когда изменил имя файла, все заработало.

Выставляем минимальные права на файл:

# chmod 0440 /etc/sudoers.d/xs

Теперь вы можете зайти в систему доменной учетной записью из группы gr_linux_adm и получить полные права в системе.

Реализовать то же самое можно было через настройки sssd. В его конфиге можно было указать группы, которым разрешен доступ к sudo. Но в целом это не принципиально. Так, как сделал я, мне показалось проще. Не нужно использовать полные имена объектов в AD, в которых легко запутаться, особенно тем, кто не очень в этом ориентируется. Мне же понадобились только конечные имена групп. Более подробно об этом можно почитать в руководстве redhat. Ссылку приведу в конце.

Заключение

На этом все. Я рассмотрел наиболее типовую ситуацию, которая может быть полезной при использовании структуры AD совместно с linux серверами. При написании статьи использовал официальные руководства:

Почему-то из руководства по RHEL 7 раздел, посвещенный SSSD убрали, хотя в 5 и 6 есть. Может просто я не заметил, так как структура сильно поменялась. Люблю я CentOS в первую очередь за отличную документацию Redhat. Там есть подробное описание практически всего, с чем приходилось сталкиваться. Надо только не лениться в английском языке разбираться.


Помогла статья? Есть возможность отблагодарить автора

Дополнительные материалы по CentOS

Рекомендую полезные материалы по CentOS:
Настройки системы
  • Установка
  • Базовая настройка
  • Настройка времени
  • Настройка сети
  • Настройка репозиториев
  • Настройка iptables
Установка CentOS 7 в конфигурации minimal или netinstall с загрузочной флешки или по сети на диск или raid раздел.
Базовая настройка CentOS 7 для работы с любым функционалом. Приведены практические советы по улучшению безопасности и удобства администрирования.
Как установить точное время на сервере CentOS, настроить часовой пояс, синхронизировать время с помощью ntpdate и ntpd и другое.
Подробное описание настройки сети в CentOS 7 - задать ip адрес, dhcp, отключить ipv6, dns, hostname, статические маршруты и др.
Установка репозиториев epel, rpmforge и др. Добавление, удаление, обновление rpm репозиториев в CentOS.
Рассмотрены основные моменты настройки iptables в Centos 7 - установка, добавление правил, проброс портов, nat, логирование и д.р.
Настройка программных комплексов
 
  • Прокси сервер
  • Шлюз
  • Asterisk
  • Asterisk+Freepbx
  • Сервер VPN
  • Web сервер Apache
  • Web сервер Nginx
  • Почтовый сервер
Подробное описание настройки прокси сервера на базе CentOS 7 со связкой squid+AD+sams2, реализован запрет доступа по url и группам пользователей.
Простая и быстрая настройка шлюза на базе CentOS 7 для организации доступа в интернет из локальной сети.
Описание установки и настройки asterisk - популярной современной sip атс. Описан расширенный функционал, покрывающий большинство потребностей стандартного офиса в современной телефонии.
Подробное описание установки voip сервера asterisk и панели управления freepbx на CentOS 7.
Установка и настройка OpenVPN сервера на CentOS для объединения офисов и подключения удаленных пользователей
Настройка web сервера CentOS 7 на базе связки http сервера apache, php и сервера db mysql, или коротко - установка lamp.
Установка и настройка высокопроизводительного web сервера на базе nginx и php fpm. В качестве кэша используется APC.

Описание установки и настройки почтового сервера iRedMail на основе готовой сборки на CentOS 7. Обзор основных возможностей и рекомендации по настройке.

Самостоятельная настройки почтового сервера postfix + dovecot а так же дополнительных полезных модулей для полноценной и удобной работы почты.

Размышления на тему выбора почтового сервера для малых и средних компаний.

Настройка отдельных программ
 
  • Zabbix
  • Phpmyadmin
  • Webmin
  • Ruby
  • Обновление php
  • Vsftpd
  • Bind
  • Unison
  • Observium
  • Syslog-NG
Видео и подробное описание установки и настройки Zabbix 3.2, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание установки и настройки панели управления phpmyadmin на веб сервер apache и nginx под управлением Centos 7.
Подробное описание установки и настройки Webmin на CentOS 7 для удаленного подключения и управления сервером.
Подробное описание установки языка Ruby последней версии на веб сервер под управлением CentOS 7.
Подробное описание установки или обновления php 7 на CentOS 7. Рассмотрен вариант отката обновления и возврата на php 5.6 или 5.4.
Подробное описание с видео установки и настройки ftp сервера vsftpd, примеры с локальными и виртуальные пользователями в mysql.
Настройка DNS сервера BIND (Named) в CentOS 7. Рассмотрены наиболее популярные конфигурации, в том числе подробное логирование.
Установка Unison в CentOS 7 для двухсторонней синхронизации файлов.
Инструкция по установке и настройке сервера мониторинга Observium на CentOS 7. В качестве примера в конце добавлено одно устройство для мониторинга.
Настройка сервера для централизованного сбора логов с удаленных устройств и серверов с помощью программы syslog-ng.
Разное
  • Настройка ssl в Apache
  • Бэкап с помощью rsync
Настройка работы веб сервера apache с виртуальными хостами по протоколу https с использованием бесплатного ssl сертификата.
Подробное описание настройки бэкапа с помощью rsync на примере скрипта инкрементного архива на системе Centos, Debian, Ubuntu, Windows.

20 комментариев

  1. Михаил

    Если задача только в авторизации по ssh, то samba, группы в AD — лишнее. Достаточно модуля pam_krb5. Проще и надёжнее.

    • Да тут вроде тоже ничего сложного. Все очень быстро и просто делается. Это с winbind ковыряться долго, а sssd достаточно просто заводит в домен и все системные конфиги сам правит.

  2. Доброе.
    Firewalld отключили, а про SELinux — ни слова. Или он в этом случае «не мешает» ?

    • Специально не проверял. Статья писалась с отключенным selinux. Я в начале статьи привел ссылку на настройку centos, там я отключаю selinux. Вообще, у меня во всех статьях он отключен. Вопрос настройки selinux я нигде не рассматриваю.

  3. Аноним

    И правильнее будет — доменная АУТЕНТИФИКАЦИЯ.
    https://interface31.ru/tech_it/2015/03/autentifikaciya-v-sistemah-windows-chast-1-ntlm.html

    «Аутентификация — происходит от английского слова authentication, которое можно перевести как идентификация или проверка подлинности. Это полностью отражает суть процесса — проверка подлинности пользователя, т.е. мы должны удостовериться, что пользователь, пытающийся получить доступ к системе именно тот, за кого себя выдает.

    Авторизация — перевод слова authorization означает разрешение, т.е. проверка прав доступа к какому-либо объекту. Процесс авторизации может быть применен только к аутентифицированному пользователю, так как перед тем, как проверять права доступа, мы должны выяснить личность объекта, которому мы собираемся предоставить какие-либо права.»

    Как запомнить? Легко. Аутентификация — КТО ТЫ, авторизация — МОЖНО ЛИ.

  4. Максим

    Ввожу команду:
    # realm discover LOCAL.DOMAIN.RU
    local.domain.ru
    type: kerberos
    realm-name: LOCAL.DOMAIN.RU
    domain-name: local.domain.ru
    configured: no
    server-software: active-directory
    client-software: sssd
    required-package: oddjob
    required-package: oddjob-mkhomedir
    required-package: sssd
    required-package: adcli
    required-package: samba-common-tools

    Пробую:
    # realm join -U administrator LOCAL.DOMAIN.RU
    See: journalctl REALMD_OPERATION=r5497964.10339
    realm: Couldn’t join realm: Joining the domain local.domain.ru failed

    Пробую с логами (-v):
    # realm join -v -U administrator LOCAL.DOMAIN.RU
    * Resolving: _ldap._tcp.local.domain.ru
    * Performing LDAP DSE lookup on: 192.168.102.8
    * Successfully discovered: local.domain.ru
    Password for administrator:
    * Required files: /usr/sbin/oddjobd, /usr/libexec/oddjob/mkhomedir, /usr/sbin/sssd, /usr/bin/net
    * LANG=C LOGNAME=root /usr/bin/net -s /var/cache/realmd/realmd-smb-conf.KAEP3Y -U administrator ads join local.domain.ru
    Enter administrator’s password:
    Failed to join domain: failed to lookup DC info for domain ‘local.domain.ru’ over rpc: {Device Timeout} The specified I/O operation on %hs was not completed before the time-out period expired.
    ! Joining the domain local.domain.ru failed
    realm: Couldn’t join realm: Joining the domain local.domain.ru failed

    Проверял resolve:
    [root@siteadmin ~]# getent hosts local.domain.ru | awk ‘{ print $1 }’
    192.168.106.5
    192.168.101.4

    Ping к слову не идёт, но в компании говорят, что отключили возможность пингования со стороны сервера (но меня всё равно это смущает).

    Мой вопрос:
    — Команда «realm discover LOCAL.DOMAIN.RU» не говорит ли о том что доступ есть?
    — Если команда «realm discover» видит сервер, то почему появляется ошибка «failed to lookup DC»?

  5. Добрый день!

    Подскажите вы можете, дописать статью как создать папки smb с авторизации по AD?
    Заранее благодарен.

    • Давно собираюсь, но все времени не хватает. Там уже winbind надо будет настраивать а не sssd.

  6. yum -y install realmd sssd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools sssd-libwbclient samba

    Вводим centos в домен с юзером admin-of-ad в домен example.com:

    realm join -U admin-of-ad example.com
    Правим /etc/samba/smb.conf

    [global]
    workgroup = example
    security = ads
    kerberos method = system keytab
    realm = example.com

    [share]
    comment = My shared folder
    path = /data/share
    public = yes
    writeable = yes
    browseable = yes
    guest ok = yes
    valid users = @»depit@example.com»
    directory mask = 0775
    create mask = 0664
    vfs objects = acl_xattr
    inherit permissions = yes
    inherit acls = yes
    map acl inherit = yes
    store dos attributes = yes

    Если шарится папка на ext*, то в параметры монтирования /etc/fstab надо дописать атрибуты acl и user_xattr. Должно хватить и acl, но мы же нанотехнологичные чуваки. Для XFS ничё не надо, всё «искоробки»:

    UUID=dabdd229-52dc-49d6-add2-a10f9f582bf5 / ext4 defaults,acl,user_xattr 0 0
    Разрешаем полный доступ на уровне ugo. Локально всё равно только по ssh можно цепляться (ну только если у вас не проходной двор), а демон самбы сам разрулит кому можно, а кто идёт пасти бобров.

    chmod 777 /data/share
    Конкретно в CentOS самба после установки сама не запускается. И ей даже не разрешено это делать. Так что разрешаем запускаться:

    systemctl enable smb.service
    Разрешаем firewalld пускать самбу в сеть:

    firewall-cmd —permanent —zone=public —add-service=samba
    Применить правила без разрыва соединений:

    firewall-cmd —reload

    • Через виндовые параметры безопасности права нормально выставляются? С этим часто бывают проблемы. Вообще, я много заводил файловых серверов под линуксом в виндовый домен. Мне не нравится, как это работает. Не очень стабильно, бывают глюки, иногда права через консоль приходится выставлять. Иногда были ситуации, когда права полностью или частично слетали. Я бы не рекомендовал такое решение, если есть возможность поставить файловый сервер под виндой.

      • Андрей

        Да соглашусь, недавно ввел в линукс файлсерве в домен, в определенный момент UID GID перемешались, а в некоторых случаях вообще слетели у определенных пользователях, но поднимать виндовый серв, который жрет в два раза больше оперативи на виртуалке не охота.

        • Да, да, именно такие проблемы у меня иногда бывают. Я не понимаю, из-за чего это происходит, но права в итоге слетают. Я много разбирался с этой ситуацией. У меня уже готов черновик статьи, где я настраиваю самбу в домене. Пытался настроить все через sssd, вместо winbind, но ничего не получилось. Пришлось вернуться к winbind. Буквально на днях будет статья, она уже фактически готова, но только проблемы, которые возникают, победить не получилось. Я не могу их сам спровоцировать, чтобы понять, в какой момент и из-за чего они слетают.

          • Есть мнение что это все из за тог что в настройках самбы есть параметр (winbind offline logon = yes) который препятствует срабатыванию обновления (getent passwd), так как параметр (winbind cache time = 300) игнорируется, но тут вопрос — ради эксперимента в домене добавил юзера «тест», по команде wbinfo -u он появился , но вот getent paswd не отработал. Получается что pam.d не передал данные, короче непонятно голова вспухла уже))))).

          • Только что снова вылетел баг, групы на шаре обновились и UID GID тупо напрочь обновились — стали другими, в следствии на шарах права стали в виде gid=10011, а не название группы, может в крон положить скрипт который будет обновлять раз в час или в сутки типа chown -R root:»domain admins» /srv/work, та и забить про эту проблему?

  7. Андрей

    И снова здравствуйте, нужен совет, после внедрения ПК в домен возникла потребность выполнения скрипта, который при авторизации доменного пользователя в его директорию /home/(domain)/(user)/mounfolder монтировал определенную шару допустим \\NFS\(SomeGroup_folder). Просто для Виндовых юзеров есть NETLOGON\disk.bat в котором указано кому и какую шару подключать, а вот в Linux мне не особо понятно как это сделать. На просторах ближе всего подходит метод с библиотекой libpam-moun, но вопрос решит ли она мне эту проблему?

    • Точно не знаю. В винде это решается на уровне групповых политик домена windows. Соответственно, тут тоже должен быть какой-то инструмент, аналог этих политик, для выполнения каких-то действий при логине. Но если речь конкретно про подключение диска, которое можно описать простым sh скриптом, то можно попробовать реализовать запуск скрипта при логоне с помощью .bash_login или .bashrc, если используется оболочка bash. Если другая, то уже ее средствами.

      • вопрос решился прям сам по себе, так сказать сам задал вопрос и в нем было решение, помогла библиотека libpam-mount, в настройка pam_mount.conf.xml указал каким группам что подключать и все заработало, теперь в зависимости от того кто вошел в систему монтируются нужные ему ресурсы. Так я это дело вписал в скрипт, который вводит комп в домен — ставит нужные либы, спрашивает имя и айпи домена, настраивает скрим монтирования шар. теперь ввод *.nix ПК в домен занимает три минуты)))

        • Круто, можешь поделиться ссылкой, где это описано и рассказано? Посмотрю для общего образования.

          • Сборная солянка с головы и интернета, есть скрипт вот его текст, там я думаю разберешя
            #!/bin/bash
            #Скрипт позволяет ввести ПК в домен
            #author: kachnu
            #email: ya.kachnu@gmail.com
            #Основой для скрипта послужил ресурс http://zubarev.me/domainjoin

            DIALOG=whiptail
            if [ ! -x «`which «$DIALOG»`» ]
            then DIALOG=dialog
            fi

            case $LANG in
            uk*|ru*|be*) #UA RU BE locales
            MAIN_LABEL=»Ввод ПК в домен»
            MAIN_TEXT=»Выберите действие:»
            RUN_ROOT_TEXT=»Запуск скрипта $0 с правами администратора»
            MENU1=»Установка пакетов для домена»
            MENU2=»Настройка и ввод в домен»
            MENU3=»Проверка входа в домен»
            MENU4=»Бекап настроек»
            MENU5=»Настройка аутентификации PAM»
            MENU6=»Справка»
            MENU2_1=»Имя ПК (mycorp-pc)»
            MENU2_2=»Рабочая группа (MYGROUP)»
            MENU2_3=»Имя домена (domain.com.ua)»
            MENU2_4=»IP контроллера домена (192.168.205.1)»
            MENU2_5=»Имя контроллера домена (main-dc1)»
            MENU2_6=»Имя сервера точного времени NTP»
            MENU2_7=»IP контроллера домена №2 (192.168.205.2)»
            MENU2_8=»Имя контроллера домена №2 (main-dc2)»
            MENU2_9=»ПРИМЕНИТЬ НАСТРОЙКИ И ЗАРЕГИСТРИРОВАТЬСЯ В ДОМЕНЕ»
            MENU3_1=»Восстановить настройки из *.bak»
            MENU3_2=»Сохранить текущие настройки *.bak»
            INFO_START_ADD=»
            **********
            Сейчас будет произведена проверка, не втянут ли уже компьютер в какой-нибудь домен.
            Внимание! Если вылезет страшная ошибка, не пугайтесь. Все так, как должно быть.
            Просто продолжайте процедуру введения в домен.
            **********
            Если на этом этапе процесс завис и нет никакой реакции, просто нажмите Enter
            »
            TEXT_ADD=»
            **********
            Сейчас будет предложено авторизовать данный компьютер в домене. Пожалуйста, введите полное имя домена в верхнем регистре (DOMAIN.COM.UA), затем доменного пользователя с правами администратора, а затем его пароль.
            **********
            »
            TEXT_NAME_DOMAIN=»Имя домена в верхнем регистре (DOMAIN.COM.UA): »
            TEXT_NAME_USER=»Имя доменного пользователя (администратора): »
            TEXT_OK_ADD=»Компьютер успешно введен в домен!

            Резервные копии ваших оригинальных файлов имеют расширение *.bak и находятся в соответствующих папках.
            Осталось только перезагрузить компьютер.
            »
            TEXT_ERROR_ADD=»В процессе присоединения к домену возникли ошибки.
            Смотрите подробнее листинг консоли.»
            EXIT_TEXT=»
            Нажмите Enter для перехода в главное меню»
            ATTENTION=»ВНИМАНИЕ!»
            ERROR_VARIABLE1=»Не указано значение -»
            ERROR_VARIABLE2=»Повторить ввод данных?»
            TEXT_LDM_UBUNTU=»
            **********
            Обнаружена система Ubuntu.

            Отключен гостевой вход и активирована форма ручного ввода логина на экране приветствия.
            Смотреть файл /usr/share/lightdm/lightdm.conf.d/59-ubuntu.conf
            **********
            »
            TEXT_LDM_DEBIAN=»
            **********
            Обнаружена система Debian.

            Отключен говстевой вход и активирована форма ручного ввода логина на экране приветствия.
            Смотреть файл /usr/share/lightdm/lightdm.conf.d/09_debian.conf
            **********
            »
            HELP=»Справка
            ____________________________

            Скрипт $0 предназначен для ввода компьютера в домен.

            1. $MENU1 — выполняется установка пакетов, в сборке эти пакеты будут находиться в /var/cache/apt/domain_packages , если данной папки нет, будет выполнена установка из интернета.
            Для работы скрипта требуются следующие пакеты: krb5-user samba winbind ntp libpam-krb5 libpam-winbind libnss-winbind libpam-ccreds libpam-mount cifs-utils cups-bsp nscd nss-updatedb libnss-db

            2. $MENU2 — выполняется резервное копирование файлов настроек, настройка и сохранение в файлах параметров входа в домен, а также выполнение фдола в домен.
            Пункты настройки входа в домен отмеченные * обязательны для заполнения.

            3. $MENU3 — проводится проверка соединения с доменом, при удачном подключении выводится сообщение — \»Join is OK.\»

            4. $MENU4 — возможность восстановить файлы в исходное состояние или сделать бекам уже настроенной конфигурации

            5. $MENU5 — настройка способов аутентификации.
            Поумолчанию (до установки пакетов для домена) активированы пункты:
            [*] Unix authentication
            [*] Register user sessions in the systemd control group hierarchy
            [*] GNOME Keyring Daemon — Login keyring management
            Поэтому чтобы вернуться к \»стандартной\» аутентификации необходимо отключать лишние пункты.
            ____________________________»

            ;;
            *) #All locales
            MAIN_LABEL=»Enter the PC domain»
            MAIN_TEXT=»Select an action:»
            RUN_ROOT_TEXT=»Run the script $0 administrator»
            MENU1=»Installation packages for domain»
            MENU2=»Setup and enter the domain»
            MENU3=»Check domain logon»
            MENU4=»Backup settings»
            MENU5=»Authentication configuration»
            MENU6=»Help»
            MENU2_1=»PC name(mycorp-pc)»
            MENU2_2=»Working group (MYGROUP)»
            MENU2_3=»Domain Name (domain.com.ua)»
            MENU2_4=»IP domain controller (192.168.205.1)»
            MENU2_5=»Name domain controller (main-dc1)»
            MENU2_6=»Name the time server NTP»
            MENU2_7=»IP domain controller 2 (192.168.205.2)»
            MENU2_8=»Name domain controller 2 (main-dc2)»
            MENU2_9=»Apply settings and registered in the domain»
            MENU3_1=»Restore from *.bak»
            MENU3_2=»Save the current settings *.bak»
            INFO_START_ADD=»
            **********
            Who will check not drawn if the computer is already in some domain.
            Attention! If you come out a terrible mistake, do not panic. All is as it should be .
            Just continue with the introduction of the domain.
            **********
            If at this stage of the process depends, and there is no reaction, just click Enter
            »
            TEXT_ADD=»
            **********
            СWho will be asked to authorize this computer to the domain. Please enter the full domain name in uppercase (DOMAIN.COM.UA), then the domain admin user and then the password.
            **********
            »
            TEXT_NAME_DOMAIN=»The domain name in uppercase (DOMAIN.COM.UA): »
            TEXT_NAME_USER=»The name of the domain user: »
            TEXT_OK_ADD=»The computer was successfully introduced in the domain!

            Backup copies of your original files have the extension * .bak and contained in appropriate folders.
            It remains only to restart the computer.
            »
            TEXT_ERROR_ADD=»In the process of joining a domain errors occur .
            See more listing the console.»
            EXIT_TEXT=»
            Press Enter to go to the main menu»
            ATTENTION=»ATTENTION!»
            ERROR_VARIABLE1=»Not Specified value -»
            ERROR_VARIABLE2=»Repeat data entry?»
            TEXT_LDM_UBUNTU=»
            **********
            Detected system Ubuntu.

            Disabled govstevoy input and activated manually entering the login form on the welcome screen.
            See file /usr/share/lightdm/lightdm.conf.d/59-ubuntu.conf
            **********
            »
            TEXT_LDM_DEBIAN=»
            **********
            Detected system Debian.

            Disabled govstevoy input and activated manually entering the login form on the welcome screen.
            See file /usr/share/lightdm/lightdm.conf.d/09_debian.conf
            **********
            »
            HELP=»Help
            ____________________________

            Script $0 for input into the computer domain.

            1. $MENU1 — installs a package to assemble these packages will be in /var/cache/apt/domain_packages , if this folder does not exist , the installation will be carried out from the Internet
            For the script requires the following packages: krb5-user samba winbind ntp libpam-krb5 libpam-winbind libnss-winbind libpam-ccreds nscd nss-updatedb libnss-db

            2. $MENU2 — backed up configuration files , configuration files and save the login domain , and performing fdola domain .
            Setting Items domain logon marked * are required.

            3. $MENU3 — the connection is checked with a domain with a successful connection message is displayed — \»Join is OK.\»

            4. $MENU4 — configuration files to restore to its original state or make beks already customized configuration

            5. $MENU5 — configure authentication methods .
            Defaul ( to install packages for the domain ) activated items:
            [*] Unix authentication
            [*] Register user sessions in the systemd control group hierarchy
            [*] GNOME Keyring Daemon — Login keyring management
            So to return to the \»default\» authentication, you must disable the extra items .
            ____________________________» ;;

            esac

            if [ «$(whoami)» != ‘root’ ]; then
            echo $RUN_ROOT_TEXT;
            sudo $0
            exit 0
            fi

            #############################
            GetVariables () #Получение переменных из файлов настроек
            {
            NAME_PC=$(cat /etc/hostname)
            NAME_WGROUP=$(cat /etc/samba/smb.conf | grep ^workgroup |awk ‘{print $3}’)
            name_group=$(cat /etc/resolvconf/resolv.conf.d/head | grep ^domain | awk ‘{print $2}’)
            IP_C1_DOMEN=$(cat /etc/resolvconf/resolv.conf.d/head | grep -m1 ^nameserver | awk ‘{print $2}’)
            NAME_C1_DOMEN=$(cat /etc/hosts | grep -m1 ^$IP_C1_DOMEN | awk ‘{print $3}’)
            NAME_NTP=$(cat /etc/ntp.conf | grep -m1 ^server | awk ‘{print $2}’ | sed «s/.${name_group}//g» | sed «s/0.debian.pool.ntp.org//g»)
            IP_C2_DOMEN=$(cat /etc/resolvconf/resolv.conf.d/head | grep -m2 ^nameserver | awk ‘FNR==2 {print $2}’)
            NAME_C2_DOMEN=$(cat /etc/hosts | grep -m1 ^$IP_C2_DOMEN | awk ‘{print $3}’)
            }
            #############################
            InstallPackages () #Установка пакетов для входа в Домен
            {
            DOMAIN_PACKAGES=»/var/cache/apt/domain_packages»
            cd /etc/ && tar czpf pam.d.tar.gz pam.d
            if [ -d «$DOMAIN_PACKAGES» ]
            then dpkg -i $DOMAIN_PACKAGES/*.deb || apt-get update && apt-get install -f
            else
            apt-get update
            apt-get install -y krb5-user samba winbind ntp libpam-krb5 libpam-winbind libnss-winbind libpam-mount cifs-utils cups-bsd libpam-ccreds nscd nss-updatedb libnss-db
            fi
            }
            #############################
            BackupSettings () #Резервирование настроек
            {
            if ! [ -f /etc/resolvconf/resolv.conf.d/head.bak ] ; then
            cp /etc/resolvconf/resolv.conf.d/head /etc/resolvconf/resolv.conf.d/head.bak
            fi

            if ! [ -f /etc/hostname.bak ] ; then
            cp /etc/hostname /etc/hostname.bak
            fi

            if ! [ -f /etc/hosts.bak ] ; then
            cp /etc/hosts /etc/hosts.bak
            fi

            if ! [ -f /etc/ntp.conf.bak ] ; then
            cp /etc/ntp.conf /etc/ntp.conf.bak
            fi

            if ! [ -f /etc/krb5.conf.bak ] ; then
            cp /etc/krb5.conf /etc/krb5.conf.bak
            fi

            if ! [ -f /etc/samba/smb.conf.bak ] ; then
            cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
            fi

            if ! [ -f /etc/security/limits.conf.bak ] ; then
            cp /etc/security/limits.conf /etc/security/limits.conf.bak
            fi

            if ! [ -f /etc/nsswitch.conf.bak ] ; then
            cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
            fi

            if ! [ -f /etc/pam.d/common-session.bak ] ; then
            cp /etc/pam.d/common-session /etc/pam.d/common-session.bak
            fi

            if ! [ -f /etc/security/pam_mount.conf.xml.bak ] ; then
            cat > /etc/security/pam_mount.conf.xml <<EOF

            <!—

            —>

            <!—

            —>

            umount -l %(MNTPT)

            EOF
            fi
            }
            #############################
            ForseBackupSettings ()
            {
            if [ -f /etc/resolvconf/resolv.conf.d/head ] ; then
            cp /etc/resolvconf/resolv.conf.d/head /etc/resolvconf/resolv.conf.d/head.bak
            fi

            if [ -f /etc/hostname ] ; then
            cp /etc/hostname /etc/hostname.bak
            fi

            if [ -f /etc/hosts ] ; then
            cp /etc/hosts /etc/hosts.bak
            fi

            if [ -f /etc/ntp.conf ] ; then
            cp /etc/ntp.conf /etc/ntp.conf.bak
            fi

            if [ -f /etc/krb5.conf ] ; then
            cp /etc/krb5.conf /etc/krb5.conf.bak
            fi

            if [ -f /etc/samba/smb.conf ] ; then
            cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
            fi

            if [ -f /etc/security/limits.conf ] ; then
            cp /etc/security/limits.conf /etc/security/limits.conf.bak
            fi

            if [ -f /etc/nsswitch.conf ] ; then
            cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
            fi

            if [ -f /etc/pam.d/common-session ] ; then
            cp /etc/pam.d/common-session /etc/pam.d/common-session.bak
            fi

            if ! [ -f /etc/security/pam_mount.conf.xml.bak ] ; then
            cat > /etc/security/pam_mount.conf.xml << EOF

            <!—

            —>

            <!—

            —>

            umount -l %(MNTPT)

            EOF
            fi

            }
            #############################
            UnBackupSettings () #Возвращение настроек из бекапа
            {
            if [ -f /etc/resolvconf/resolv.conf.d/head.bak ] ; then
            mv /etc/resolvconf/resolv.conf.d/head.bak /etc/resolvconf/resolv.conf.d/head
            fi

            if [ -f /etc/hostname.bak ] ; then
            mv /etc/hostname.bak /etc/hostname
            fi

            if [ -f /etc/hosts.bak ] ; then
            mv /etc/hosts.bak /etc/hosts
            fi

            if [ -f /etc/ntp.conf.bak ] ; then
            mv /etc/ntp.conf.bak /etc/ntp.conf
            fi

            if [ -f /etc/krb5.conf.bak ] ; then
            mv /etc/krb5.conf.bak /etc/krb5.conf
            fi

            if [ -f /etc/samba/smb.conf.bak ] ; then
            mv /etc/samba/smb.conf.bak /etc/samba/smb.conf
            fi

            if [ -f /etc/security/limits.conf.bak ] ; then
            mv /etc/security/limits.conf.bak /etc/security/limits.conf
            fi

            if [ -f /etc/nsswitch.conf.bak ] ; then
            mv /etc/nsswitch.conf.bak /etc/nsswitch.conf
            fi

            if [ -f /etc/pam.d/common-session.bak ] ; then
            mv /etc/pam.d/common-session.bak /etc/pam.d/common-session
            fi

            if [ -f /etc/security/pam_mount.conf.xml.bak ] ; then
            cp /etc/security/pam_mount.conf.xml.bak /etc/pam.d/pam_mount.conf.xml
            fi

            }
            #############################
            ChangeSettings () #Редактирование файлов настроек в зависимости от переменных
            {
            NAME_GROUP=$(echo $name_group | sed ‘s/[[:lower:]]/\u&/g’)
            if ! [ -d /etc/resolvconf/resolv.conf.d ]
            then mkdir /etc/resolvconf/resolv.conf.d
            fi
            echo «# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
            # DO NOT EDIT THIS FILE BY HAND — YOUR CHANGES WILL BE OVERWRITTEN
            domain $name_group
            search $name_group
            nameserver $IP_C1_DOMEN
            #nameserver $IP_C2_DOMEN» > /etc/resolvconf/resolv.conf.d/head
            if [[ $IP_C2_DOMEN != » ]] && [[ $NAME_C2_DOMEN != » ]]
            then sed -i «s/#nameserver ${IP_C2_DOMEN}/nameserver ${IP_C2_DOMEN}/g» /etc/resolvconf/resolv.conf.d/head
            fi
            echo «$NAME_PC» > /etc/hostname
            echo «127.0.0.1 localhost
            127.0.1.1 $NAME_PC.$name_group $NAME_PC
            $IP_C1_DOMEN $NAME_C1_DOMEN.$name_group $NAME_C1_DOMEN
            #$IP_C2_DOMEN $NAME_C2_DOMEN.$name_group $NAME_C2_DOMEN

            # The following lines are desirable for IPv6 capable hosts
            ::1 ip6-localhost ip6-loopback
            fe00::0 ip6-localnet
            ff00::0 ip6-mcastprefix
            ff02::1 ip6-allnodes
            ff02::2 ip6-allrouters» > /etc/hosts
            if [[ $IP_C2_DOMEN != » ]] && [[ $NAME_C2_DOMEN != » ]]
            then sed -i «s/#${IP_C2_DOMEN}/${IP_C2_DOMEN}/g» /etc/hosts
            fi
            echo «# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

            driftfile /var/lib/ntp/ntp.drift

            # Enable this if you want statistics to be logged.
            #statsdir /var/log/ntpstats/

            statistics loopstats peerstats clockstats
            filegen loopstats file loopstats type day enable
            filegen peerstats file peerstats type day enable
            filegen clockstats file clockstats type day enable

            # Specify one or more NTP servers.

            # Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
            # on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
            # more information.
            #server $NAME_NTP.$name_group
            server 0.debian.pool.ntp.org iburst
            server 1.debian.pool.ntp.org iburst
            server 2.debian.pool.ntp.org iburst
            server 3.debian.pool.ntp.org iburst

            # Use Ubuntu’s ntp server as a fallback.
            server ntp.ubuntu.com

            # Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
            # details. The web page
            # might also be helpful.
            #
            # Note that \»restrict\» applies to both servers and clients, so a configuration
            # that might be intended to block requests from certain clients could also end
            # up blocking replies from your own upstream servers.

            # By default, exchange time with everybody, but don’t allow configuration.
            restrict -4 default kod notrap nomodify nopeer noquery
            restrict -6 default kod notrap nomodify nopeer noquery

            # Local users may interrogate the ntp server more closely.
            restrict 127.0.0.1
            restrict ::1

            # Clients from this (example!) subnet have unlimited access, but only if
            # cryptographically authenticated.
            #restrict 192.168.123.0 mask 255.255.255.0 notrust

            # If you want to provide time to your local subnet, change the next line.
            # (Again, the address is an example only.)
            #broadcast 192.168.123.255

            # If you want to listen to time broadcasts on your local subnet, de-comment the
            # next lines. Please do this only if you trust everybody on the network!
            #disable auth
            #broadcastclient
            » > /etc/ntp.conf
            if [[ $NAME_NTP != » ]]
            then sed -i «s/#server ${NAME_NTP}/server ${NAME_NTP}/g» /etc/ntp.conf
            fi
            echo «[libdefaults]
            default_realm = $NAME_GROUP
            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]
            $NAME_GROUP = {
            kdc = $NAME_C1_DOMEN.$name_group
            #kdc = $NAME_C2_DOMEN.$name_group
            admin_server = $NAME_C1_DOMEN.$name_group
            default_domain = $NAME_GROUP
            }

            [domain_realm]
            .$name_group = $NAME_GROUP
            $name_group = $NAME_GROUP
            [login]
            krb4_convert = false
            krb4_get_tickets = false» > /etc/krb5.conf
            if [[ $IP_C2_DOMEN != » ]] && [[ $NAME_C2_DOMEN != » ]]
            then sed -i «s/#kdc = ${NAME_C2_DOMEN}/kdc = ${NAME_C2_DOMEN}/g» /etc/krb5.conf
            fi
            echo «[global]
            workgroup = $NAME_WGROUP
            realm = $NAME_GROUP
            security = ADS
            encrypt passwords = true
            dns proxy = no
            socket options = TCP_NODELAY
            domain master = no
            local master = no
            preferred master = no
            os level = 0
            domain logons = no
            idmap config * : range = 10000-20000
            idmap config * : backend = rid
            idmap config * : base_rid = 0
            winbind enum groups = yes
            winbind enum users = yes
            winbind use default domain = yes
            template shell = /bin/bash
            winbind refresh tickets = yes
            winbind offline logon = yes
            winbind cache time = 300
            usershare allow guests = yes
            usershare owner only = false

            [printers]
            comment = All Printers
            browseable = no
            path = /var/spool/samba
            printable = yes
            guest ok = no
            read only = yes
            create mask = 0700

            # Windows clients look for this share name as a source of downloadable
            # printer drivers
            [print$]
            comment = Printer Drivers
            path = /var/lib/samba/printers
            browseable = yes
            read only = yes
            guest ok = no» > /etc/samba/smb.conf
            echo «# /etc/security/limits.conf
            #
            #Each line describes a limit for a user in the form:
            #
            #
            #
            #Where:
            # can be:
            # — a user name
            # — a group name, with @group syntax
            # — the wildcard *, for default entry
            # — the wildcard %, can be also used with %group syntax,
            # for maxlogin limit
            # — NOTE: group and wildcard limits are not applied to root.
            # To apply a limit to the root user, must be
            # the literal username root.
            #
            # can have the two values:
            # — \»soft\» for enforcing the soft limits
            # — \»hard\» for enforcing hard limits
            #
            # can be one of the following:
            # — core — limits the core file size (KB)
            # — data — max data size (KB)
            # — fsize — maximum filesize (KB)
            # — memlock — max locked-in-memory address space (KB)
            # — nofile — max number of open files
            # — rss — max resident set size (KB)
            # — stack — max stack size (KB)
            # — cpu — max CPU time (MIN)
            # — nproc — max number of processes
            # — as — address space limit (KB)
            # — maxlogins — max number of logins for this user
            # — maxsyslogins — max number of logins on the system
            # — priority — the priority to run user process with
            # — locks — max number of file locks the user can hold
            # — sigpending — max number of pending signals
            # — msgqueue — max memory used by POSIX message queues (bytes)
            # — nice — max nice priority allowed to raise to values: [-20, 19]
            # — rtprio — max realtime priority
            # — chroot — change root to directory (Debian-specific)
            #
            #
            #

            #* soft core 0
            #root hard core 100000
            #* hard rss 10000
            #@student hard nproc 20
            #@faculty soft nproc 20
            #@faculty hard nproc 50
            #ftp hard nproc 0
            #ftp — chroot /ftp
            #@student — maxlogins 4

            # End of file
            * — nofile 16384
            root — nofile 16384″ > /etc/security/limits.conf
            echo «# /etc/nsswitch.conf
            #
            # Example configuration of GNU Name Service Switch functionality.
            # If you have the \`glibc-doc-reference’ and \`info’ packages installed, try:
            # \`info libc \»Name Service Switch\»‘ for information about this file.

            passwd: compat winbind
            group: compat winbind
            shadow: compat

            hosts: dns mdns4_minimal [NOTFOUND=return] mdns4 files
            networks: files

            protocols: db files
            services: db files
            ethers: db files
            rpc: db files

            netgroup: nis
            » > /etc/nsswitch.conf
            echo «#
            # /etc/pam.d/common-session — session-related modules common to all services
            #
            # This file is included from other service-specific PAM config files,
            # and should contain a list of modules that define tasks to be performed
            # at the start and end of sessions of *any* kind (both interactive and
            # non-interactive).
            #
            # As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
            # To take advantage of this, it is recommended that you configure any
            # local modules either before or after the default block, and use
            # pam-auth-update to manage selection of other modules. See
            # pam-auth-update(8) for details.

            # here are the per-package modules (the \»Primary\» block)
            session [default=1] pam_permit.so
            # here’s the fallback if no module succeeds
            session requisite pam_deny.so
            # prime the stack with a positive return value if there isn’t one already;
            # this avoids us returning an error just because nothing sets a success code
            # since the modules above will each just jump around
            session required pam_permit.so
            # The pam_umask module will set the umask according to the system default in
            # /etc/login.defs and user settings, solving the problem of different
            # umask settings with different shells, display managers, remote sessions etc.
            # See \»man pam_umask\».
            session optional pam_umask.so
            # and here are more per-package modules (the \»Additional\» block)
            session optional pam_krb5.so minimum_uid=1000
            session required pam_unix.so
            session optional pam_winbind.so
            session optional pam_mount.so
            session optional pam_systemd.so
            session optional pam_mkhomedir.so skel=/etc/skel/ umask=0077
            # end of pam-auth-update config» > /etc/pam.d/common-session
            }
            #############################
            RestartNetDemon () #Перезапуск сетевых служб
            {
            /etc/init.d/networking restart
            /etc/init.d/ntp restart
            /etc/init.d/winbind stop
            smbd restart
            /etc/init.d/winbind start
            }
            #############################
            AddToDomain () #Вход в домен
            {
            echo «$INFO_START_ADD»

            if [ «$(net ads testjoin)» != «Join is OK» ]; then
            echo «$TEXT_ADD»

            echo -n «$TEXT_NAME_DOMAIN»
            read DOMAINNAME

            echo -n «$TEXT_NAME_USER»
            read DOMAINUSER

            net ads join -U $DOMAINUSER -D $DOMAINNAME
            fi

            if [ «$(lsb_release -si)» = «Ubuntu» ]; then
            if [ -f /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf ]; then
            if ! [ -f /usr/share/lightdm/lightdm.conf.d/59-ubuntu.conf ]; then
            cp /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf /usr/share/lightdm/lightdm.conf.d/59-ubuntu.conf
            echo «greeter-show-manual-login=true» >> /usr/share/lightdm/lightdm.conf.d/59-ubuntu.conf
            echo «allow-guest=false» >> /usr/share/lightdm/lightdm.conf.d/59-ubuntu.conf
            echo «» >> /usr/share/lightdm/lightdm.conf.d/59-ubuntu.conf
            echo «$TEXT_LDM_UBUNTU»
            fi
            fi
            fi

            if [ «$(lsb_release -si)» = «Debian» ]; then
            if [ -f /usr/share/lightdm/lightdm.conf.d/01_debian.conf ]; then
            if ! [ -f /usr/share/lightdm/lightdm.conf.d/09_debian.conf ]; then
            cp /usr/share/lightdm/lightdm.conf.d/01_debian.conf /usr/share/lightdm/lightdm.conf.d/09_debian.conf
            echo «greeter-show-manual-login=true» >> /usr/share/lightdm/lightdm.conf.d/09_debian.conf
            echo «allow-guest=false» >> /usr/share/lightdm/lightdm.conf.d/09_debian.conf
            echo «» >> /usr/share/lightdm/lightdm.conf.d/09_debian.conf
            echo «$TEXT_LDM_DEBIAN»
            fi
            fi
            fi

            echo «»

            if [ «$(net ads testjoin)» = «Join is OK» ]; then
            echo «$TEXT_OK_ADD»
            else
            echo «$TEXT_ERROR_ADD»
            fi
            }
            #############################
            Help () #Справка
            {
            clear
            echo «$HELP»
            }
            #############################
            CheckVariables () #Функция проверки данных
            {
            if [[ $(echo $1) == » ]]
            then $DIALOG —title «$ATTENTION» —yesno «$ERROR_VARIABLE1 \»$2\»\\n\\n$ERROR_VARIABLE2» 10 60
            if [ $? == 0 ]
            then SettingForm
            else MainForm
            fi
            fi
            }
            #############################
            SettingForm () #Форма настроек
            {
            ANSWER=$($DIALOG —cancel-button «Exit» —title «$MAIN_LABEL» —menu \
            «$MAIN_TEXT» 16 62\
            9\
            1 «* $MENU2_1: $NAME_PC»\
            2 «* $MENU2_2: $NAME_WGROUP»\
            3 «* $MENU2_3: $name_group»\
            4 «* $MENU2_4: $IP_C1_DOMEN»\
            5 «* $MENU2_5: $NAME_C1_DOMEN»\
            6 «$MENU2_6: $NAME_NTP»\
            7 «$MENU2_7: $IP_C2_DOMEN»\
            8 «$MENU2_8: $NAME_C2_DOMEN»\
            9 «$MENU2_9» 3>&1 1>&2 2>&3)
            if [ $? != 0 ]
            then echo Exit ; MainForm
            fi
            case $ANSWER in
            1 ) NAME_PC=$($DIALOG —title «$MENU2_1» —inputbox «» 10 60 $NAME_PC 3>&1 1>&2 2>&3 | sed «s/[^a-zA-Z0-9.-]//g»)
            if [ $? != 0 ]
            then NAME_PC=$(cat /etc/hostname);
            fi
            SettingForm;;
            2 ) NAME_WGROUP=$($DIALOG —title «$MENU2_2» —inputbox «» 10 60 $NAME_WGROUP 3>&1 1>&2 2>&3 | sed «s/[^a-zA-Z0-9.-]//g»)
            if [ $? != 0 ]
            then NAME_WGROUP=$(cat /etc/samba/smb.conf | grep ^workgroup |awk ‘{print $3}’);
            fi
            SettingForm;;
            3 ) name_group=$($DIALOG —title «$MENU2_3» —inputbox «» 10 60 $name_group 3>&1 1>&2 2>&3 | sed «s/[^a-zA-Z0-9.-]//g»)
            if [ $? != 0 ]
            then name_group=$(cat /etc/resolvconf/resolv.conf.d/head | grep ^domain | awk ‘{print $2}’);
            fi
            SettingForm;;
            4 ) IP_C1_DOMEN=$($DIALOG —title «$MENU2_4» —inputbox «» 10 60 $IP_C1_DOMEN 3>&1 1>&2 2>&3 | sed «s/[^0-9.]//g»)
            if [ $? != 0 ]
            then IP_C1_DOMEN=$(cat /etc/resolvconf/resolv.conf.d/head | grep -m1 ^nameserver | awk ‘{print $2}’);
            fi
            SettingForm;;
            5 ) NAME_C1_DOMEN=$($DIALOG —title «$MENU2_5» —inputbox «» 10 60 $NAME_C1_DOMEN 3>&1 1>&2 2>&3 | sed «s/[^a-zA-Z0-9.-]//g»)
            if [ $? != 0 ]
            then IP_C1_DOMEN=$(cat /etc/resolvconf/resolv.conf.d/head | grep -m1 ^nameserver | awk ‘{print $2}’);
            NAME_C1_DOMEN=$(cat /etc/hosts | grep -m1 ^$IP_C1_DOMEN | awk ‘{print $3}’)
            fi
            SettingForm;;
            6 ) NAME_NTP=$($DIALOG —title «$MENU2_6» —inputbox «» 10 60 $NAME_NTP 3>&1 1>&2 2>&3 | sed «s/[^a-zA-Z0-9.-]//g»)
            if [ $? != 0 ]
            then NAME_NTP=$(cat /etc/ntp.conf | grep -m1 ^server | awk ‘{print $2}’ | sed «s/.${name_group}//g» | sed «s/0.debian.pool.ntp.org//g»)
            fi
            SettingForm;;
            7 ) IP_C2_DOMEN=$($DIALOG —title «$MENU2_7» —inputbox «» 10 60 $IP_C2_DOMEN 3>&1 1>&2 2>&3 | sed «s/[^0-9.]//g»)
            if [ $? != 0 ]
            then IP_C2_DOMEN=$(cat /etc/resolvconf/resolv.conf.d/head | grep -m2 ^nameserver | awk ‘FNR==2 {print $2}’);
            fi
            SettingForm;;
            8 ) NAME_C2_DOMEN=$($DIALOG —title «$MENU2_8» —inputbox «» 10 60 $NAME_C2_DOMEN 3>&1 1>&2 2>&3 | sed «s/[^a-zA-Z0-9.-]//g»)
            if [ $? != 0 ]
            then IP_C2_DOMEN=$(cat /etc/resolvconf/resolv.conf.d/head | grep -m2 ^nameserver | awk ‘FNR==2 {print $2}’);
            NAME_C2_DOMEN=$(cat /etc/hosts | grep -m2 ^$IP_C2_DOMEN | awk ‘FNR==2 {print $3}’)
            fi
            SettingForm;;
            9 ) #Проверка введеных значений
            CheckVariables «$NAME_PC» «$MENU2_1»
            CheckVariables «$NAME_WGROUP» «$MENU2_2»
            CheckVariables «$name_group» «$MENU2_3»
            CheckVariables «$IP_C1_DOMEN» «$MENU2_4»
            CheckVariables «$NAME_C1_DOMEN» «$MENU2_5»
            #Применение настроек и ввод ПК в домен
            BackupSettings
            ChangeSettings
            RestartNetDemon
            AddToDomain;;
            * ) echo oops! — $ANSWER ;;
            esac
            echo «$EXIT_TEXT»
            read input
            MainForm
            }
            #############################
            BackupForm () #Форма бекапа настроек
            {
            ANSWER=$($DIALOG —cancel-button «Exit» —title «$MAIN_LABEL» —menu \
            «$MAIN_TEXT» 13 50\
            3\
            1 «$MENU3_1″\
            2 «$MENU3_2» 3>&1 1>&2 2>&3)
            if [ $? != 0 ]
            then echo Exit ; MainForm
            fi
            case $ANSWER in
            1 ) UnBackupSettings;;
            2 ) ForseBackupSettings;;
            * ) echo oops! — $ANSWER ;;
            esac
            echo «$EXIT_TEXT»
            read input
            MainForm
            }
            #############################
            CheckState ()
            {
            if [ «$(net ads testjoin)» = «Join is OK» ]; then
            STATE_DOMAIN=»- Domain ON»
            else
            STATE_DOMAIN=»- Domain OFF»
            fi
            }
            #############################
            MainForm () #Главная форма
            {
            #CheckState
            ANSWER=$($DIALOG —cancel-button «Exit» —title «$MAIN_LABEL $STATE_DOMAIN» —menu \
            «$MAIN_TEXT» 13 50\
            6\
            1 «$MENU1″\
            2 «$MENU2″\
            3 «$MENU3″\
            4 «$MENU4″\
            5 «$MENU5″\
            6 «$MENU6» 3>&1 1>&2 2>&3)
            if [ $? != 0 ]
            then echo Exit ; exit 0
            fi
            case $ANSWER in
            1 ) InstallPackages ;;
            2 ) GetVariables;
            SettingForm ;;
            3 ) echo «**********»
            net ads testjoin ;;
            4 ) BackupForm ;;
            5 ) pam-auth-update —force;;
            6 ) Help;;
            * ) echo oops! — $ANSWER ;;
            esac
            echo «$EXIT_TEXT»
            read input
            MainForm
            }

            MainForm

            exit 0

          • Удали тот пост выше, там криво вставилось вот
            https://drive.google.com/open?id=0BzrWXN0Dsp4qUWxTY1UtdGFESVE

Добавить комментарий

Ваш e-mail не будет опубликован.