Участник: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. Имя администратора нужно указывать без имени домена, например: Администратор

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

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




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




# Настраиваем, меняем имя компьютера и настраиваем самбу на ввод в рабочую группу
function _join_wg ()
{
Pm="no";Osl="0"
[[ -f /etc/samba/smb.conf.jold ]] || cp -f /etc/samba/smb.conf /etc/samba/smb.conf.jold  &> /dev/null
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
# Редактируем конфигурационный файл /etc/samba/smb.conf
/sbin/service smb restart &> /dev/null;sleep 2s
echo -n "   > Проверка сервера SAMBA..."
if /sbin/service smb status | grep "running" &> /dev/null;then echo " Выполнена."
# Ищем обозреватель указанной рабочей группы. В случае неудачи - включаем функцию обозревателя сети.
echo -n "   > Поиск главного обозревателя сети для рабочей группы $WGNAME..."
if nmblookup -SA `nmblookup -M -- - | cut -d" " -f1 | sed '/querying/d'` | grep -iw -E "<01>|$WGNAME" | grep "<00>"  &> /dev/null;then echo " Выполнено."
else echo " Неудача.";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 " Неудача.";echo "   ! Не удалось осуществить тестовый запуск сервера SAMBA, дальнейшая работа скрипта невозможна";_restore;_Unset;exit;fi
/sbin/service smb stop &> /dev/null
# Прописываем имя компьютера в файлы /etc/hosts /etc/HOSTNAME и /etc/sysconfig/network сохраняем резервные копии оригиналов.
[[ -f /etc/hosts.jold ]] || cp -f /etc/hosts /etc/hosts.jold  &> /dev/null
echo 127.0.0.1\ \ $Compname\ localhost > /etc/hosts
[[ -f /etc/HOSTNAME.jold ]] || cp -f /etc/HOSTNAME /etc/HOSTNAME.jold  &> /dev/null
echo $Compname > /etc/HOSTNAME
[[ -f /etc/sysconfig/network.jold ]] || cp -f /etc/sysconfig/network /etc/sysconfig/network.jold  &> /dev/null
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 &> /dev/null
}




# Обновляем файлы конфигурации и вводим машину в домен
function _join_domain ()
{
# Прописываем имя компьютера в файлы /etc/hosts /etc/HOSTNAME и /etc/sysconfig/network сохраняем резервные копии оригиналов.
[[ -f /etc/hosts.jold ]] || cp -f /etc/hosts /etc/hosts.jold &> /dev/null
echo 127.0.0.1  $Compname\.$Fdomain localhost $Compname > /etc/hosts
[[ -f /etc/HOSTNAME.jold ]] || cp -f /etc/HOSTNAME /etc/HOSTNAME.jold &> /dev/null
echo $Compname > /etc/HOSTNAME
[[ -f /etc/sysconfig/network.jold ]] || cp -f /etc/sysconfig/network /etc/sysconfig/network.jold &> /dev/null
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
# Прописываем сервер времени и синхронизируем время с контроллером домена.
echo -n "   > Настраиваем синхронизацию времени с контроллером домена..."
[[ -f /etc/ntpd.conf.jold ]] || cp -f /etc/ntpd.conf /etc/ntpd.conf.jold &> /dev/null
echo servers\ $Dcontrol > /etc/ntpd.conf
/sbin/service ntpd stop &> /dev/null;/sbin/service ntpd start &> /dev/null && echo " Выполнено." || echo " Неудача."
# Настраиваем файл /etc/krb5.conf
[[ -f /etc/krb5.conf.jold ]] || cp -f /etc/krb5.conf /etc/krb5.conf.jold &> /dev/null
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 сохраняя резервную копию оригинала.
[[ -f /etc/samba/smb.conf.jold ]] || cp -f /etc/samba/smb.conf /etc/samba/smb.conf.jold &> /dev/null
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 \ \ \ \ \ \ \ \ "idmap backend = rid" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "winbind uid = 1000-10000" >> /etc/samba/smb.conf
echo \ \ \ \ \ \ \ \ "winbind gid = 1000-10000" >> /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
echo -n "   > Проверка сервера SAMBA...";/sbin/service smb stop &> /dev/null;/sbin/service smb start &> /dev/null && echo " Выполнено." || echo " Неудача."
/sbin/service smb stop &> /dev/null
#Приводим к соответствующему виду файл /etc/nsswitch.conf
[[ -f /etc/nsswitch.conf.jold ]] || cp -f /etc/nsswitch.conf /etc/nsswitch.conf.jold &> /dev/null
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
[[ -f /etc/security/group.conf.jold ]] || cp -f /etc/security/group.conf /etc/security/group.conf.jold &> /dev/null
echo \*\;\*\;\*\;Al0000\-2400\;$DomainGroups > /etc/security/group.conf
}




