Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
linux_faq:ubuntu1804_join_ad_using_winbind_samba [2019/12/03 20:23]
admin [Проверка]
linux_faq:ubuntu1804_join_ad_using_winbind_samba [2019/12/03 20:24] (current)
admin [Скрипт для быстрого присоединения Ubuntu к домену Active Directory]
Line 1: Line 1:
 +Тут я описываю как присоединить **Ubuntu 18.04 Server** к домену **Active Directory** с помощью **Kerberos** и **Winbind**
  
 +====== Задаем статический адрес - Network Static IP======
 +Если хост свежий, то удаляем все файлики из папки **/etc/netplan/** и создаем новый: **/etc/netplan/50-network-init.yaml**
 +<code>
 +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]
 +</code>
 +Применяем конфиг:
 +  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
 +И потом устанавливаем софт:
 +<code>
 +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
 +</code>
 +Если при установке скрипт будет спрашивать **Kerberos default REALM** - ничего не вводим и жмем **enter**.
 +====== Настраиваем софт - Setup chrony, kerberos, samba, nsswitch, pam ======
 +Этот скрипт конфигурирует **Ubuntu 18.04** для присоединения к домену AD. В начале скрипта есть список переменных, который нужно заполнить в соответствии с  параметрами вашего окружения.
 +<code>
 +#! /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
 +
 +</code>
 +
 +====== Собственно присоединение к AD - Join AD ======
 +<code>
 +sudo net ads join -U domainadmin
 +</code>
 +
 +====== Права 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**.
 +<code>#! /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
 +</code>
 +Для присоединения:
 +  net ads joun -U domain_admin_loginname
  • linux_faq/ubuntu1804_join_ad_using_winbind_samba.txt
  • Last modified: 2019/12/03 20:24
  • by admin