Участник:Alexandr/altinlan.script
Скрипт для настройки рабочей станции на работу в домене или в рабочей группе
Приложение к статье 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