# Настраиваем гостевой доступ к сетевым принтерам
function _shareprint ()
{
if [[ $UsePrintGuest == yes ]];then echo -n "   > Настройка гостевого доступа к принтеру..."
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
[[ -f /etc/cups/cupsd.conf.jold ]] || cp -f /etc/cups/cupsd.conf /etc/cups/cupsd.conf.jold &> /dev/null
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 &> /dev/null
/sbin/service cups stop &> /dev/null;/sbin/service cups start &> /dev/null && echo " Выполнено." || echo " Неудача."
fi
}




# Настраиваем гостевой доступ к указанной сетевой папке а так же создаем ее в случае отсутствия
function _sharefolder ()
{
if [[ $UseSharedFolder != "" ]]
then echo -n "   > Создание общей сетевой папки с гостевым доступом..."
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 &> /dev/null && chmod -fR 0777 $UseSharedFolder &> /dev/null && echo " Выполнено." || echo " Неудача."
fi
}




# Настраиваем сетевое окружение с помощью пакета fuse-smb если данная функция включена и установлен пакет fuse-smb
function _fusesmb ()
{
if [[ $UseFuseSMB == "yes" ]];then echo -n "   > Настройка пакета fuse-smb..."
mkdir -p /etc/skel/.smb &> /dev/null
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 &> /dev/null
[[ -f /etc/modules.jold ]] || cp -f /etc/modules /etc/modules.jold &> /dev/null
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 &> /dev/null;ln -s /etc/fuse-login /etc/skel/.xsession.d/50-fuselogin &> /dev/null
find /home/*/ -name ".xsession.d" -exec ln -s /etc/fuse-login {}/50-fuselogin \; &> /dev/null
find /home/*/ -maxdepth 1 -name "Desktop" -exec ln -s ~/network {}/"Сеть" \; &> /dev/null
find /home/*/ -maxdepth 0 -exec cp -fR /etc/skel/.smb {} \;;find /home/*/ -maxdepth 0 -exec chown -fR --reference={}.Xauthority {}.smb \; &> /dev/null
find /home/*/ -maxdepth 0 -exec chmod -fR 0600 {}.smb/fusesmb.conf \; &> /dev/null
if [[ $LDOMAIN != "" ]];then find /home/${LDOMAIN}/*/ -maxdepth 0 -exec cp -fR /etc/skel/.smb {} \; &> /dev/null;rm -fr /home/${LDOMAIN}/.smb &> /dev/null
find /home/${LDOMAIN}/*/ -maxdepth 0 -exec chown -fR --reference={}.Xauthority {}.smb \; &> /dev/null;find /home/${LDOMAIN}/*/ -maxdepth 0 -exec chmod -fR 0600 {}.smb/fusesmb.conf \; &> /dev/null;rm -fR /home/lost+found/.smb &> /dev/null;fi
/sbin/modprobe fuse &> /dev/null && echo " Выполнено." || echo " Неудача."
fi
}




