Участник:Alexandr/altinlan.script

Материал из ALT Linux Wiki

Скрипт для настройки рабочей станции на работу в домене или в рабочей группе

Приложение к статье ALT Linux в Домене или Рабочей Группе

Вот собственно, как и обещал, выкладываю свой скрипт, который автоматизирует включение рабочей станции в состав домена или рабочей группы. Скрипт умеет:

1. Включает машину в домен или рабочую группу.

2. Автоматически ищет и устанавливает необходимые пакеты(те, которых не хватает в CD версии дистрибутива, не более того)

3. Для рабочей группы - ищет главный обозреватель сети для указаной рабочей группы и в случае неудачи, включает у рабочей станции возможность быть главным обозревателем сети.

4. Имеет функцию полного отката в случае востановления первичного состояния системы. Восстанавливает только изменения после работы скрипта.

5. Скрипт умеет настраивать пакет pam_mount, для монтирования сетевых папок при входе пользователя от его логонного имени и пароля.

6. Настраивать пакет fuse-smb в качестве сетевого окружения.

7. Настраивает пакет pam_group для включения доменных пользователей в локальные группы.

8. Умеет менять темы для логон-менеджеров Gnome и KDE, на класические - т.е. без отображения списка пользователей(для включения в домен)

9. Содает и настраивает общую сетевую папку с гостевым доступом, а так же включает гостевой доступ к принтерам.

10. Настраивает сервер синхронизации времени на работу с контроллером домена.

Вроде ничего не забыл:)

Пользоваться им достаточно просто. Устанавливаем ему атрибут "запускаемый" и далее выполняем с параметрами:

1. Для рабочей группы - ./имя_скрипта -c имя компьютера -wg имя_рабочей_группы Включает компьютер в рабочую группу

2. Для рабочей группы - ./имя_скрипта -r Восстановление системы после работы скрипта

3. Для домена - ./имя_скрипта -c имя компьютера -d домен Имя_администратора_домена Включает рабочую станцию в домен.

4. Для домена - ./имя_скрипта -r Имя_администратора_домена Восстановление системы после работы скрипта, с выводом компьютера из домена

Дополнительные параметры настраиваются в теле скрипта.

Нюансы:

1. Имя домена следует указывать с суфиксом, например: mydomain.local

2. Имя администратора нужно указывать без имени домена, например: Администратор

3. При включении в домен, скрипт выясняет имя контроллера домена автоматически, через утилиту ping. Чтобы это сработало, необходимо чтобы на ДНС сервере контроллера домена, была настроенна зона обратного просмотра, и содержала запись о контроллере домена. Это нужно, чтобы IP-адреса могли преобразововаться в доменные имена. Чтобы проверить, работает ли у вас обратное преобразование, укажите рабочей станции на линуксе в качестве ДНС сервера, контроллер домена(если у вас IP адреса не назначаются через DHCP) и пропингуйте контроллер домена по его IP адресу. Если в ответах на пинг вы увидете ip-адрес сервера, а не его ДНС имя, значит у вас не настроенна зона обратного просмотра.

А вот и сам скрипт:

#!/bin/sh

# ------- Настройки для ввода в домен. Не влияют на рабочую группу -------------------

# Укажите локальные группы, в которые вы хотите включить доменных пользователей.
DomainGroups=wheel,cdrom,floppy,cdwriter,audio,radio,camera,xgrp,scanner

# Скрипт может изменить менеджеры оболочек Gnome и KDE, выставив в них оболочку, не отображающую список пользователей. Укажите "yes" чтобы использовать данную функцию.
UseDomainLogin=yes


# ------- Настройки функции автоустановки недостающих пакетов ------------------------

# Здесь можно указать папку, в которой следует искать недостоющие пакеты. По умолчанию указана папка в которой лежит скрипт. При указании своей папки, добавляйте в конце занк /
UseFolder=~+/

# Здесь вы можете указать свой репозиторий, для функции автоматической доустановки пакетов.
UseRepo="rpm ftp://ftp.altlinux.org/pub/distributions/ALTLinux/4.1/branch/ i586 classic"




# ------- Настройки дополнительных функций ------------------------

# Укажите папку, которую желаете сделать общей. В локальной сети, папка будет отображаться как "Общая". Папка создастся автоматически. 
# Если папку не указывать, то она не создастся. Пример: UseSharedFolder=/var/share Пример: UseSharedFolder=
UseSharedFolder=/var/shared


# Вы хотите разрешить гостевой доступ к принтерам? Пример: Printguest=yes - разрешить гостевой доступ к принтерам. Любое другое значение трактуется как "нет"
UsePrintGuest=yes


# Использовать fuse-smb в качестве обозревателя сетевых ресурсов? Укажите yes, чтобы использовать и любое-другое значение, чтобы не использовать. Пример: Fuses=yes
UseFuseSMB=yes

# Если вы собираетесь использовать fuse-smb в рабочей группе, вы можете указать логин и пароль, под которым вы хотите рабоать в сети.
Fuseuser=guest
Fusepasswd=guest


# Если вы хотите получить возможность монтировать сетевые папки SAMBA при входе пользователя в систему под его учетными данными - укажите yes
UsePamMount=yes

# Если точка монтирования не существует, она может содаваться автоматически - укажите yes
#AutoMountPoint=yes

# Вы можете указать до пяти сетевых папки, которые вы хотите монтировать при входе пользователя в систему. Примеры:
#
# Это шаблон
#Nfolder1="имя_сервера путь_к_сетевой_папке путь_к_точке_монтирования"
#
# Если необходимо монтировать сетевые папки, имена которых эквивалентны именам пользователей входящих в систему, можно
# использовать символ & - который будет автоматически подменен на имя пользователя
#Nfolder2="server.mydomain.local Documents/& ~/Documents"
#
# Если точка монтирования имеет русские символы и пробелы, ее нужно указывать подобно следующему примеру
#Nfolder5="server.mydomain.local shared ~/Desktop/"\"Общая\ Папка\"




# Функция вывода справки при вызове скрипта с параметром --help
function _help ()
{
echo ""
echo ""
echo "Пример запуска скрипта, для ввода компьютера в рабочую группу:"
echo "./имя_скрипта -c Имя_компьютера -wg Название_рабочей_группы"
echo ""
echo "Пример запуска скрипта, для ввода компьютера в домен:"
echo "./имя_скрипта -c Имя_компьютера -d полное_имя_домена_с_суфиксом имя_админстратора_домена"
echo ""
echo "Чтобы восстановить состояние системы, которое было до запуска скрипта, выполните команду:"
echo "./имя_скрипта -r"
echo ""
echo "Чтобы восстановить состояние системы у компьютера, введенного в домен:"
echo "./имя_скрипта -r имя_администратора_домена"
echo ""
echo ""
echo "Примечание: В теле скрипта вы можете изменить дополнительные настройки."
echo ""
}



# Функция восстановления системы после работы скрипта. Безвредна для необработанных скриптом компьютеров.
# Однако, если скрипт найдет резервные копии файлов c расширение .jold - он их восстановит.
# Это сделанно на случай, если вы вдруг удалите файл настроек скрипта, который он создает в процессе работы.
# Так введенный куда-нить скриптом компьютер, будет проще востановить.
function _restore ()
{
if grep domainON ${Confi} >/dev/null 2>&1;then
if [[ $Aname == "" ]];then echo "При восстановлении настроек с выводом компьютера из домена, необходимо указать имя администратора домена. Например так: ./имя_скрипта -r Administrator";exit;fi
echo "Сейчас будет произведено восстановление исходного состояния компьютера с выводом его из домена. Вы желаете продолжить? (y/n)"
read ans
case $ans in
     Y|y) ;;
      *) exit ;;
