Инструкция.
Как добавить Ubuntu 18.04 домен Windows
1. У Вас должен быть настроен DNS (в том числе и обратные запросы), значительная часть проблем из-за ДНС.
2. Настройка синхронизации времени, время должно совпадать с AD
sed -i 's/#NTP=/NTP=0.ru.pool.ntp.org/g' /etc/systemd/timesyncd.conf
timedatectl set-ntp true
systemctl restart systemd-timesyncd.service
timedatectl --adjust-system-clock
Как выглядит файл timesyncd.conf
[Time]
NTP=0.ru.pool.ntp.org
3. Устанавливаем софт
apt update
apt -y install realmd sssd sssd-tools libpam-sss krb5-user adcli samba-common-bin packagekit samba libpam-mount libpam-winbind cifs-utils keyutils
4. Исправление nsswitch.conf
sed -i "s/dns myhostname/myhostname/g" /etc/nsswitch.conf
sed -i "s/files mdns4/dns files mdns4/g" /etc/nsswitch.conf
/etc/init.d/networking restart
Как выглядит файл /etc/nsswitch.conf
passwd: compat systemd sss
group: compat systemd sss
shadow: compat sss
gshadow: files
hosts: dns files mdns4_minimal [NOTFOUND=return] myhostname
networks: files
protocols: db files
services: db files sss
ethers: db files
rpc: db files
netgroup: nis sss
sudoers: files sss
automount: files sss
5. Настройка krb5.conf (то что написано в верхнем регистре не просто так )
echo "[libdefaults]
#Область Kerberos
default_realm = ДОМЕН.LOCAL
#Время жизни для начальных запросов билетов
ticket_lifetime = 24h
#Устанавливает возобновляемое время жизни по умолчанию для начальных запросов билетов
renew_lifetime = 7d
#Отключаем поиск DNS, т.к. они должны быть уже известны (AD+DNS)
dns_lookup_realm = false
# оставляем (или включаем) поиск kerberos-настроек домена через DNS:
dns_lookup_kdc = true
#Папка для кеша учетных данных
default_ccache_name = FILE:/tmp/krb5cc_%{uid}
# Разрешить пересылку начальных билетов
forwardable = true
# Сделать начальные билеты доступными
proxiable = true
[realms]
ДОМЕН.LOCAL = {
kdc = dc1.домен.local:88
kdc = dc2.домен.local:88
admin_server = dc1.домен.local
default_domain = ДОМЕН.LOCAL
}
[domain_realm]
.dc1.домен.local = DC1.ДОМЕН.LOCAL
dc1.домен.local = DC1.ДОМЕН.LOCAL
.dc2.домен.local = DC2.ДОМЕН.LOCAL
dc2.домен.local = DC2.ДОМЕН.LOCAL" > /etc/krb5.conf
6. Настройка realm.conf
touch /etc/realmd.conf
echo "[active-directory]
default-client = sssd
os-name = Ubuntu
os-version = 18.04
[service]
automatic-install = no
[dc1.домен.local]
user-principal = yes
# yes заставляет SSSD использовать автоматическое сопоставление идентификаторов
# вместо идентификаторов пользователей и групп, хранящихся в атрибутах POSIX в AD.
# Автоматическое сопоставление идентификаторов SSSD является интеллектуальным в том смысле,
# что оно может гарантировать одинаковые uid и gid UNIX на разных хостах, когда все хосты используют SSSD.
automatic-id-mapping = yes
# Опция full-qualified-names = no по умолчанию удаляет часть домена из имен пользователей и групп.
# Это может привести к коллизиям имен, но облегчает работу пользователей, поскольку им нужно каждый
# раз вводить только свою часть имени пользователя, а не часть домена.
fully-qualified-names = no
manage-system = yes" > /etc/realmd.conf
7. Ввод в домен
realm join --user=$USERDOMEN ДОМЕН.LOCAL
,где $USERDOMEN - пользователь домена который имеет права вводить в домен
вывод из домена
realm leave -v домен.local8. Настройка для монтирования сетевого диска
,где ~\/Disk_H - Это каталог в домашней директории вошедшего пользователя
sed -i '/<!-- Volume definitions -->/ a <volume fstype="cifs" server="SERVE" path="SHARA" mountpoint="~\/Disk_H" options="nodev,nosuid"\/>' /etc/security/pam_mount.conf.xml
Известные проблемы: при активном использовании шары зависает nautilus, при потери сети не монтируется обратно
Решение: подключить диски через systemd (описание ниже)
Как выглядит файл pam_mount.conf.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<!--
See pam_mount.conf(5) for a description.
-->
<pam_mount>
<!-- debug should come before everything else,
since this file is still processed in a single pass
from top-to-bottom -->
<debug enable="0" />
<!-- Volume definitions -->
<volume fstype="cifs" server="SERVE" path="SHARA" mountpoint="~\/Disk_H" options="nodev,nosuid"\/>
<!-- pam_mount parameters: General tunables -->
<!--
<luserconf name=".pam_mount.conf.xml" />
-->
<!-- Note that commenting out mntoptions will give you the defaults.
You will need to explicitly initialize it with the empty string
to reset the defaults to nothing. -->
<mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" />
<!--
<mntoptions deny="suid,dev" />
<mntoptions allow="*" />
<mntoptions deny="*" />
-->
<mntoptions require="nosuid,nodev" />
<!-- requires ofl from hxtools to be present -->
<logout wait="0" hup="no" term="no" kill="no" />
<!-- pam_mount parameters: Volume-related -->
<mkmountpoint enable="1" remove="true" />
</pam_mount>
9. Указание дефолтного профиля.
При заходе нового пользователя брать дефолтный профиль по указанному пути
sed -i '/pam_unix.so/ a session optional pam_mkhomedir.so skel=\/etc\/skel\/ umask=0077' /etc/pam.d/common-session
sed -i "s/# SKEL=/SKEL=/g" /etc/default/useradd
Как выглядит файл /etc/pam.d/common-session
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session optional pam_umask.so
session required pam_unix.so
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0077
session optional pam_winbind.so
session optional pam_sss.so
session optional pam_mount.so
session optional pam_systemd.so
10. Авторизация по ssh согласно роли AD
sed -i '/success=2/d' /etc/pam.d/common-auth
sed -i '/pam_unix.so nullok_secure/ a auth \[success=2 default=ignore\] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass require_membership_of=RoleAD' /etc/pam.d/common-auth
Как выглядит файл /etc/pam.d/common-auth
auth [success=3 default=ignore] pam_unix.so nullok_secure
auth [success=2 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass require_membership_of=RoleAD
auth [success=1 default=ignore] pam_sss.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_mount.so
auth optional pam_cap.so
Известные проблемы: при заходе обычного пользователя будет высвечиваться надпись, что он не состоит в RoleAD
Как убрать эту надпись пока решения не нашел
11. Даем доменной группе права sudo
sed -i '/%RoleAD/d;/%sudo/a %RoleAD\ ALL=(ALL) ALL ' /etc/sudoers
Как выглядит файл /etc/sudoers
root ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
%RoleAD ALL=(ALL) ALL
12. Настройка sssd.conf
touch /etc/sssd/sssd.conf
echo "[sssd]
services = nss, pam
config_file_version = 2
domains = домен.local
debug_level = 3
[nss]
[pam]
debug_level = 3
[domain/домен.local]
#Включает режим кэширования аутентификационных данных (полезно при недоступности домена)
cache_credentials = True
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad
# Запретить дописывать названия домена
use_fully_qualified_names = False
default_domain_suffix = домен.local
default_shell = /bin/bash
#Задает домашнюю папку для доменных пользователей
fallback_homedir = /home/%u
ad_server = dc1.домен.local, dc2.домен.local
ad_domain = домен.local
ldap_id_mapping = True
ldap_schema = ad
krb5_realm = ДОМЕН.LOCAL
realmd_tags = manages-system joined-with-adcli
krb5_keytab = /etc/krb5.keytab
krb5_store_password_if_offline = True
krb5_ccname_template = FILE:/tmp/krb5cc_%{uid}" > /etc/sssd/sssd.conf
chmod 600 /etc/sssd/sssd.conf
chown root:root /etc/sssd/sssd.conf
13. Убираем пользователя, под которым настраивали, из списка login screen
sed -i 's/false/true/g' /var/lib/AccountsService/users/TEST
Как выглядит файл /var/lib/AccountsService/users/TEST
[InputSource0]
xkb=us
[InputSource1]
xkb=ru
[User]
XSession=
SystemAccount=true
sudo reboot
Монтирование сетевых дисков через systemd
1. Создаем файл mount, где имя файла = пути, только через тире
touch /etc/systemd/system/mnt-Disk_H.mount
Содержимое файла mnt-Disk_H.mount
[Unit]
# Описания
Description=CIFS
[Mount]
# Откуда монтируем
What=//SERVER/SHARA
# Куда монтируем
Where=/mnt/Disk_H
# Описание для cifs
Options= user=NAMEUSER,uid=UIDUSER,cruid=UIDUSER,sec=krb5,nocase,vers=3.0
Type=cifs
UID можно узнать набрав в терминале
id2. Создаем файл automount, где имя файла = пути, только через тире
touch /etc/systemd/system/mnt-Disk_H.automount
Содержимое файла mnt-Disk_H.automount
[Unit]
Description=Automount unit for cifs
After=remote-fs-pre.target
After=network.target
Wants=network.target
After=network-online.target
Wants=network-online.target
Conflicts=umount.target
Before=umount.target
[Automount]
Where=/mnt/Disk_H
[Install]
WantedBy=remote-fs.target
WantedBy=multi-user.target
3. Перезапуск конфигурации systemd
systemctl daemon-reload
4. Автозагрузка
systemctl enable mnt-Disk_H.automount
Теперь при обращении к содержимому /mnt/Disk_H, монтируется автоматически
Известные проблемы: Не разобрался как использовать переменные в Options, допустим когда сменится пользователь дынные будут от старого.