Присоединить Ubuntu 18 Server к домену Active Directory с помощью Kerberos и Winbind


Устанавливаем софт — Software needed to join AD

Некоторые нужные пакеты (например — krb5-user) отсуствуют в main, но находятся в репозитории universe. Поэтому, дописываем universe в файлике /etc/apt/sources.list или делаем так:

sudo apt-add-repository universe

И потом устанавливаем софт:

sudo apt-get -y purge cloud-init && sudo rm -rf /etc/cloudsudo apt-get -y install nano curl openssl libnss3-tools \chrony krb5-config krb5-locales krb5-user libpam-krb5 \samba smbclient winbind libpam-winbind libnss-winbind gss-ntlmssp \ldap-utils cifs-utils libsasl2-modules-gssapi-mit

Если при установке скрипт будет спрашивать Kerberos default REALM — ничего не вводим и жмем enter.

Настраиваем софт — Setup chrony, kerberos, samba, nsswitch, pam

Этот скрипт конфигурирует Ubuntu 18.04 для присоединения к домену AD. В начале скрипта есть список переменных, который нужно заполнить в соответствии с параметрами вашего окружения.

#! /bin/bash
NEW_HOSTNAME=somehostname
NEW_DOMAINNAME=domaniname.com
DNS_SERVERS=’192.168.1.1 192.168.1.2′
DOMAIN_CONTROLLERS=’dc1.domaniname.com dc2.domaniname.com’
DEFAULT_REALM=»${NEW_DOMAINNAME^^}»
NETBIOS_DOMAIN_NAME=$(echo $DEFAULT_REALM | sed ‘1,$ s/\..*//g’)

#########################################
### Setup NTP servers
#########################################
sed -i «/^pool.*\$/ s/^/#/» /etc/chrony/chrony.conf
sed -i «/^server.*\$/ s/^/#/» /etc/chrony/chrony.conf

for dc in $DOMAIN_CONTROLLERS;
do
echo «server $dc iburst» | sudo tee -a /etc/chrony/chrony.conf
done

#########################################
### Setup Kerberos /etc/krb5.conf
#########################################
LIBDEFAULTS=$(cat <<EOF
[libdefaults] dns_lookup_kdc = true
dns_lookup_realm = false
default_realm = $DEFAULT_REALM
clockskew = 300
default_ccache_name = FILE:/tmp/krb5cc_%{uid}
EOF
)

REALMS_KDC=$(for i in $DOMAIN_CONTROLLERS; do echo «kdc = $i»;done)

REALMS=$(cat <<EOF

[realms] $DEFAULT_REALM = {
$REALMS_KDC
default_domain = $DEFAULT_REALM
}
EOF
)

DOMAIN_REALM=$(cat <<EOF

[domain_realm] .$NEW_DOMAINNAME = $DEFAULT_REALM
$NEW_DOMAINNAME = $DEFAULT_REALM

[appdefaults] pam = {
ticket_lifetime = 1d
renew_lifetime = 1d
forwardable = true
proxiable = false
minimum_uid = 1
}
EOF
)

echo «$LIBDEFAULTS» > /etc/krb5.conf
echo «$REALMS» >> /etc/krb5.conf
echo «$DOMAIN_REALM» >> /etc/krb5.conf

########################################
#### Configure /etc/samba/smb.conf
########################################
SMB_CONF=$(cat <<EOF
# smb.conf is the main Samba configuration file. You find a full commented
# version at /usr/share/doc/packages/samba/examples/smb.conf.SUSE if the
# samba-doc package is installed.
[global] workgroup = $NETBIOS_DOMAIN_NAME
passdb backend = tdbsam
map to guest = Bad User
include = /etc/samba/dhcp.conf
usershare allow guests = No
idmap gid = 10000-20000
idmap uid = 10000-20000
realm = $DEFAULT_REALM
security = ADS
template homedir = /home/%D/%U
template shell = /bin/bash
usershare max shares = 100
encrypt passwords = yes
kerberos method = secrets and keytab
winbind nested groups = yes
winbind offline logon = yes
winbind refresh tickets = yes
winbind use default domain = yes
dns proxy = no
domain master = no
local master = no
preferred master = no
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
client use spnego = yes
client ntlmv2 auth = yes
EOF
)

mv /etc/samba/smb.conf /etc/samba/smb.conf.bak_`date +»%d.%m.%y_%H-%M»`
echo «$SMB_CONF» > /etc/samba/smb.conf

########################################
#### Configure /etc/nsswitch.conf
########################################
sed -i ‘/^passwd:.*systemd$/ s/$/ winbind/’ /etc/nsswitch.conf
sed -i ‘/^group:.*systemd$/ s/$/ winbind/’ /etc/nsswitch.conf
sed -i ‘/^hosts:/ s/:.*$/: files dns/’ /etc/nsswitch.conf

##########################################
#### Configure PAM
##########################################
sed -i «/^Default:.*\$/ s/:.*$/: yes/» /usr/share/pam-configs/mkhomedir
sed -i ‘/^mkhomedir/D’ /var/lib/pam/seen
pam-auth-update —package
###############################################
### Setup Services
###############################################
systemctl enable ssh
systemctl enable nmbd.service
systemctl enable smbd.service
systemctl enable winbind.service

###############################################
### Setting HOSTNAME, DOMAINNAME
###############################################
sed -i ‘/^127./D’ /etc/hosts
echo «127.0.0.1 $NEW_HOSTNAME.$NEW_DOMAINNAME $NEW_HOSTNAME localhost» | sudo tee -a /etc/hosts
echo «127.0.0.2 $NEW_HOSTNAME.$NEW_DOMAINNAME $NEW_HOSTNAME» | sudo tee -a /etc/hosts
sed -i «/^.*preserve_hostname:.*$/ s/false/true/» /etc/cloud/cloud.cfg
hostname $NEW_HOSTNAME
domainname $NEW_DOMAINNAME
echo $NEW_HOSTNAME.$NEW_DOMAINNAME | sudo tee /etc/HOSTNAME
echo $NEW_HOSTNAME.$NEW_DOMAINNAME | sudo tee /etc/hostname

Настройка Winbind

Если вам необходимо как-либо работать с пользователями домена, например, настраивать SMB-шары с разграничением доступа, то вам понадобится кроме самой Samba ещё и Winbind — специальный демон, служащий для связи локальной системы управления пользователями и группами Linux с сервером Active Directory. Проще говоря Winbind нужен, если вы хотите видеть пользователей домена на своём компьютере с Ubuntu.

Winbind позволяет спроецировать всех пользователей и все группы AD в вашу Linux систему, присвоив им ID из заданного диапазона. Таким образом вы сможете назначать пользователей домена владельцами папок и файлов на вашем компьютере и выполнять любые другие операции, завязанные на пользователей и группы.

Для настройки Winbind используется всё тот же файл /etc/samba/smb.conf. Добавьте в секцию [global] следующие строки:

# Опции сопоставления доменных пользователей и виртуальных пользователей в системе через Winbind.
   # Диапазоны идентификаторов для виртуальных пользователей и групп.
   idmap uid = 10000 - 40000
   idmap gid = 10000 - 40000
   # Эти опции не стоит выключать.
   winbind enum groups = yes
   winbind enum users = yes
   # Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп
   # будут использоваться с доменом, т.е. вместо username - DOMAIN\username.
   # Возможно именно это вам и нужно, однако обычно проще этот параметр включить. 
   winbind use default domain = yes
   # Если вы хотите разрещить использовать командную строку для пользователей домена, то
   # добавьте следующую строку, иначе в качестве shell'а будет вызываться /bin/false
   template shell = /bin/bash
   # Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку
   winbind refresh tickets = yes

Собственно присоединение к AD — Join AD

sudo net ads join -U domainadmin

Права sudo для доменных пользователей — AD users sudoers

После присоединения можно добавить доменных пользователей в группу sudo для того, чтобы дать права:

sudo usermod -aG sudo domain_user_name

Для добавления групп — редактируем /etc/sudoers с помощью visudo:

sudo visudo

Проверка

Убедиться, что в системе видны пользователи домена можно командой:

 wbinfo -u

В выводе должны быть все пользователи домена.
Также можно увидеть доступные группы:

wbinfo -g