# Настраиваем функцию автоматического монтирования сетевых папок при входе пользователя в систему
function _pammount ()
{
if [[ $UsePamMount == "yes" ]];then echo -n "   > Настройка пакета pam_mount..."
[[ -f /etc/security/pam_mount.conf.jold ]] || cp -f /etc/security/pam_mount.conf /etc/security/pam_mount.conf.jold &> /dev/null
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
echo " Выполнено."
fi
}




# При вводе в рабочую группу и при использовании фунуции монтирования сетевых папок, включаем ее, если пакет pam_mount установлен.
function _wglogon ()
{
if [[ $UsePamMount == "yes" ]];then
[[ -f /etc/pam.d/$Logonm.jold ]] || cp -f /etc/pam.d/$Logonm /etc/pam.d/$Logonm.jold &> /dev/null
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 ()
{
[[ -f /etc/pam.d/$Logonm.jold ]] || cp -f /etc/pam.d/$Logonm /etc/pam.d/$Logonm.jold &> /dev/null
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 ()
{
[[ -f /etc/pam.d/$Screens.jold ]] || cp -f /etc/pam.d/$Screens /etc/pam.d/$Screens.jold &> /dev/null
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 ()
{
echo "";echo -n "   > Производится попытка ввода компьютера в домен. Введите пароль администратора - "
sed '/\<domainNO\>/d' ${Confi} > ${Confi}".j";cat ${Confi}".j" > ${Confi} && rm -f ${Confi}".j" &> /dev/null
if net ads join -U $Aname &> /dev/null;then echo domainON >> ${Confi}; echo "   ! Ввод в домен выполнен."
echo -n "   ! Для правильной работы компьютера в качестве члена домена, необходимо перезагрузить компьютер. Вы желаете перезагрузить сейчас? (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" &> /dev/null
echo domainNO >> ${Confi};echo "   ! Ввод в домен не выполнен, проверьте доступность контроллера домена и правильность ввода пароля.";echo "   ! Для повтора ввода пароля, запустите скрипт еще раз."
_Unset;exit
}




# Изменяем оболочку логин-менеджера при вводе компьютера в домен
function _login ()
{
if [[ $UseDomainLogin == yes ]];then
echo -n "   > Изменение внешнего вида логон-менеджера..."
if [[ -f /etc/X11/gdm/custom.conf ]];then cp -f /etc/X11/gdm/custom.conf /etc/X11/gdm/custom.conf.jold &> /dev/null
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 [[ -f /etc/X11/kdm/kdmrc ]];then cp -f /etc/X11/kdm/kdmrc /etc/X11/kdm/kdmrc.jold &> /dev/null
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;echo " Выполнено.";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 "";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} &> /dev/null && _indomain
_configure
_join_domain
_shareprint
_sharefolder
_fusesmb
_pammount
[[ -f /etc/pam.d/kde ]] && (Logonm=kde;_dlogon)
[[ -f /etc/pam.d/gdm ]] && (Logonm=gdm;_dlogon)
[[ -f /etc/pam.d/kscreensaver ]] && (Screens=kscreensaver;_scren)
[[ -f /etc/pam.d/gnome-screensaver ]] && (Screens=gnome-screensaver;_scren)
[[ -f /etc/pam.d/xscreensaver ]] && (Screens=xscreensaver;_scren)
_login
/sbin/chkconfig winbind on &> /dev/null;/sbin/chkconfig smb on &> /dev/null;/sbin/chkconfig ntpd on &> /dev/null;/sbin/chkconfig sshd on &> /dev/null
/sbin/service winbind restart &> /dev/null;/sbin/service smb restart &> /dev/null;/sbin/service ntpd restart &> /dev/null;/sbin/service sshd restart &> /dev/null
sleep 2s;_indomain
fi

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

Совсем недавно обновил версию скрипта. Теперь скрипт находит контроллер домена, даже если у ДНС сервера не настроена зона обратного просмотра. Так же поправил некоторые баги и убрал все левые сообщения от скрипта. Теперь все чисто и красиво. Скрипт все еще носит статус BETA. Все пожелания и предложения жду на мыло: alexandr@vladot.ru