Тут я описываю как присоединить Ubuntu 18.04 Server к домену Active Directory с помощью Kerberos и Winbind

Задаем статический адрес - Network Static IP

Если хост свежий, то удаляем все файлики из папки /etc/netplan/ и создаем новый: /etc/netplan/50-network-init.yaml

network:
 version: 2
 ethernets:
   eth0:
     dhcp4: no
     dhcp6: no
     addresses: [192.168.1.13/24]
     gateway4: 192.168.1.254
     nameservers:
       search: [domainname.com]
       addresses: [192.168.1.1,192.168.1.2]

Применяем конфиг:

sudo ip address flush eth0
sudo ip address flush eth1
sudo netplan apply

Устанавливаем софт - 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/cloud
sudo 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

Собственно присоединение к 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

Группы добавляются с помощью строк, начинающихся с %, пробелы в названиях групп заменяются на ^, а слеш экранируется \\.
Для добавления доменных админов нужно добавить строку:

%DOMAIN\\domain^admins     ALL=(ALL:ALL) ALL

или без домена (в зависимости от настроек):

%domain^admins     ALL=(ALL:ALL) ALL

В любом случае - проверить, что система видит доменного пользователя и получить текущий список его групп можно командой:

sudo -u domainusername groups

Проверка

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

 wbinfo -u

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

wbinfo -g

Пробуем залогиниться доменным пользователем:

su -l domain.user

Скрипт для быстрого присоединения Ubuntu к домену Active Directory

Данный скрипт я использую для быстрой настройки и присоединения к домену машин (и контейнеров) без специальных требований. Просто для аутентификации пользователей из AD. Проверено на Ubuntu 16.04, 18.04, 19.04, 19.10.

#! /bin/bash

####################################
#### Set needed Variables
####################################
NEW_DOMAINNAME="domain.local"
DNS_SERVERS="192.168.1.100 192.168.1.1"
DNS_STATIC_SEARCHLIST="$NEW_DOMAINNAME"
DOMAIN_CONTROLLERS=`host -t srv _ldap._tcp.$NEW_DOMAINNAME | awk {'print $8'} | sed 's/.$//g'`
DEFAULT_REALM="${NEW_DOMAINNAME^^}"
NETBIOS_DOMAIN_NAME=$(echo $DEFAULT_REALM | sed  '1,$ s/\..*//g')

# check root
if [ "$(id -u)" != "0" ]; then
  echo "You do not have the appropriate privileges..."
  exit 1
fi

##############################################
### Setting up NameServers
##############################################
echo "search $DNS_STATIC_SEARCHLIST" | sudo tee -a /etc/resolvconf/resolv.conf.d/base
echo -ne > /etc/resolvconf/resolv.conf.d/head
for nameserver in $DNS_SERVERS; do echo "nameserver $nameserver" | sudo tee -a /etc/resolvconf/resolv.conf.d/head ;done
resolvconf -u

####################################
#### Setup Software
####################################
apt-get update
apt-get -y upgrade
apt-get -y install nano curl openssl libnss3-tools software-properties-common \
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

###############################################
### Setup Services
###############################################
systemctl enable ssh
systemctl enable nmbd.service
systemctl enable samba.service
systemctl enable winbind.service

#########################################
### 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]
        realm = $DEFAULT_REALM
        security = ADS
        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
        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
        client max protocol = SMB2
        client min protocol = SMB2
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

Для присоединения:

net ads joun -U domain_admin_loginname
Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/ubuntu1804_join_ad_using_winbind_samba.txt
  • Last modified: 2019/12/03 20:24
  • by admin