ALTDC: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(→‎Добавляем скрипт в pam_script)
м (Откат правок Vovan (обсуждение) к версии Decoy)
(Метки: замена, откат)
Строка 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]
 

Версия 22:13, 5 декабря 2023

Устанавливаем нужные пакеты task-samba-dc admc

Для создания домена Active Directory (далее -  AD), настраиваем на сервере статический ip-address и выставляем ДНС сервером себя 127.0.0.1. Далее в центре управления системой (https://localhost:8080) в разделе домен указываем "Имя домена" и выбираем "Тип домена" заполняем поля в дополнительных параметрах, нажимаем "применить".

При правильном заполнении полей, а также при наличии всех нужных пакетов, "Текущее состояние" - будет заполнено. После этого можно перезагрузить сервер.


Для того что бы пользоваться ADMC нужно произвести авторизацию в Kerberos командой kinit <имя пользователя> по умолчанию пользователь "Administrator" Если возникает ошибка - Откройте от имени суперпользователя файл /etc/krb5.conf.

Проверяем что установлено значение false в строке "dns_lookup_realm = false".

Раскомментируйте строку в [libdefaults] "default realm" и введите название области заглавными буквами.

Ниже, под строкой [realms] вместо EXAMPLE.COM введите название области, а вместо example.com в "default domain" введите IP-адрес сервера.

Под строкой [domain_realm] example.com и EXAMPLE.COM замените на ваш домен сохраняя регистр.


На клиенте устанавливаем пакет для наследования групповых политик alterator-gpudate Ставим статику и прописываем DNS - адрес сервера AD

Ввод в домен можно осуществить в разделе Аутентификация

Выбрать пункт «Домен Active Directory», заполнить поля и нажать кнопку «Применить»

В открывшемся окне необходимо ввести имя пользователя, имеющего право вводить машины в домен, и его пароль и нажать кнопку «ОК»