esac
net ads leave -U $Aname && (sed '/\<domainON\>/d' ${Confi} > ${Confi}".j";cat ${Confi}".j" > ${Confi} && rm -f ${Confi}".j") || echo "Не удалось удалить компьютер из домена. Вам придется сделать это вручную, находясь непосредственно на контроллере домена. Восстановление системы продолжается."
fi
ls /etc/hosts.jold && (rm -f /etc/hosts && mv -f /etc/hosts.jold /etc/hosts)
ls /etc/HOSTNAME.jold && (rm -f /etc/HOSTNAME;mv -f /etc/HOSTNAME.jold /etc/HOSTNAME)
ls /etc/sysconfig/network.jold && (rm -f /etc/sysconfig/network;mv -f /etc/sysconfig/network.jold /etc/sysconfig/network)
ls /etc/ntpd.conf.jold && (rm -f /etc/ntpd.conf;mv -f /etc/ntpd.conf.jold /etc/ntpd.conf)
ls /etc/krb5.conf.jold && (rm -f /etc/krb5.conf;mv -f /etc/krb5.conf.jold /etc/krb5.conf)
ls /etc/samba/smb.conf.jold && (rm -f /etc/samba/smb.conf;mv -f /etc/samba/smb.conf.jold /etc/samba/smb.conf)
ls /etc/cups/cupsd.conf.jold && (rm -f /etc/cups/cupsd.conf;mv -f /etc/cups/cupsd.conf.jold /etc/cups/cupsd.conf)
ls /etc/nsswitch.conf.jold && (rm -f /etc/nsswitch.conf;mv -f /etc/nsswitch.conf.jold /etc/nsswitch.conf)
ls /etc/security/pam_mount.conf.jold && (rm -f /etc/security/pam_mount.conf;mv -f /etc/security/pam_mount.conf.jold /etc/security/pam_mount.conf)
ls /etc/security/group.conf.jold && (rm -f /etc/security/group.conf;mv -f /etc/security/group.conf.jold /etc/security/group.conf)
ls /etc/pam.d/kde.jold && (rm -f /etc/pam.d/kde;mv -f /etc/pam.d/kde.jold /etc/pam.d/kde)
ls /etc/pam.d/gdm.jold && (rm -f /etc/pam.d/gdm;mv -f /etc/pam.d/gdm.jold /etc/pam.d/gdm)
ls /etc/pam.d/kscreensaver.jold && (rm -f /etc/pam.d/kscreensaver;mv -f /etc/pam.d/kscreensaver.jold /etc/pam.d/kscreensaver)
ls /etc/pam.d/gnome-screensaver.jold && (rm -f /etc/pam.d/gnome-screensaver;mv -f /etc/pam.d/gnome-screensaver.jold /etc/pam.d/gnome-screensaver)
ls /etc/pam.d/xscreensaver.jold && (rm -f /etc/pam.d/xscreensaver;mv -f /etc/pam.d/xscreensaver.jold /etc/pam.d/xscreensaver)
ls /etc/X11/gdm/custom.conf.jold && (rm -f /etc/X11/gdm/custom.conf;mv -f /etc/X11/gdm/custom.conf.jold /etc/X11/gdm/custom.conf)
ls /etc/X11/kdm/kdmrc.jold && (rm -f /etc/X11/kdm/kdmrc;mv -f /etc/X11/kdm/kdmrc.jold /etc/X11/kdm/kdmrc)
ls /etc/modules.jold && (sed '/\<fuse\>/d' /etc/modules > /etc/modules.jold;cat /etc/modules.jold > /etc/modules) && rm -f /etc/modules.jold
ls /etc/fuse-login && (kill `ps -A | grep fusesmb | cut -d" " -f1,2`;sleep 1s;rm -fr /etc/skel/.smb;find /home/*/ -name ".smb" -exec rm -fR {} \;;ps -A | grep fuse)
ls /etc/fuse-login && (rm -fR /etc/skel/network;find /home/*/ -name "network" -exec rm -fR {} \;;rm -f /etc/skel/.xsession.d/50-fuselogin;find /home/*/ -name "50-fuselogin" -exec rm -fR {} \;)
ls /etc/fuse-login && (find /home/*/Desktop -name "Сетевое Окружение" -exec rm -fR {} \;;find /home/*/*/Desktop/ -name "Сетевое Окружение" -exec rm -fR {} \;;find /home/*/*/ -name "network" -exec rm -fR {} \;)
ls /etc/fuse-login && rm -f /etc/fuse-login
if ls ${Confi} >/dev/null 2>&1;then
if grep ntpdON ${Confi} >/dev/null 2>&1;then /sbin/chkconfig ntpd on;/sbin/service ntpd restart;else /sbin/chkconfig ntpd off;/sbin/service ntpd stop;fi
if grep krb5kinitINST ${Confi} >/dev/null 2>&1;then echo >/dev/null;else rpm -qa | grep "krb5-kinit" && apt-get remove -y krb5-kinit;fi
if grep winbindON ${Confi} >/dev/null 2>&1;then /sbin/chkconfig winbind on;/sbin/service winbind restart;else /sbin/chkconfig winbind off;/sbin/service winbind stop;fi
if grep sambaON ${Confi} >/dev/null 2>&1;then /sbin/chkconfig smb on;/sbin/service smb restart;else /sbin/chkconfig smb off;/sbin/service smb stop;fi
if grep cupsON ${Confi} >/dev/null 2>&1;then /sbin/chkconfig cups on;/sbin/service cups restart;else /sbin/chkconfig cups off;/sbin/service cups stop;fi
if grep pammountON ${Confi} >/dev/null 2>&1;then echo >/dev/null;else rpm -qa | grep "pam_mount" && apt-get remove -y pam_mount;fi
if grep fusesmbON ${Confi} >/dev/null 2>&1;then echo >/dev/null;else rpm -qa | grep "fuse-smb" && apt-get remove -y fuse-smb;fi
rm -fR ${Confi};else echo "Не найдено файлов конфигурации скрипта. Восстановление состояния служб и пакетов невозможно!";fi
/sbin/service network restart
}




