|
|
Строка 1: |
Строка 1: |
− | =Порядок развёртывания на Альт Стартеркит MATE=
| + | Устанавливаем нужные пакеты task-samba-dc admc |
| | | |
− | ==Подготовка и установка необходимых пакетов==
| + | Для создания домена Active Directory (далее - AD), настраиваем на сервере статический ip-address и выставляем ДНС сервером себя 127.0.0.1. Далее в центре управления системой (https://localhost:8080) в разделе домен указываем "Имя домена" и выбираем "Тип домена" заполняем поля в дополнительных параметрах, нажимаем "применить". |
| | | |
− | После обновления системы и ядра... | + | При правильном заполнении полей, а также при наличии всех нужных пакетов, "Текущее состояние" - будет заполнено. После этого можно перезагрузить сервер. |
| | | |
− | Выставляем часовой пояс и синхронизируем время
| |
| | | |
− | timedatectl set-timezone Europe/Moscow
| + | Для того что бы пользоваться ADMC нужно произвести авторизацию в Kerberos командой kinit <имя пользователя> по умолчанию пользователь "Administrator" |
− | ntpdate pool.ntp.org
| + | Если возникает ошибка - Откройте от имени суперпользователя файл /etc/krb5.conf. |
| | | |
− | Отключаем сервисы и устанавливаем необходимые пакеты
| + | Проверяем что установлено значение false в строке "dns_lookup_realm = false". |
| | | |
− | <pre>
| + | Раскомментируйте строку в [libdefaults] "default realm" и введите название области заглавными буквами. |
− | for service in smb nmb; do systemctl disable $service; systemctl stop $service; done
| |
− | apt-get install -y task-samba-dc admc
| |
− | </pre>
| |
| | | |
− | ==Подготовка конфигурационных файлов ситемы==
| + | Ниже, под строкой [realms] вместо EXAMPLE.COM введите название области, а вместо example.com в "default domain" введите IP-адрес сервера. |
| | | |
− | Задаём имя хоста
| + | Под строкой [domain_realm] example.com и EXAMPLE.COM замените на ваш домен сохраняя регистр. |
| | | |
− | hostnamectl set-hostname dc.domain.alt
| |
| | | |
− | Также проверить и при необходимости поправить имя хоста в файле
| + | На клиенте устанавливаем пакет для наследования групповых политик alterator-gpudate |
| + | Ставим статику и прописываем DNS - адрес сервера AD |
| | | |
− | /etc/sysconfig/network
| + | Ввод в домен можно осуществить в разделе Аутентификация |
| | | |
− | Перезагрузиться для проверки
| + | Выбрать пункт «Домен Active Directory», заполнить поля и нажать кнопку «Применить» |
| | | |
− | reboot
| + | В открывшемся окне необходимо ввести имя пользователя, имеющего право вводить машины в домен, и его пароль и нажать кнопку «ОК» |
− | | |
− | Далее настраиваем 127.0.0.1 в качестве DNS сервера системы (далее в команде создания домена мы добавим возможность для этого DNS сервера делать запросы к внешним DNS серверам)
| |
− | | |
− | <pre>
| |
− | cat << EOF > /etc/resolv.conf
| |
− | # Generated by resolvconf
| |
− | # Do not edit manually, use
| |
− | # /etc/net/ifaces/<interface>/resolv.conf instead.
| |
− | search alt
| |
− | nameserver 127.0.0.1
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | Здесь приведена команда конфигурирования файла /etc/hosts, исходя из того, что у настраиваемого сервера локальный IP-адрес: 192.168.0.249
| |
− | | |
− | <pre>
| |
− | cat << EOF > /etc/hosts
| |
− | 192.168.0.249 dc.domain.alt domain.alt
| |
− | 127.0.0.1 localhost
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | ==Создание домена одной командой==
| |
− | | |
− | Перед выполнением команды создания домена нужно удалить конфигурационный файл:
| |
− | | |
− | /bin/rm -rf /etc/samba/smb.conf /var/lib/samba /var/cache/samba
| |
− | mkdir -p /var/lib/samba/sysvol
| |
− | | |
− | Для домена
| |
− | | |
− | domain.alt
| |
− | | |
− | с паролем
| |
− | | |
− | Pa$$word
| |
− | | |
− | и адресом внешнего DNS сервера
| |
− | | |
− | 8.8.8.8
| |
− | | |
− | команда создания домена будет такой:
| |
− | | |
− | samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL --server-role=dc --option="dns forwarder=8.8.8.8"
| |
− | | |
− | ==Включение сервиса и проверка работы домена==
| |
− | | |
− | Включение
| |
− | | |
− | systemctl enable --now samba
| |
− | | |
− | Проверка
| |
− | | |
− | samba-tool domain info 127.0.0.1
| |
− | | |
− | В ответ должно прилететь что-то типа этого: | |
− | | |
− | <pre>
| |
− | Forest : domain.alt
| |
− | Domain : domain.alt
| |
− | Netbios domain : DOMAIN
| |
− | DC name : dc.domain.alt
| |
− | DC netbios name : DC
| |
− | Server site : Default-First-Site-Name
| |
− | Client site : Default-First-Site-Name
| |
− | </pre>
| |
− | | |
− | ==Настройка Kerberos==
| |
− | | |
− | /bin/cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
| |
− | | |
− | | |
− | ==Управление пользователями из командной строки==
| |
− | | |
− | ===Создать пользователя с паролем===
| |
− | | |
− | Например, создаём пользователя ivanov_ivan
| |
− | | |
− | samba-tool user create ivanov_ivan
| |
− | | |
− | Устанавливаем срок действия пароля
| |
− | | |
− | samba-tool user setexpiry ivanov_ivan
| |
− | | |
− | Создаём пользователя с указанием полного имени, адреса электронной почты и пароль будет действовать всегда
| |
− | | |
− | samba-tool user create ivanov_ivan --given-name='Иванов Иван' --mail-address='ivanovi@mail.ru'
| |
− | samba-tool user setexpiry ivanov_ivan --noexpiry
| |
− | | |
− | ===Удалить пользователя===
| |
− | | |
− | samba-tool user delete ivanov_ivan
| |
− | | |
− | ===Отключить пользователя===
| |
− | | |
− | samba-tool user disable ivanov_ivan
| |
− | | |
− | ===Включить пользователя===
| |
− | | |
− | samba-tool user enable ivanov_ivan
| |
− | | |
− | ===Изменить пароль пользователя===
| |
− | | |
− | samba-tool user setpassword ivanov_ivan
| |
− | | |
− | ===Просмотреть доступных пользователей===
| |
− | | |
− | samba-tool user list
| |
− | | |
− | ===Просмотр информации о пользователе===
| |
− | | |
− | samba-tool user show ivanov_ivan
| |
− | | |
− | или, чтобы узнать UID и GID (например, для установки владельца на каталог samba)
| |
− | | |
− | wbinfo -i ivanov_ivan
| |
− | | |
− | в ответ должно прийти что-то типа
| |
− | | |
− | DOMAIN\ivanov_ivan:*:3000023:100::/home/DOMAIN.ALT/ivanov_ivan:/bin/bash
| |
− | | |
− | где UID это 3000023 а GID это 100
| |
− | | |
− | ===Создание домашнего каталога для пользователя===
| |
− | | |
− | Пока вручную. Ведётся работа над интеграцией соответствующего скрипта в процесс добавления пользователя в SAMBA
| |
− | | |
− | Перед выполнением команд добавления домашнего каталога на основе /etc/skel конкретно в контексте этой статьи нужно добавить в /etc/skel каталог, который позже буде монтироваться каждому пользователю посредством pam_mount. Для этого нужно выполнить команду
| |
− | | |
− | mkdir /etc/skel/share
| |
− | | |
− | далее на базе скелетона создаём каталог
| |
− | | |
− | cp -rp /etc/skel /home/DOMAIN.ALT/ivanov_ivan
| |
− | | |
− | потом меняем пользователя владельца и группу владельца на этот каталог на базе информации из wbinfo (пример команды -- выше)
| |
− | | |
− | chown 3000023:100 /home/DOMAIN.ALT/ivanov_ivan -R
| |
− | | |
− | ===Создание домашнего каталога для пользователя при первом входе===
| |
− | | |
− | В контексте этой статьи это решается запуском скрипта через параметр
| |
− | | |
− | root preexec = /usr/local/samba/bin/create_homedir %U
| |
− | | |
− | , добавленный к ресурсу
| |
− | | |
− | [share]
| |
− | | |
− | Задача, которую решает этот скрипт -- создание домашних каталогов для доменных пользователей на основе скелетона /etc/skel. В будущем это будет нужно для монтирования каталогов на клиентских машинах посредством pam_mount.
| |
− | | |
− | Полный конфиг ресурса
| |
− | | |
− | <pre>
| |
− | [share]
| |
− | path = /home/DOMAIN.ALT/%U/share
| |
− | root preexec = /usr/local/samba/bin/create_homedir %U
| |
− | read only = No
| |
− | browseable = yes
| |
− | writable = yes
| |
− | valid users = "@DOMAIN\Domain Users" "@DOMAIN\Domain Admins"
| |
− | </pre>
| |
− | | |
− | Параметр указывает на выполнение скрипта, параметром в который прилетает имя пользователя. Создаём скрипт
| |
− | | |
− | mkdir -p /usr/local/samba/bin/
| |
− | | |
− | <pre>
| |
− | cat << 'EOF' > /usr/local/samba/bin/create_homedir
| |
− | #!/bin/bash
| |
− | [ -z ${1} ] && echo "Try: $0 <username>" && exit 1
| |
− | user="${1}"
| |
− | homepath="/home/DOMAIN.ALT/${user}"
| |
− | [ -d ${homepath} ] || /bin/cp -rp /etc/skel ${homepath}
| |
− | [ -d ${homepath} ] && /bin/chown `wbinfo -i ${user} | awk -F ':' {'print $3 ":" $4'}` ${homepath} -R
| |
− | exit 0
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | chmod +x /usr/local/samba/bin/create_homedir
| |
− | | |
− | mkdir /home/DOMAIN.ALT
| |
− | | |
− | Теперь при обращении пользователя к ресурсу [share] от суперпользователя будет запускаться скрипт, который:
| |
− | | |
− | 1. Создаёт домашний каталог на основе /etc/skel (создаёт, только, если каталога несуществует)
| |
− | | |
− | 2. Обновляет пользователя-владельца и группу-владельца для созданного каталога. UID пользователя-владельца и GID группы-владельца скрипт получает из команды (обновляет, только если каталог существует)
| |
− | wbinfo -i ${user} | awk -F ':' {'print $3 ":" $4'}
| |
− | | |
− | ==Запуск ADMC==
| |
− | | |
− | Для корректной работы приложения ADMC необходимо получить билет Kerberos командой
| |
− | | |
− | kinit Administrator
| |
− | | |
− | В ответ необходимо ввести пароль от доменного администратора
| |
− | | |
− | | |
− | Чтобы это автоматизировать, можно, например, сделать скрипт автоматического запуска admc
| |
− | | |
− | <pre>
| |
− | cat << 'EOF' > /opt/admc.sh
| |
− | #!/bin/bash
| |
− | echo 'Pa$$word' | kinit Administrator
| |
− | admc
| |
− | EOF
| |
− | | |
− | chmod +x /opt/admc.sh
| |
− | </pre>
| |
− | | |
− | | |
− | Если необходимо, то:
| |
− | | |
− | ln -s /opt/admc.sh /home/administrator/Рабочий\ стол/
| |
− | | |
− | =Порядок ввода в домен компьютера под управлением ОС Альт Стартеркит MATE=
| |
− | | |
− | ==Подготовка==
| |
− | | |
− | Устанавливаем пакеты
| |
− | | |
− | apt-get install alterator-auth sssd-ad samba-common-tools realmd
| |
− | | |
− | Выставляем часовой пояс и синхронизируем время
| |
− | | |
− | timedatectl set-timezone Europe/Moscow
| |
− | ntpdate pool.ntp.org
| |
− | | |
− | Задаём имя хоста
| |
− | | |
− | hostnamectl set-hostname host-arm01
| |
− | | |
− | Также проверить и при необходимости поправить имя хоста в файле
| |
− | | |
− | /etc/sysconfig/network
| |
− | | |
− | Перезагрузиться для проверки
| |
− | | |
− | reboot
| |
− | | |
− | ==Ввод компьютера в домен одной командой==
| |
− | | |
− | | |
− | Команда ввода компьютера с именем хоста
| |
− | | |
− | host-arm01
| |
− | | |
− | в домен
| |
− | | |
− | domain.alt
| |
− | | |
− | с паролем
| |
− | | |
− | Pa$$word
| |
− | | |
− | будет такой:
| |
− | | |
− | system-auth write ad domain.alt host-arm01 domain 'administrator' 'Pa$$word'
| |
− | | |
− | ==Вывод компьютера из домена==
| |
− | | |
− | В контексте этой статьи компьютер из домена выводится командой, вводимой на самом компьютере (не на сервере):
| |
− | | |
− | realm leave domain.alt Administrator
| |
− | | |
− | Проверка текущего типа аутентификации
| |
− | | |
− | control system-auth
| |
− | | |
− | =Монтирование каталогов по SAMBA=
| |
− | | |
− | ==На сервере==
| |
− | | |
− | ===Добавляем параметры в конфиг самбы и перезапускаем сервис===
| |
− | | |
− | <pre>
| |
− | cat << 'EOF' >> /etc/samba/smb.conf
| |
− | [share]
| |
− | path = /home/DOMAIN.ALT/%U/share
| |
− | read only = No
| |
− | browseable = yes
| |
− | writable = yes
| |
− | valid users = "@DOMAIN\Domain Users" "@DOMAIN\Domain Admins"
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | systemctl restart samba
| |
− | | |
− | ==На клиентском компьютере, введённом в домен==
| |
− | | |
− | | |
− | ===Устанавливаем необходимые пакеты===
| |
− | | |
− | apt-get install -y pam_mount cifs-utils systemd-settings-enable-kill-user-processes pam_script
| |
− | | |
− | ===Конфигурируем PAM===
| |
− | | |
− | Готовая команда для создания рабочего конфига
| |
− | | |
− | <pre>
| |
− | cat << 'EOF' > /etc/pam.d/system-auth-sss
| |
− | #%PAM-1.0
| |
− | | |
− | auth [success=5 perm_denied=ignore default=die] pam_localuser.so
| |
− | auth [success=1 default=bad] pam_succeed_if.so uid >= 500 quiet
| |
− | auth [default=1] pam_permit.so
| |
− | auth optional pam_mount.so
| |
− | auth substack system-auth-sss-only
| |
− | auth [default=1] pam_permit.so
| |
− | auth substack system-auth-local-only
| |
− | auth substack system-auth-common
| |
− | | |
− | account [success=4 perm_denied=ignore default=die]pam_localuser.so
| |
− | account [success=1 default=bad]pam_succeed_if.so uid >= 500 quiet
| |
− | account [default=1] pam_permit.so
| |
− | account substack system-auth-sss-only
| |
− | account [default=1] pam_permit.so
| |
− | account substack system-auth-local-only
| |
− | account substack system-auth-common
| |
− | | |
− | password [success=4 perm_denied=ignore default=die] pam_localuser.so
| |
− | password [success=1 default=bad] pam_succeed_if.so uid >= 500 quiet
| |
− | password [default=1] pam_permit.so
| |
− | password substack system-auth-sss-only
| |
− | password [default=1] pam_permit.so
| |
− | password substack system-auth-local-only
| |
− | password substack system-auth-common
| |
− | | |
− | session [success=5 perm_denied=ignore default=die] pam_localuser.so
| |
− | session [success=1 default=bad] pam_succeed_if.so uid >= 500 quiet
| |
− | session [default=1] pam_permit.so
| |
− | session required pam_mkhomedir.so silent
| |
− | session optional pam_mount.so disable_interactive
| |
− | session substack system-auth-sss-only
| |
− | session [default=1] pam_permit.so
| |
− | session substack system-auth-local-only
| |
− | session substack system-auth-common
| |
− | session optional pam_script.so
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | ====Добавляем скрипт в pam_script====
| |
− | | |
− | Практика показала, что при завершении пользователем сеанса НЕ происходит отмонтирования сетевого каталога share. Поэтому пришлось дополнительно использовать pam_script и настроить для завершения сессии вот такой скрипт, который выполняет команду отмонтирования при завершении сессии (который, в отличии от <cifsumount></cifsumount> секции в конфиге pam_mount, работает корректно!).
| |
− | | |
− | Готовая команда для создания скрипта
| |
− | <pre>
| |
− | cat << 'EOF' > /etc/pam-script/pam-script.d/umount_share_if_ses_close
| |
− | #!/bin/bash
| |
− | systemd-mount -u /home/DOMAIN.ALT/${PAM_USER}/share
| |
− | exit 0
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | ===Разрешаем для всех доступ к fuse под root===
| |
− | | |
− | control fusermount public
| |
− | | |
− | ===Проверка доступности ресурсов для пользователя===
| |
− | | |
− | В приведённой ниже команде проверяются ресурсы пользователя ivanov_ivan:
| |
− | | |
− | smbclient -L dc.domain.alt -U ivanov_ivan -m SMB2
| |
− | | |
− | ===Монтирование ресурса вручную===
| |
− | | |
− | В приведённой ниже команде проверяются монтирование ресурса вручную для пользователя ivanov_ivan:
| |
− | | |
− | mount.cifs //dc.domain.alt/share ~/share -o vers=2.0,user=ivanov_ivan
| |
− | | |
− | Под вошедшим в ведённый в домен компьютер пользователем ivanov_ivan команда должна монтировать ресурс без запроса пароля!
| |
− | | |
− | Если проверка и монтирование вручную работает корректно, то можно настраивать pam_mount
| |
− | | |
− | ====Конфигурируем pam_mount====
| |
− | | |
− | Делаем бэкап
| |
− | | |
− | cp /etc/security/pam_mount.conf.xml /etc/security/pam_mount.conf.xml.orig
| |
− | | |
− | Создаём сразу готовый файл конфигурации:
| |
− | | |
− | <pre>
| |
− | cat << 'EOF' > /etc/security/pam_mount.conf.xml
| |
− | <?xml version="1.0" encoding="utf-8" ?>
| |
− | <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
| |
− | <pam_mount>
| |
− | <debug enable="0" />
| |
− | <volume uid="10000-2000200000" fstype="cifs" server="dc.domain.alt" path="share" mountpoint="~/share" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775" />
| |
− | <cifsmount>/sbin/mount.cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o %(OPTIONS)</cifsmount>
| |
− | <mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other,sec" />
| |
− | <mntoptions require="nosuid,nodev" />
| |
− | <logout wait="0" hup="no" term="no" kill="no" />
| |
− | <mkmountpoint enable="1" remove="true" />
| |
− | </pam_mount>
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | ===Основной принцип работы===
| |
− | | |
− | В контексте данной статьи сервер и pam_mount на клиентской машине настроены таким образом, чтобы при входе доменного пользователя в систему в домашний каталог этого пользователя автоматически подключался ресурс, который на компьютере пользователя будет находиться в каталоге
| |
− | | |
− | /home/DOMAIN.ALT/ivanov_ivan/share
| |
− | | |
− | и будет смонтирован в каталог на сервере с точно таким же расположением, т.е.
| |
− | | |
− | /home/DOMAIN.ALT/ivanov_ivan/share
| |
− | | |
− | Следовательно, локально пользователь ivanov_ivan будет работать на конкретной машине, введённой в домен в локальном каталоге
| |
− | | |
− | /home/DOMAIN.ALT/ivanov_ivan
| |
− | | |
− | и результат работы будет сохраняться только на локальной машине.
| |
− | | |
− | Но файлы, с которыми пользователь ivanov_ivan работает на локальной машине A именно в каталоге
| |
− | | |
− | /home/DOMAIN.ALT/ivanov_ivan/share
| |
− | | |
− | , будут фактически сохраняться в каталоге
| |
− | | |
− | /home/DOMAIN.ALT/ivanov_ivan/share
| |
− | | |
− | файлового сервера на машине контроллера домена (и не будут сохраняться в таком же каталоге локальной машины) и в случае, когда пользователь ivanov_ivan будет работать на машине B, введённой в этот же домен, то в каталоге
| |
− |
| |
− | /home/DOMAIN.ALT/ivanov_ivan/share
| |
− | | |
− | пользователю ivanov_ivan будут доступны те же файлы, с которыми он работал на машине A.
| |
− | | |
− | =Готовые конфиги для клиента и сервера, в контексте задачи, описанной в данной статье=
| |
− | | |
− | ==Для сервера==
| |
− | | |
− | ===Файл /etc/samba/smb.conf===
| |
− | | |
− | <pre>
| |
− | # Global parameters
| |
− | [global]
| |
− | dns forwarder = 8.8.8.8
| |
− | netbios name = DC
| |
− | realm = DOMAIN.ALT
| |
− | server role = active directory domain controller
| |
− | workgroup = DOMAIN
| |
− | | |
− | [sysvol]
| |
− | path = /var/lib/samba/sysvol
| |
− | read only = No
| |
− | | |
− | [netlogon]
| |
− | path = /var/lib/samba/sysvol/domain.alt/scripts
| |
− | read only = No
| |
− | | |
− | [share]
| |
− | path = /home/DOMAIN.ALT/%U/share
| |
− | root preexec = /usr/local/samba/bin/create_homedir %U
| |
− | read only = No
| |
− | browseable = yes
| |
− | writable = yes
| |
− | valid users = "@DOMAIN\Domain Users" "@DOMAIN\Domain Admins"
| |
− | </pre>
| |
− | | |
− | ===Вывод команды testparm===
| |
− | <pre>
| |
− | Load smb config files from /etc/samba/smb.conf
| |
− | Loaded services file OK.
| |
− | Weak crypto is allowed
| |
− | | |
− | Server role: ROLE_ACTIVE_DIRECTORY_DC
| |
− | | |
− | Press enter to see a dump of your service definitions
| |
− | | |
− | # Global parameters
| |
− | [global]
| |
− | dns forwarder = 8.8.8.8
| |
− | passdb backend = samba_dsdb
| |
− | realm = DOMAIN.ALT
| |
− | server role = active directory domain controller
| |
− | workgroup = DOMAIN
| |
− | rpc_server:tcpip = no
| |
− | rpc_daemon:spoolssd = embedded
| |
− | rpc_server:spoolss = embedded
| |
− | rpc_server:winreg = embedded
| |
− | rpc_server:ntsvcs = embedded
| |
− | rpc_server:eventlog = embedded
| |
− | rpc_server:srvsvc = embedded
| |
− | rpc_server:svcctl = embedded
| |
− | rpc_server:default = external
| |
− | winbindd:use external pipes = true
| |
− | idmap config * : backend = tdb
| |
− | map archive = No
| |
− | vfs objects = dfs_samba4 acl_xattr
| |
− | | |
− | | |
− | [sysvol]
| |
− | path = /var/lib/samba/sysvol
| |
− | read only = No
| |
− | | |
− | | |
− | [netlogon]
| |
− | path = /var/lib/samba/sysvol/domain.alt/scripts
| |
− | read only = No
| |
− | | |
− | | |
− | [share]
| |
− | path = /home/DOMAIN.ALT/%U/share
| |
− | read only = No
| |
− | root preexec = /usr/local/samba/bin/create_homedir %U
| |
− | valid users = "@DOMAIN\Domain Users" "@DOMAIN\Domain Admins"
| |
− | </pre>
| |
− | | |
− | ===Файл /usr/local/samba/bin/create_homedir===
| |
− | <pre>
| |
− | #!/bin/bash
| |
− | [ -z ${1} ] && echo "Try: $0 <username>" && exit 1
| |
− | user="${1}"
| |
− | homepath="/home/DOMAIN.ALT/${user}"
| |
− | [ -d ${homepath} ] || /bin/cp -rp /etc/skel ${homepath}
| |
− | [ -d ${homepath} ] && /bin/chown `wbinfo -i ${user} | awk -F ':' {'print $3 ":" $4'}` ${homepath} -R
| |
− | exit 0
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/krb5.conf===
| |
− | <pre>
| |
− | [libdefaults]
| |
− | default_realm = DOMAIN.ALT
| |
− | dns_lookup_realm = false
| |
− | dns_lookup_kdc = true
| |
− | | |
− | [realms]
| |
− | DOMAIN.ALT = {
| |
− | default_domain = domain.alt
| |
− | }
| |
− | | |
− | [domain_realm]
| |
− | dc = DOMAIN.ALT
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/sysconfig/network===
| |
− | <pre>
| |
− | # When set to no, this may cause most daemons' initscripts skip starting.
| |
− | NETWORKING=yes
| |
− | | |
− | # Used by hotplug/pcmcia/ifplugd scripts to detect current network config
| |
− | # subsystem.
| |
− | CONFMETHOD=etcnet
| |
− | | |
− | # Used by rc.sysinit to setup system hostname at boot.
| |
− | HOSTNAME=dc.alt
| |
− | | |
− | # This is used by ALTLinux ppp-common to decide if we want to install
| |
− | # nameserver lines into /etc/resolv.conf or not.
| |
− | RESOLV_MODS=yes
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/resolv.conf===
| |
− | <pre>
| |
− | # Generated by resolvconf
| |
− | # Do not edit manually, use
| |
− | # /etc/net/ifaces/<interface>/resolv.conf instead.
| |
− | search domain.alt
| |
− | nameserver 127.0.0.1
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/hosts===
| |
− | <pre>
| |
− | 192.168.0.249 dc.domain.alt domain.alt
| |
− | 127.0.0.1 localhost
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/hostname===
| |
− | | |
− | dc.domain.alt
| |
− | | |
− | ===Файл /opt/admc.sh===
| |
− | | |
− | Файл не обязательный. Просто синтаксический сахар для запуска admc без необходимости выполнять вручную kinit Administrator и вводить пароль.
| |
− | | |
− | <pre>
| |
− | #!/bin/bash
| |
− | echo 'Pa$$word' | kinit Administrator
| |
− | admc
| |
− | </pre>
| |
− | | |
− | Разместить симлинк на этот файл можно, например, так
| |
− | | |
− | ln -s /opt/admc.sh /home/administrator/Рабочий\ стол/
| |
− | | |
− | ==Для клиента==
| |
− | | |
− | ===Файл /etc/resolv.conf===
| |
− | | |
− | В этом примере файла адрес DNS сервера должен быть адресом домена, в который необходимо вводить клиента. Выше описана процедура развёртывания домена и сделан акцент на том, что домен через себя должен пропускать работу DNS сервера. Если DNS сервер не будет узнавать контроллер домена по имени, процедура ввода завершится с ошибкой.
| |
− | | |
− | <pre>
| |
− | /etc/resolv.conf
| |
− | # Generated by resolvconf
| |
− | # Do not edit manually, use
| |
− | # /etc/net/ifaces/<interface>/resolv.conf instead.
| |
− | search domain.alt
| |
− | nameserver 192.168.0.249
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/hosts===
| |
− | <pre>
| |
− | 127.0.0.1 localhost.localdomain localhost
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/hostname===
| |
− | | |
− | host-arm01.domain.alt
| |
− | | |
− | ===Файл /etc/sysconfig/network===
| |
− | <pre>
| |
− | # When set to no, this may cause most daemons' initscripts skip starting.
| |
− | NETWORKING=yes
| |
− | | |
− | # Used by hotplug/pcmcia/ifplugd scripts to detect current network config
| |
− | # subsystem.
| |
− | CONFMETHOD=etcnet
| |
− | | |
− | # Used by rc.sysinit to setup system hostname at boot.
| |
− | HOSTNAME=host-arm01.domain.alt
| |
− | | |
− | # This is used by ALTLinux ppp-common to decide if we want to install
| |
− | # nameserver lines into /etc/resolv.conf or not.
| |
− | RESOLV_MODS=yes
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/pam.d/system-auth-sss===
| |
− | <pre>
| |
− | #%PAM-1.0
| |
− | | |
− | auth [success=5 perm_denied=ignore default=die] pam_localuser.so
| |
− | auth [success=1 default=bad] pam_succeed_if.so uid >= 500 quiet
| |
− | auth [default=1] pam_permit.so
| |
− | auth optional pam_mount.so
| |
− | auth substack system-auth-sss-only
| |
− | auth [default=1] pam_permit.so
| |
− | auth substack system-auth-local-only
| |
− | auth substack system-auth-common
| |
− | | |
− | account [success=4 perm_denied=ignore default=die]pam_localuser.so
| |
− | account [success=1 default=bad]pam_succeed_if.so uid >= 500 quiet
| |
− | account [default=1] pam_permit.so
| |
− | account substack system-auth-sss-only
| |
− | account [default=1] pam_permit.so
| |
− | account substack system-auth-local-only
| |
− | account substack system-auth-common
| |
− | | |
− | password [success=4 perm_denied=ignore default=die] pam_localuser.so
| |
− | password [success=1 default=bad] pam_succeed_if.so uid >= 500 quiet
| |
− | password [default=1] pam_permit.so
| |
− | password substack system-auth-sss-only
| |
− | password [default=1] pam_permit.so
| |
− | password substack system-auth-local-only
| |
− | password substack system-auth-common
| |
− | | |
− | session [success=5 perm_denied=ignore default=die] pam_localuser.so
| |
− | session [success=1 default=bad] pam_succeed_if.so uid >= 500 quiet
| |
− | session [default=1] pam_permit.so
| |
− | session required pam_mkhomedir.so silent
| |
− | session optional pam_mount.so disable_interactive
| |
− | session substack system-auth-sss-only
| |
− | session [default=1] pam_permit.so
| |
− | session substack system-auth-local-only
| |
− | session substack system-auth-common
| |
− | session optional pam_script.so
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/security/pam_mount.conf.xml===
| |
− | <pre>
| |
− | <?xml version="1.0" encoding="utf-8" ?>
| |
− | <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
| |
− | <pam_mount>
| |
− | <debug enable="0" />
| |
− | <volume uid="10000-2000200000" fstype="cifs" server="dc.domain.alt" path="share" mountpoint="~/share" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775" />
| |
− | <cifsmount>/sbin/mount.cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o %(OPTIONS)</cifsmount>
| |
− | <mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other,sec" />
| |
− | <mntoptions require="nosuid,nodev" />
| |
− | <logout wait="0" hup="no" term="no" kill="no" />
| |
− | <mkmountpoint enable="1" remove="true" />
| |
− | </pam_mount>
| |
− | </pre>
| |
− | | |
− | ===Файл /etc/pam-script/pam-script.d/umount_share_if_ses_close===
| |
− | <pre>
| |
− | #!/bin/bash
| |
− | systemd-mount -u /home/DOMAIN.ALT/${PAM_USER}/share
| |
− | exit 0
| |
− | </pre>
| |
− | | |
− | =Пакетное добавление пользователей=
| |
− | | |
− | ==Формат файла для импорта==
| |
− | | |
− | На примере файла с тремя пользователями...
| |
− | | |
− | Такой файл можно получить, например, на основе электронной таблицы .ods или .xls(x)
| |
− | | |
− | Формат и порядок столбцов данных следующий:
| |
− | | |
− | <pre>
| |
− | фамилия,имя,отчество,логин,емэйл,пароль
| |
− | </pre>
| |
− | | |
− | Файл демонстрирует то, что импортируемые пользователи могут не содержать имени или отчества, но на месте фамилии обязательно должен присутствовать какой-либо текст, должен быть обязательно логин, емэйл и пароль
| |
− | | |
− | <pre>
| |
− | cat << 'EOF' > /opt/users.csv
| |
− | Петрова,Мария,Ивановна,petrova_mi,petrova_mi@mail.ru,Qwe123!@#
| |
− | Сидоров,Иван,,sidorov_i,sidorov_i@mail.ru,Qwe123!@#
| |
− | Вася,,,vasya,vasya@mail.ru,Qwe123!@#
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | ==Скрипт для пакетного импорта==
| |
− | | |
− | <pre>
| |
− | cat << 'EOF' > /opt/batch_create_dc_users.sh
| |
− | #!/bin/bash
| |
− | | |
− | while read -r line;
| |
− | do
| |
− | f=`echo $line | awk -F ',' {'print $1'}`
| |
− | i=`echo $line | awk -F ',' {'print $2'}`
| |
− | o=`echo $line | awk -F ',' {'print $3'}`
| |
− | login=`echo $line | awk -F ',' {'print $4'}`
| |
− | email=`echo $line | awk -F ',' {'print $5'}`
| |
− | password=`echo $line | awk -F ',' {'print $6'}`
| |
− | | |
− | if [ -z $i ] && [ -z $o ]; then
| |
− | samba-tool user create "${login}" "${password}" --surname="${f}" --mail-address="${email}"
| |
− | else
| |
− | | |
− | given_name=''
| |
− | if [ -z $o ]; then
| |
− | given_name="${i}"
| |
− | else
| |
− | given_name="${i} ${o}"
| |
− | fi
| |
− | | |
− | samba-tool user create "${login}" "${password}" --surname="${f}" --given-name="${given_name}" --mail-address="${email}"
| |
− | fi
| |
− | | |
− | samba-tool user setexpiry "${login}" --noexpiry
| |
− | done < /opt/users.csv
| |
− | EOF
| |
− | </pre>
| |
− | | |
− | ==Запуск скрипта==
| |
− | | |
− | chmod +x /opt/batch_create_dc_users.sh
| |
− | | |
− | /opt/batch_create_dc_users.sh
| |
− | | |
− | =Источники=
| |
− | | |
− | В разном порядке использовались следующие источники
| |
− | | |
− | [https://docs.altlinux.org/ru-RU/alt-kworkstation/10.0/html/alt-kworkstation/ch52s07.html]
| |
− | | |
− | [https://docs.altlinux.org/ru-RU/alt-workstation/10.0/html/alt-workstation/ch44s06s02.html]
| |
− | | |
− | [https://docs.altlinux.org/ru-RU/alt-kworkstation/10.0/html/alt-kworkstation/system-management--sambadc--chapter.html]
| |
− | | |
− | [https://docs.altlinux.org/ru-RU/domain/10.2/html/samba/index.html]
| |
− | | |
− | [https://www.altlinux.org/Fileserver_start]
| |
− | | |
− | [https://www.altlinux.org/ActiveDirectory/DC#Troubleshooting]
| |
− | | |
− | [https://docs.altlinux.org/ru-RU/domain/10.2/html/samba/ch07s09s02.html]
| |
− | | |
− | [https://www.altlinux.org/ActiveDirectory/Login/DC]
| |