Тут я описываю как присоединить Ubuntu 18.04 Server к домену Active Directory с помощью Kerberos и Winbind
Если хост свежий, то удаляем все файлики из папки /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
Некоторые нужные пакеты (например - 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.
Этот скрипт конфигурирует 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
sudo net ads join -U domainadmin
После присоединения можно добавить доменных пользователей в группу 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
Данный скрипт я использую для быстрой настройки и присоединения к домену машин (и контейнеров) без специальных требований. Просто для аутентификации пользователей из 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