# Функция проверки доступности контроллера домена, а так же определения переменных и создания файла конфигурации скрипта ${Confi}
function _configure ()
{
ls ${Confi} && _restore
echo "" > ${Confi}
if [[ $WGNAME != 0 ]];then WGNAME=`echo $WGNAME | tr "[a-z]" "[A-Z]"`;WGNAME=`echo $WGNAME | sed 's/^[^a-z]*//;s/[^a-z0-9]*$//;s/ //g'`;fi
Compname=`echo $Compname | sed 's/^[^a-z]*//;s/[^a-z0-9]*$//;s/ //g'`
if [[ $Fdomain != 0 ]];then
if Fdomain=`echo $Fdomain | tr "[A-Z]" "[a-z]"` >/dev/null 2>&1;then Dcontrol=`ping -c 1 $Fdomain | cut -d" " -f4 | grep $Fdomain`;fi
if ping -c 5 $Dcontrol >/dev/null 2>&1;then echo >/dev/null;else echo "Контроллер домена "$Dcontrol" не найден. Убедитесь в том, что вы правильно указали полное название домена, а так-же проверьте свои сетевых настройки и корректность работы доменного DNS сервера.";exit;fi
FDOMAIN=`echo $Fdomain | tr "[a-z]" "[A-Z]"`
LDOMAIN=`echo $FDOMAIN | sed 's/\(\.[a|A-z|Z]*\)$//'`
/sbin/chkconfig winbind --list | grep -E "on|вкл" && echo "winbindON" >> ${Confi};fi
/sbin/chkconfig cups --list | grep -E "on|вкл" && echo "cupsON" >> ${Confi}
/sbin/chkconfig smb --list | grep -E "on|вкл" && echo "sambaON" >> ${Confi}
rpm -qa | grep "fuse-smb" && echo "fusesmbON" >> ${Confi}
rpm -qa | grep "pam_mount" && echo "pammountON" >> ${Confi}
rpm -qa | grep "krb5-kinit" && echo "krb5kinitINST" >> ${Confi}
/sbin/chkconfig ntpd --list | grep -E "on|вкл" && echo "ntpdON" >> ${Confi}
UseFolder=`echo $UseFolder`;ls -d $UseFolder || (echo "Папка "${UseFolder}" не найдена. Будет использована папка из которой запущен скрипт.";UseFolder=~+/)
Inst=
if [[ $Fdomain != 0 ]];then rpm -qa | grep krb5-kinit || Inst=${UseFolder}"krb5-kinit*.rpm ";fi
if [[ $UseFuseSMB == "yes" ]];then rpm -qa | grep fuse-smb || Inst=${Inst}${UseFolder}"fuse-smb*.rpm ";fi
if [[ $UsePamMount == "yes" ]];then rpm -qa | grep pam_mount || Inst=${Inst}${UseFolder}"pam*mount*.rpm ";fi
[[ $Inst != "" ]] && (Inst=`echo $Inst`;apt-get install -y $Inst)
Inst=
if [[ $Fdomain != 0 ]];then rpm -qa | grep krb5-kinit || Inst="krb5-kinit ";fi
if [[ $UseFuseSMB == "yes" ]];then rpm -qa | grep fuse-smb || Inst=${Inst}"fuse-smb ";fi
if [[ $UsePamMount == "yes" ]];then rpm -qa | grep pam_mount || Inst=${Inst}"pam_mount ";fi
[[ $Inst != "" ]] && (Inst=`echo $Inst`;apt-get update;apt-get install -y $Inst)
Inst=
if [[ $Fdomain != 0 ]];then rpm -qa | grep krb5-kinit || Inst="krb5-kinit ";fi
if [[ $UseFuseSMB == "yes" ]];then rpm -qa | grep fuse-smb || Inst=${Inst}"fuse-smb ";fi
if [[ $UsePamMount == "yes" ]];then rpm -qa | grep pam_mount || Inst=${Inst}"pam_mount ";fi
if [[ $Inst != "" ]];then
echo $UseRepo | grep -E "rpm ftp://|rpm file:///|rpm http://" || (echo "Вы указали неправильный по синтексу репозиторий "${UseRepo}". Будет использован репозиторий по умолчанию.";UseRepo="rpm ftp://ftp.altlinux.org/pub/distributions/ALTLinux/4.1/branch/ i586 classic")
echo $UseRepo > /etc/apt/sources.list.d/AJoin_samba.list;apt-get update && apt-get install -y $Inst
rm -f /etc/apt/sources.list.d/AJoin_samba.list;fi
if [[ $UseFuseSMB == "yes" ]];then rpm -qa | grep fuse-smb || UseFuseSMB=${UseFuseSMB}"no";fi
if [[ $UsePamMount == "yes" ]];then rpm -qa | grep "pam_mount" || UsePamMount=${UsePamMount}"no";fi
}




# Настраяваем меняем имя компьютера и настраиваем самбу на ввод в рабочую группу
function _join_wg ()
{
# Прописываем имя компьютера в файлы /etc/hosts /etc/HOSTNAME и /etc/sysconfig/network сохранем резервные копии оригиналов.
ls /etc/hosts.jold || cp -f /etc/hosts /etc/hosts.jold
echo 127.0.0.1\ \ $Compname\ localhost > /etc/hosts
ls /etc/HOSTNAME.jold || cp -f /etc/HOSTNAME /etc/HOSTNAME.jold
echo $Compname > /etc/HOSTNAME
ls /etc/sysconfig/network.jold || cp -f /etc/sysconfig/network /etc/sysconfig/network.jold
echo "NETWORKING=yes" > /etc/sysconfig/network
echo "CONFMETHOD=etcnet" >> /etc/sysconfig/network
echo "HOSTNAME"\=$Compname >> /etc/sysconfig/network
echo "RESOLV_MODS=yes" >> /etc/sysconfig/network
hostname $Compname
Pm="no";Osl="0"
# Редактируем конфигурационный файл /etc/samba/smb.conf
ls /etc/samba/smb.conf.jold || cp -f /etc/samba/smb.conf /etc/samba/smb.conf.jold
echo \#\ Samba\ config\ file\ created\ by\ Alexandr > /etc/samba/smb.conf
echo \#\ Date\:\ 2009\/18\/02 >> /etc/samba/smb.conf
echo >> /etc/samba/smb.conf
echo \[global\] >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "dos charset = CP866" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "unix charset = UTF8" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "display charset = LOCALE" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ workgroup\ \=\ $WGNAME >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ netbios\ name\ \=\ $Compname >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "server string = " >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "printcap name = cups" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "load printers = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "printing = cups" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "log file = /var/log/samba/log.%m" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "max log size = 50" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "dns proxy = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "ldap ssl = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "preferred master = "$Pm >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "os level = "$Osl >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "use sendfile = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "map to guest = Bad User" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "public = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "browseable = yes" >> /etc/samba/smb.conf
/sbin/service smb restart;sleep 2s
if /sbin/service smb status | grep "running" >/dev/null 2>&1;then
# Ищем обозреватель указанной рабочей группы. В случае неудачи - включаем функцию обозревателя сети.
if nmblookup -SA `nmblookup -M -- - | cut -d" " -f1 | sed '/querying/d'` | grep -iw -E "<01>|$WGNAME" | grep "<00>" >/dev/null 2>&1;then echo >/dev/null
else echo "Внимание! На текущем компьютере будет включена функция обозревателя сети "${WGNAME}" т.к. не удалось найти действующий обозреватель";Pm="yes";Osl="34"
echo \#\ Samba\ config\ file\ created\ by\ Alexandr > /etc/samba/smb.conf
echo \#\ Date\:\ 2009\/18\/02 >> /etc/samba/smb.conf
echo >> /etc/samba/smb.conf
echo \[global\] >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "dos charset = CP866" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "unix charset = UTF8" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "display charset = LOCALE" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ workgroup\ \=\ $WGNAME >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ netbios\ name\ \=\ $Compname >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "server string = " >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "printcap name = cups" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "load printers = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "printing = cups" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "log file = /var/log/samba/log.%m" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "max log size = 50" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "dns proxy = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "ldap ssl = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "preferred master = "$Pm >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "os level = "$Osl >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "use sendfile = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "map to guest = Bad User" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "public = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "browseable = yes" >> /etc/samba/smb.conf
fi;else echo "Не удалось осуществить тестовый запуск сервера SAMBA, для поиска главного обозревателя сети "$WGNAME". Функция главного обозревателя сети, на данном компьютере, будет выключена.";fi
/sbin/service smb stop
}




# Обновляем файлы конфигурации и вводим машину в домен
function _join_domain ()
{
if rpm -qa | grep krb5-kinit >/dev/null 2>&1;then echo /dev/null;else echo "Пакет krn5-kinit не найден, ввод в домен невозможен!";exit;fi
# Прописываем имя компьютера в файлы /etc/hosts /etc/HOSTNAME и /etc/sysconfig/network сохранем резервные копии оригиналов.
ls /etc/hosts.jold || cp -f /etc/hosts /etc/hosts.jold
echo 127.0.0.1  $Compname\.$Fdomain localhost $Compname > /etc/hosts
ls /etc/HOSTNAME.jold || cp -f /etc/HOSTNAME /etc/HOSTNAME.jold
echo $Compname > /etc/HOSTNAME
ls /etc/sysconfig/network.jold || cp -f /etc/sysconfig/network /etc/sysconfig/network.jold
echo "NETWORKING=yes" > /etc/sysconfig/network
echo "CONFMETHOD=etcnet" >> /etc/sysconfig/network
echo "HOSTNAME"\=$Compname >> /etc/sysconfig/network
echo "RESOLV_MODS=yes" >> /etc/sysconfig/network
hostname $Compname
# Прописываем сервер времени и синхронизируем время с контроллером домена.
ls /etc/ntpd.conf.jold || cp -f /etc/ntpd.conf /etc/ntpd.conf.jold
echo servers\ $Dcontrol > /etc/ntpd.conf
# Настраиваем файл /etc/krb5.conf
ls /etc/krb5.conf.jold || cp -f /etc/krb5.conf /etc/krb5.conf.jold
echo "[logging]" > /etc/krb5.conf
echo "default = FILE:/var/log/krb5libs.log" > /etc/krb5.conf
echo "kdc = FILE:/var/log/krb5kdc.log" >> /etc/krb5.conf
echo "admin_server = FILE:/var/log/kadmind.log" >> /etc/krb5.conf
echo >> /etc/krb5.conf
echo "[libdefaults]" >> /etc/krb5.conf
echo "ticket_lifetime = 24000" >> /etc/krb5.conf
echo default\_realm\ \=\ $FDOMAIN >> /etc/krb5.conf
echo "dns_lookup_realm = true" >> /etc/krb5.conf
echo "dns_lookup_kdc = true" >> /etc/krb5.conf
echo >> /etc/krb5.conf
echo "[realms]" >> /etc/krb5.conf
echo $FDOMAIN\ \=\ \{ >> /etc/krb5.conf
echo \ \ kdc\ \=\ $Dcontrol\:88 >> /etc/krb5.conf
echo \ \ admin\_server\ \=\ $Dcontrol\:749 >> /etc/krb5.conf
echo \ \ default\_domain\ \=\ $Fdomain >> /etc/krb5.conf
echo \} >> /etc/krb5.conf
echo  >> /etc/krb5.conf
echo "[domain_realm]" >> /etc/krb5.conf
echo \.$Fdomain\ \=\ $FDOMAIN >> /etc/krb5.conf
echo $Fdomain\ \=\ $FDOMAIN >> /etc/krb5.conf
echo  >> /etc/krb5.conf
echo "[kdc]" >> /etc/krb5.conf
echo "profile = /var/lib/kerberos/krb5kdc/kdc.conf" >> /etc/krb5.conf
echo >> /etc/krb5.conf
echo "[pam]" >> /etc/krb5.conf
echo "debug = false" >> /etc/krb5.conf
echo "ticket_lifetime = 24000" >> /etc/krb5.conf
echo "renew_lifetime = 24000" >> /etc/krb5.conf
echo "forwardable = true" >> /etc/krb5.conf
echo "krb4_convert = false" >> /etc/krb5.conf
# Создаем файл /etc/samba/smb.conf сохраняя резервную копию оригинала.
ls /etc/samba/smb.conf.jold || cp -f /etc/samba/smb.conf /etc/samba/smb.conf.jold
echo \#\ Samba\ config\ file\ created\ by\ Alexandr > /etc/samba/smb.conf
echo \#\ Date\:\ 2009\/1\/03 >> /etc/samba/smb.conf
echo >> /etc/samba/smb.conf
echo \[global\] >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "dos charset = CP866" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "unix charset = UTF8" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "display charset = LOCALE" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ workgroup\ \=\ $LDOMAIN >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ netbios\ name\ \=\ $Compname >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "server string = " >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "security = ads" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ password\ server\ \=\ $Dcontrol >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ realm\ \=\ $FDOMAIN >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "encrypt passwords = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "winbind refresh tickets = True" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "winbind offline logon = True" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "winbind uid = 10000-20000" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "winbind gid = 10000-20000" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "winbind use default domain = True" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "template homedir = /home/%D/%U" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "template shell = /bin/bash" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "printcap name = cups" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "load printers = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "printing = cups" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "log file = /var/log/samba/log.%m" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "max log size = 50" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "dns proxy = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "ldap ssl = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "domain master = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "local master = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "preferred master = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "os level = 0" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "use sendfile = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "map to guest = Bad User" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "public = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "browseable = yes" >> /etc/samba/smb.conf
#Приводим к соответствующему виду файл /etc/nsswitch.conf
ls /etc/nsswitch.conf.jold || cp -f /etc/nsswitch.conf /etc/nsswitch.conf.jold
echo "passwd:     files winbind nisplus nis" > /etc/nsswitch.conf
echo "shadow:     tcb files winbind nisplus nis" >> /etc/nsswitch.conf
echo "group:      files winbind nisplus nis" >> /etc/nsswitch.conf
echo  >> /etc/nsswitch.conf
echo "hosts:      files nisplus nis dns" >> /etc/nsswitch.conf
echo  >> /etc/nsswitch.conf
echo "ethers:     files" >> /etc/nsswitch.conf
echo "netmasks:   files" >> /etc/nsswitch.conf
echo "networks:   files" >> /etc/nsswitch.conf
echo "protocols:  files" >> /etc/nsswitch.conf
echo "rpc:        files" >> /etc/nsswitch.conf
echo "services:   files" >> /etc/nsswitch.conf
echo  >> /etc/nsswitch.conf
echo "bootparams: nisplus [NOTFOUND=return] files" >> /etc/nsswitch.conf
echo  >> /etc/nsswitch.conf
echo "netgroup:   nisplus" >> /etc/nsswitch.conf
echo  >> /etc/nsswitch.conf
echo "publickey:  nisplus" >> /etc/nsswitch.conf
echo  >> /etc/nsswitch.conf
echo "automount:  files nisplus" >> /etc/nsswitch.conf
echo "aliases:    files nisplus" >> /etc/nsswitch.conf
# Настроиваем членство доменных групп в локальных, через файл /etc/security/group.conf
ls /etc/security/group.conf.jold || cp -f /etc/security/group.conf /etc/security/group.conf.jold
echo \*\;\*\;\*\;Al0000\-2400\;$DomainGroups > /etc/security/group.conf
}




# Настраиваем гостевой доступ к сетевым принтерам
function _shareprint ()
{
if [[ $UsePrintGuest == yes ]]
then
echo >> /etc/samba/smb.conf
echo \[printers\] >> /etc/samba/smb.conf >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "comment = All Printers" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "path = /var/spool/samba" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "browseable = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "guest ok = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "writable = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "printable = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "create mode = 0700" >> /etc/samba/smb.conf
ls /etc/cups/cupsd.conf.jold || cp -f /etc/cups/cupsd.conf /etc/cups/cupsd.conf.jold
echo "LogLevel info" > /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "SystemGroup sys root" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "# Allow remote access" >> /etc/cups/cupsd.conf
echo "Port 631" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "Listen /var/run/cups/cups.sock" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "# Enable printer sharing and shared printers." >> /etc/cups/cupsd.conf
echo "Browsing On" >> /etc/cups/cupsd.conf
echo "BrowseOrder allow,deny" >> /etc/cups/cupsd.conf
echo "BrowseAllow all" >> /etc/cups/cupsd.conf
echo "BrowseAddress @LOCAL" >> /etc/cups/cupsd.conf
echo "DefaultAuthType Basic" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "<Location />" >> /etc/cups/cupsd.conf
echo "  # Allow shared printing..." >> /etc/cups/cupsd.conf
echo "  Order allow,deny" >> /etc/cups/cupsd.conf
echo "  Allow all" >> /etc/cups/cupsd.conf
echo "</Location>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "<Location /admin>" >> /etc/cups/cupsd.conf
echo "  Encryption Required" >> /etc/cups/cupsd.conf
echo "  # Restrict access to the admin pages..." >> /etc/cups/cupsd.conf
echo "  Order allow,deny" >> /etc/cups/cupsd.conf
echo "</Location>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "<Location /admin/conf>" >> /etc/cups/cupsd.conf
echo "  AuthType Default" >> /etc/cups/cupsd.conf
echo "  Require user @SYSTEM" >> /etc/cups/cupsd.conf
echo "  # Restrict access to the configuration files..." >> /etc/cups/cupsd.conf
echo "  Order allow,deny" >> /etc/cups/cupsd.conf
echo "</Location>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "<Policy default>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf >> /etc/cups/cupsd.conf
echo "  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>" >> /etc/cups/cupsd.conf
echo "    Require user @OWNER @SYSTEM" >> /etc/cups/cupsd.conf
echo "    Order deny,allow" >> /etc/cups/cupsd.conf
echo "  </Limit>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>" >> /etc/cups/cupsd.conf
echo "    AuthType Default" >> /etc/cups/cupsd.conf
echo "    Require user @SYSTEM" >> /etc/cups/cupsd.conf
echo "    Order deny,allow" >> /etc/cups/cupsd.conf
echo "  </Limit>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>" >> /etc/cups/cupsd.conf
echo "    AuthType Default" >> /etc/cups/cupsd.conf
echo "    Require user @SYSTEM" >> /etc/cups/cupsd.conf
echo "    Order deny,allow" >> /etc/cups/cupsd.conf
echo "  </Limit>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "  <Limit Cancel-Job CUPS-Authenticate-Job>" >> /etc/cups/cupsd.conf
echo "    Require user @OWNER @SYSTEM" >> /etc/cups/cupsd.conf
echo "    Order deny,allow" >> /etc/cups/cupsd.conf
echo "  </Limit>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "  <Limit All>" >> /etc/cups/cupsd.conf
echo "    Order deny,allow" >> /etc/cups/cupsd.conf
echo "  </Limit>" >> /etc/cups/cupsd.conf
echo >> /etc/cups/cupsd.conf
echo "</Policy>" >> /etc/cups/cupsd.conf
/sbin/chkconfig cups on
/sbin/service cups restart
fi
}




# Настраиваем гостевой доступ к указанной сетевой папке а так же создаем ее в случае отсутствия
function _sharefolder ()
{
if [[ $UseSharedFolder != "" ]]
then
echo >> /etc/samba/smb.conf
echo \[Общая\] >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ path\ \=\ $UseSharedFolder >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "force group = nobody" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "force create mode = 0666" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "force directory mode = 0777" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "browseable = yes" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "read only = no" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "public = yes" >> /etc/samba/smb.conf
mkdir -p $UseSharedFolder && chmod -fR 0777 $UseSharedFolder || echo "Не удалось создать общую папку "$UseSharedFolder
fi
}




# Настраиваем сетевое окружение с помощью пакета fuse-smb если данная функция включена и установлен пакет fuse-smb
function _fusesmb ()
{
[[ $UseFuseSMB == "yesno" ]] && echo "Настройка сетевого окружения с помошью пакета fuse-smb отключена, т.к. не удалось найти и/или установить соответствующий пакет"
if [[ $UseFuseSMB == "yes" ]]
then
mkdir -p /etc/skel/.smb
echo "[global]" > /etc/skel/.smb/fusesmb.conf
if [[ $WGNAME != 0 ]];then
echo "username="$Fuseuser >> /etc/skel/.smb/fusesmb.conf
echo "password="$Fusepasswd >> /etc/skel/.smb/fusesmb.conf
echo "showhiddenshares=true" >> /etc/skel/.smb/fusesmb.conf
else echo "showhiddenshares=false" >> /etc/skel/.smb/fusesmb.conf
fi
echo "timeout = 10" >> /etc/skel/.smb/fusesmb.conf
echo "interval = 5" >> /etc/skel/.smb/fusesmb.conf
mkdir -p /etc/skel/network
ls /etc/modules.jold || cp -f /etc/modules /etc/modules.jold
echo fuse >> /etc/modules
echo "#!/bin/sh" > /etc/fuse-login
echo "mkdir -p ~/network" >> /etc/fuse-login
echo "/usr/bin/fusesmb.cache" >> /etc/fuse-login
echo "/usr/bin/fusesmb ~/network" >> /etc/fuse-login
echo "ls"\ \-d\ \~\/Desktop\/\"Сетевое Окружение\"" || "ln\ \-s\ \~\/network\ \~\/Desktop\/\"Сетевое Окружение\" >> /etc/fuse-login
echo "sleep 5s" >> /etc/fuse-login
echo "ls"\ \-d\ \~\/Desktop\/\"Сетевое Окружение\"" || "ln\ \-s\ \~\/network\ \~\/Desktop\/\"Сетевое Окружение\" >> /etc/fuse-login
chmod -f 0755 /etc/fuse-login;ln -s /etc/fuse-login /etc/skel/.xsession.d/50-fuselogin
find /home/*/ -name ".xsession.d" -exec ln -s /etc/fuse-login {}/50-fuselogin \;
find /home/*/ -maxdepth 1 -name "Desktop" -exec ln -s ~/network {}/"Сетевое Окружение" \;
find /home/*/ -maxdepth 0 -exec cp -fR /etc/skel/.smb {} \;;find /home/*/ -maxdepth 0 -exec chown -fR --reference={}.Xauthority {}.smb \;
find /home/*/ -maxdepth 0 -exec chmod -fR 0600 {}.smb/fusesmb.conf \;
if [[ $LDOMAIN != "" ]];then find /home/${LDOMAIN}/*/ -maxdepth 0 -exec cp -fR /etc/skel/.smb {} \;;rm -fr /home/${LDOMAIN}/.smb
find /home/${LDOMAIN}/*/ -maxdepth 0 -exec chown -fR --reference={}.Xauthority {}.smb \;;find /home/${LDOMAIN}/*/ -maxdepth 0 -exec chmod -fR 0600 {}.smb/fusesmb.conf \;;rm -fR /home/lost+found/.smb;fi
/sbin/modprobe fuse
fi
}




# Настраиваем функцию автоматическое монтирование сетевых папок при входе пользователя в систему
function _pammount ()
{
[[ $UsePamMount == "yesno" ]] && echo "Функция автоматического монтирования сетевых папок с помошью пакета pam_mount отключена, т.к. не удалось найти и/или установить соответствующий пакет"
if [[ $UsePamMount == "yes" ]];then
ls /etc/security/pam_mount.conf.jold || cp -f /etc/security/pam_mount.conf /etc/security/pam_mount.conf.jold
echo "debug 1" > /etc/security/pam_mount.conf
[[ AutoMountPoint == "yes" ]] && AutoMountPoint=1 || AutoMountPoint=0
echo "mkmountpoint "${AutoMountPoint} >> /etc/security/pam_mount.conf
echo "options_allow	nosuid,nodev,loop,encryption,noexec" >> /etc/security/pam_mount.conf
echo "options_require	nosuid,nodev" >> /etc/security/pam_mount.conf
echo cifsmount\ \/bin\/mount\ \-t\ cifs\ \/\/\%\(SERVER\)\/\%\(VOLUME\)\ \%\(MNTPT\)\ \-o\ \"username\=\%\(USER\)\%\(before\=\\\"\,\\\"\ OPTIONS\)\" >> /etc/security/pam_mount.conf
echo "umount   "\/bin\/umount\ \%\(MNTPT\) >> /etc/security/pam_mount.conf
echo "" >> /etc/security/pam_mount.conf
[[ $Nfolder1 != ""  ]] && echo "volume * cifs "$Nfolder1" nosuid,noexec - -" >> /etc/security/pam_mount.conf
[[ $Nfolder2 != ""  ]] && echo "volume * cifs "$Nfolder2" nosuid,noexec - -" >> /etc/security/pam_mount.conf
[[ $Nfolder3 != ""  ]] && echo "volume * cifs "$Nfolder3" nosuid,noexec - -" >> /etc/security/pam_mount.conf
[[ $Nfolder4 != ""  ]] && echo "volume * cifs "$Nfolder4" nosuid,noexec - -" >> /etc/security/pam_mount.conf
[[ $Nfolder5 != ""  ]] && echo "volume * cifs "$Nfolder5" nosuid,noexec - -" >> /etc/security/pam_mount.conf
fi
}




# При вводе в рабочую группу и при использовании фунуции монтирования сетевых папок, включаем ее, если пакет pam_mount установлен.
function _wglogon ()
{
if [[ $UsePamMount == "yes" ]];then
ls /etc/pam.d/$Logonm.jold || cp -f /etc/pam.d/$Logonm /etc/pam.d/$Logonm.jold
echo "#%PAM-1.0" > /etc/pam.d/$Logonm
echo "auth                           optional       pam_mount.so" >> /etc/pam.d/$Logonm
echo "auth                           required       pam_tcb.so shadow fork prefix="\$2a\$\ "count=8 nullok use_first_pass" >> /etc/pam.d/$Logonm
echo "auth                           required       pam_nologin.so" >> /etc/pam.d/$Logonm
echo "account                        required       pam_tcb.so shadow fork" >> /etc/pam.d/$Logonm
echo "password                       required       pam_tcb.so use_authtok shadow fork prefix="\$2a\$\ "count=8 nullok write_to=tcb" >> /etc/pam.d/$Logonm
echo "session                        optional       pam_mount.so" >> /etc/pam.d/$Logonm
echo "session                        required       pam_tcb.so" >> /etc/pam.d/$Logonm
echo "session                        required       pam_limits.so" >> /etc/pam.d/$Logonm
fi
}




# Настраиваем логон-менеджер доменного ПК и включаем в него функцию монтирования сетевых папок, если она указанна и пакет pam_mount установлен.
function _dlogon ()
{
ls /etc/pam.d/$Logonm.jold || cp -f /etc/pam.d/$Logonm /etc/pam.d/$Logonm.jold
echo "#%PAM-1.0" > /etc/pam.d/$Logonm
echo "auth                           required       pam_securetty.so" >> /etc/pam.d/$Logonm
echo "auth                           required       pam_nologin.so" >> /etc/pam.d/$Logonm
echo "auth                           required       pam_group.so" >> /etc/pam.d/$Logonm
if [[ $UsePamMount == "yes" ]];then
echo "auth                           optional       pam_mount.so" >> /etc/pam.d/$Logonm
echo "auth                           sufficient     pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login use_first_pass" >> /etc/pam.d/$Logonm
else
echo "auth                           sufficient     pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login" >> /etc/pam.d/$Logonm
fi
echo "auth                           required       pam_tcb.so shadow fork prefix="\$2a\$\ "count=8 nullok use_first_pass" >> /etc/pam.d/$Logonm
echo "account                        sufficient     pam_winbind.so" >> /etc/pam.d/$Logonm
echo "account                        required       pam_tcb.so shadow fork" >> /etc/pam.d/$Logonm
echo "password                       sufficient     pam_winbind.so" >> /etc/pam.d/$Logonm
echo "password                       required       pam_tcb.so use_authtok shadow fork prefix="\$2a\$ "count=8 nullok write_to=tcb" >> /etc/pam.d/$Logonm
echo "session                        required       pam_mkhomedir.so skel=/etc/skel/ umask=0077" >> /etc/pam.d/$Logonm
if [[ $UsePamMount == "yes" ]];then
echo "session                        optional       pam_mount.so" >> /etc/pam.d/$Logonm
fi
echo "session                        required       pam_tcb.so" >> /etc/pam.d/$Logonm
echo "session                        required       pam_limits.so" >> /etc/pam.d/$Logonm
echo "session                        optional       pam_console.so" >> /etc/pam.d/$Logonm
}




# Настраиваем скринсэйвер через указанный в переменных файл
function _scren ()
{
ls /etc/pam.d/$Screens.jold || cp -f /etc/pam.d/$Screens /etc/pam.d/$Screens.jold
echo "#%PAM-1.0" > /etc/pam.d/$Screens
echo "auth     required       pam_securetty.so" >> /etc/pam.d/$Screens
echo "auth     required       pam_nologin.so" >> /etc/pam.d/$Screens
echo "auth     sufficient     pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login" >> /etc/pam.d/$Screens
echo "auth     sufficient     pam_tcb.so shadow fork prefix="\$2a\$\ "count=8 nullok use_first_pass" >> /etc/pam.d/$Screens
echo "password required       pam_deny.so" >> /etc/pam.d/$Screens
}




# Собственно пробуем ввести компьютер в домен
function _indomain ()
{
sed '/\<domainNO\>/d' ${Confi} > ${Confi}".j";cat ${Confi}".j" > ${Confi} && rm -f ${Confi}".j"
if net ads join -U $Aname >/dev/null 2>&1;then echo domainON >> ${Confi}; echo "Ввод в домен выполнен успешно!"
echo ""
echo "Для правильной работы компьютера в качестве члена домена, необходимо перезагрузить компьютер. Вы желаете перезагрузить сейчас? (y/n)"
read ans
case $ans in
     Y|y) /sbin/reboot;exit;;
      *) _Unset;exit ;;
esac
fi
sed '/\<domainON\>/d' ${Confi} > ${Confi}".j";cat ${Confi}".j" > ${Confi} && rm -f ${Confi}".j" 
echo domainNO >> ${Confi};echo "Ввод в домен не выполнен, проверьте доступность контроллера домена. Для повтора последней стадии ввода запустите скритп еще раз."
_Unset;exit
}




# Изменяем оболочку логин-менеджера при вводе компьютера в домен
function _login ()
{
if [[ $UseDomainLogin == yes ]];then
if ls /etc/X11/gdm/custom.conf >/dev/null 2>&1;then cp -f /etc/X11/gdm/custom.conf /etc/X11/gdm/custom.conf.jold
echo "[daemon]" > /etc/X11/gdm/custom.conf
echo "LogDir=/var/log/gdm" >> /etc/X11/gdm/custom.conf
echo "SessionDesktopDir=/etc/X11/sessions/" >> /etc/X11/gdm/custom.conf
echo "Greeter=/usr/lib/gdm/gdmgreeter" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "[security]" >> /etc/X11/gdm/custom.conf
echo "AllowRoot=false" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "RetryDelay=3" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "[xdmcp]" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "[gui]" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "AllowGtkThemeChange=false" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "[greeter]" >> /etc/X11/gdm/custom.conf
echo "TitleBar=false" >> /etc/X11/gdm/custom.conf
echo "GlobalFaceDir=/usr/share/design-current/faces/" >> /etc/X11/gdm/custom.conf
echo "DefaultFace=/usr/share/design-current/faces/default.png" >> /etc/X11/gdm/custom.conf
echo "Logo=/usr/share/design/desktop/icons/large/altlinux.png" >> /etc/X11/gdm/custom.conf
echo "MinimalUID=500" >> /etc/X11/gdm/custom.conf
echo "LockPosition=true" >> /etc/X11/gdm/custom.conf
echo "BackgroundColor=#666699" >> /etc/X11/gdm/custom.conf
echo "ShowGnomeFailsafeSession=false" >> /etc/X11/gdm/custom.conf
echo "ShowXtermFailsafeSession=false" >> /etc/X11/gdm/custom.conf
echo "Use24Clock=true" >> /etc/X11/gdm/custom.conf
echo "GraphicalTheme=happygnome" >> /etc/X11/gdm/custom.conf
echo "GraphicalThemes=happygnome" >> /etc/X11/gdm/custom.conf
echo "IncludeAll=true" >> /etc/X11/gdm/custom.conf
echo "Browser=true" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "SoundOnLogin=false" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "DefaultWelcome=false" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "Welcome=Добро пожаловать в домен "$FDOMAIN >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "SystemMenu=false" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "[chooser]" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "[debug]" >> /etc/X11/gdm/custom.conf
echo "" >> /etc/X11/gdm/custom.conf
echo "[servers]" >> /etc/X11/gdm/custom.conf
fi
if ls /etc/X11/kdm/kdmrc >/dev/null 2>&1;then cp -f /etc/X11/kdm/kdmrc /etc/X11/kdm/kdmrc.jold
echo "[General]" > /etc/X11/kdm/kdmrc
echo "AuthDir=/var/run/xauth" >> /etc/X11/kdm/kdmrc
echo "AutoRescan=true" >> /etc/X11/kdm/kdmrc
echo "ConfigVersion=2.3" >> /etc/X11/kdm/kdmrc
echo "ConsoleTTYs=tty1,tty2,tty3,tty4,tty5,tty6" >> /etc/X11/kdm/kdmrc
echo "DataDir=/var/lib/kdm" >> /etc/X11/kdm/kdmrc
echo "FifoDir=/var/run/xdmctl" >> /etc/X11/kdm/kdmrc
echo "FifoGroup=0" >> /etc/X11/kdm/kdmrc
echo "LockPidFile=true" >> /etc/X11/kdm/kdmrc
echo "PidFile=/var/run/xdm.pid" >> /etc/X11/kdm/kdmrc
echo "RandomDevice=/dev/urandom" >> /etc/X11/kdm/kdmrc
echo "ReserveServers=:1,:2,:3" >> /etc/X11/kdm/kdmrc
echo "ServerVTs=-7" >> /etc/X11/kdm/kdmrc
echo "StaticServers=:0" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo "[Shutdown]" >> /etc/X11/kdm/kdmrc
echo "BootManager=None" >> /etc/X11/kdm/kdmrc
echo "HaltCmd=/sbin/poweroff" >> /etc/X11/kdm/kdmrc
echo "RebootCmd=/sbin/reboot" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo \[X\-\*\-Core\] >> /etc/X11/kdm/kdmrc
echo "AllowNullPasswd=true" >> /etc/X11/kdm/kdmrc
echo "AllowRootLogin=false" >> /etc/X11/kdm/kdmrc
echo "AllowSdForceNow=Root" >> /etc/X11/kdm/kdmrc
echo "AllowShutdown=None" >> /etc/X11/kdm/kdmrc
echo "AutoReLogin=false" >> /etc/X11/kdm/kdmrc
echo ClientLogFile\=\.xsession\-errors\%s >> /etc/X11/kdm/kdmrc
echo "DefaultSdMode=Schedule" >> /etc/X11/kdm/kdmrc
echo "OpenRepeat=20" >> /etc/X11/kdm/kdmrc
echo "OpenTimeout=240" >> /etc/X11/kdm/kdmrc
echo "Reset=/etc/X11/kdm/Xreset" >> /etc/X11/kdm/kdmrc
echo "Resources=/etc/X11/xdm/Xresources" >> /etc/X11/kdm/kdmrc
echo "ScheduledSd=Optional" >> /etc/X11/kdm/kdmrc
echo "Session=/etc/X11/Xsession" >> /etc/X11/kdm/kdmrc
echo "Setup=/etc/X11/kdm/Xsetup_0" >> /etc/X11/kdm/kdmrc
echo "Startup=/etc/X11/kdm/Xstartup" >> /etc/X11/kdm/kdmrc
echo "TerminateServer=true" >> /etc/X11/kdm/kdmrc
echo "UseSessReg=false" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo \[X\-\*\-Greeter\] >> /etc/X11/kdm/kdmrc
echo "AllowClose=true" >> /etc/X11/kdm/kdmrc
echo "AllowConsole=true" >> /etc/X11/kdm/kdmrc
echo "AntiAliasing=true" >> /etc/X11/kdm/kdmrc
echo "BackgroundCfg=/etc/X11/kdm/backgroundrc" >> /etc/X11/kdm/kdmrc
echo "ColorScheme=ALT Linux Desktop" >> /etc/X11/kdm/kdmrc
echo "EchoMode=OneStar" >> /etc/X11/kdm/kdmrc
echo "FaceDir=/var/lib/kdm/faces" >> /etc/X11/kdm/kdmrc
echo "FaceSource=PreferAdmin" >> /etc/X11/kdm/kdmrc
echo "FailFont=Sans Serif,10,-1,5,75,0,0,0,0,0" >> /etc/X11/kdm/kdmrc
echo "FocusPasswd=true" >> /etc/X11/kdm/kdmrc
echo "GUIStyle=Plastik" >> /etc/X11/kdm/kdmrc
echo "GrabServer=false" >> /etc/X11/kdm/kdmrc
echo "GreetFont=Serif,20,-1,5,50,0,0,0,0,0" >> /etc/X11/kdm/kdmrc
echo "GreetString=Добро пожаловать в домен "$FDOMAIN >> /etc/X11/kdm/kdmrc
echo "GreeterPos=50,50" >> /etc/X11/kdm/kdmrc
echo "HiddenUsers=root" >> /etc/X11/kdm/kdmrc
echo "Language=ru" >> /etc/X11/kdm/kdmrc
echo "LogoArea=Clock" >> /etc/X11/kdm/kdmrc
echo "LogoPixmap=/usr/share/design-current/kde/kdm-logo.png" >> /etc/X11/kdm/kdmrc
echo "MaxShowUID=32000" >> /etc/X11/kdm/kdmrc
echo "MinShowUID=500" >> /etc/X11/kdm/kdmrc
echo "NumLock=Keep" >> /etc/X11/kdm/kdmrc
echo "Preloader=/usr/bin/preloadkde" >> /etc/X11/kdm/kdmrc
echo "PreselectUser=Previous" >> /etc/X11/kdm/kdmrc
echo "SelectedUsers=" >> /etc/X11/kdm/kdmrc
echo "ShowUsers=NotHidden" >> /etc/X11/kdm/kdmrc
echo "SortUsers=true" >> /etc/X11/kdm/kdmrc
echo "StdFont=Sans Serif,10,-1,5,50,0,0,0,0,0" >> /etc/X11/kdm/kdmrc
echo "Theme=/usr/share/apps/kdm/themes/circles/" >> /etc/X11/kdm/kdmrc
echo "UseBackground=true" >> /etc/X11/kdm/kdmrc
echo "UseTheme=false" >> /etc/X11/kdm/kdmrc
echo "UserCompletion=false" >> /etc/X11/kdm/kdmrc
echo "UserList=false" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo \[X\-\:\*\-Core\] >> /etc/X11/kdm/kdmrc
echo "AllowNullPasswd=true" >> /etc/X11/kdm/kdmrc
echo "AllowRootLogin=false" >> /etc/X11/kdm/kdmrc
echo "AllowShutdown=All" >> /etc/X11/kdm/kdmrc
echo "NoPassEnable=false" >> /etc/X11/kdm/kdmrc
echo "NoPassUsers=" >> /etc/X11/kdm/kdmrc
echo "ServerArgsLocal=" >> /etc/X11/kdm/kdmrc
echo "ServerAttempts=3" >> /etc/X11/kdm/kdmrc
echo "ServerCmd=/etc/X11/xinit/xserverrc" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo \[X\-\:\*\-Greeter\] >> /etc/X11/kdm/kdmrc
echo "AllowClose=true" >> /etc/X11/kdm/kdmrc
echo "DefaultUser=alexandr" >> /etc/X11/kdm/kdmrc
echo "FocusPasswd=true" >> /etc/X11/kdm/kdmrc
echo "LoginMode=DefaultLocal" >> /etc/X11/kdm/kdmrc
echo "PreselectUser=Previous" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo \[X\-\:0\-Core\] >> /etc/X11/kdm/kdmrc
echo "Authorize=true" >> /etc/X11/kdm/kdmrc
echo "AutoLoginAgain=false" >> /etc/X11/kdm/kdmrc
echo "AutoLoginDelay=0" >> /etc/X11/kdm/kdmrc
echo "AutoLoginEnable=false" >> /etc/X11/kdm/kdmrc
echo "AutoLoginLocked=false" >> /etc/X11/kdm/kdmrc
echo "AutoLoginUser=alexandr" >> /etc/X11/kdm/kdmrc
echo ClientLogFile\=\.xsession\-errors\%s >> /etc/X11/kdm/kdmrc
echo "StartAttempts=3" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo \[X\-\:0\-Greeter\] >> /etc/X11/kdm/kdmrc
echo "LogSource=/dev/xconsole" >> /etc/X11/kdm/kdmrc
echo "ShowLog=false" >> /etc/X11/kdm/kdmrc
echo "UseBackground=true" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo \[X\-\:1\-Core\] >> /etc/X11/kdm/kdmrc
echo "Authorize=true" >> /etc/X11/kdm/kdmrc
echo "" >> /etc/X11/kdm/kdmrc
echo "[Xdmcp]" >> /etc/X11/kdm/kdmrc
echo "Enable=false" >> /etc/X11/kdm/kdmrc
echo "KeyFile=/etc/X11/xdm/xdm-keys" >> /etc/X11/kdm/kdmrc
echo "Port=177" >> /etc/X11/kdm/kdmrc
echo "Willing=/etc/X11/kdm/Xwilling" >> /etc/X11/kdm/kdmrc
echo "Xaccess=/etc/X11/xdm/Xaccess" >> /etc/X11/kdm/kdmrc
fi;fi
}




# Убераем переменные
function _Unset ()
{
unset Fuseuser;unset Fusepasswd;unset UsePamMount;unset AutoMountPoint;unset Nfolder1;unset Nfolder2;unset Nfolder3;unset Nfolder4
unset Nfolder5;unset Confi;unset Dcontrol;unset Fdomain;unset FDOMAIN;unset Aname;unset WGNAME;unset Compname;unset Inst
unset Logonm;unset Screens;unset Wron;unset Pm;unset Osl;unset ans;unset UseDomainLogin
}




if [[ $UID != "0" ]];then echo "Необходимо запускать скрипт с привелегиями пользователя root";exit;fi
Wron="Вы неправильно задали параметры. Выполните скрипт с параметром --help, чтобы узнать подробнее."
Confi=/etc/join_samba.conf
WGNAME=0
Fdomain=0

case $1 in
   --help) _help;_Unset;exit;;
   -r) Aname=$2;_restore;_Unset;exit;;
   -c) echo >/dev/null;;
   "") _help;_Unset;exit;;
   *) echo $Wron;_Unset;exit;;
esac
case $2 in
   --help) echo $Wron;_Unset;exit;;
   -r) echo $Wron;_Unset;exit;;
   -d) echo $Wron;_Unset;exit;;
   -wg) echo $Wron;_Unset;exit;;
   -c) echo $Wron;_Unset;exit;;
   "") echo $Wron;_Unset;exit;;
esac
case $3 in
   -wg) echo >/dev/null;;
   -d) echo >/dev/null;;
   *) echo $Wron;_Unset;exit;;
esac
case $4 in
   --help) echo $Wron;_Unset;exit;;
   -r) echo $Wron;_Unset;exit;;
   -d) echo $Wron;_Unset;exit;;
   -wg) echo $Wron;_Unset;exit;;
   -c) echo $Wron;_Unset;exit;;
   "") echo $Wron;_Unset;exit;;
esac




# Включение в домен.
if [[ $3 == "-d" ]];then
if [[ $5 == "" ]];then echo "Вы не указали имя администратора домена. Выполнение скрипта будет остановленно.";_Unset;exit;fi
Compname=$2
Fdomain=$4
Aname=$5
grep domainNO ${Confi} && _indomain
_configure
_join_domain
_shareprint
_sharefolder
_fusesmb
_pammount
ls /etc/pam.d/kde && (Logonm=kde;_dlogon)
ls /etc/pam.d/gdm && (Logonm=gdm;_dlogon)
ls /etc/pam.d/kscreensaver && (Screens=kscreensaver;_scren)
ls /etc/pam.d/gnome-screensaver && (Screens=gnome-screensaver;_scren)
ls /etc/pam.d/xscreensaver && (Screens=xscreensaver;_scren)
_login
/sbin/chkconfig winbind on;/sbin/chkconfig smb on;/sbin/chkconfig ntpd on
/sbin/service winbind restart;/sbin/service smb restart;/sbin/service ntpd restart;/sbin/service network restart
sleep 10s;_indomain
fi

# Включение в рабочую группу
if [[ $3 == "-wg" ]];then
Compname=$2
WGNAME=$4
_configure
_join_wg
_shareprint
_sharefolder
_fusesmb
_pammount
if ls /etc/pam.d/kde  >/dev/null 2>&1;then Logonm=kde;_wglogon;fi
if ls /etc/pam.d/gdm  >/dev/null 2>&1;then Logonm=gdm;_wglogon;fi
/sbin/chkconfig smb on;/sbin/service smb restart;/sbin/service network restart
echo "Чтобы заработало сетевое окружение, необходимо чтобы пользователь вышел и снова вошел в систему"
_Unset;exit
fi

exit

Скрипт носит статус BETA. Хотя у меня с ним проблем небыло, значит и вас быть не должно:) По мере нахождения ошибок и недоработок, я вносить в скритп изменения.