Test AD Join

Материал из ALT Linux Wiki

Проверка узла на готовность присоединится к домену AD

Для работы в роли участника домена Active Directory важно обеспечить наличие на узле необходимых инструментальных средств и корректную их конфигурацию. В этом документе описаны необходимые шаги для проверки всех необходимых свойств узла и генерации отчёта о конфигурации, который, в случае необходимости, можно предоставить сотрудникам технической поддержки для выработки решения возникших проблем. Также этот документ можно "исполнить" с помощью инструмента \`integrator\`, входящего в состав семейства дистрибутивов \`ALT Linux\`. Для получения подробной инстукции и описания смотрите \`man integrator\`. При проверки самостоятельно необходимо просто копировать блоки кода в окно терминала в том порядке в котором они представлены в этом документе.

Пример работы скрипта

При использовании скрипта вы увидите примерно следующий вывод.

[root@dc0 ~]# export DOMAIN_NAME=domain.alt
[root@dc0 ~]# ./check_join.sh 
 • check hostname........................................[ ✓ passed ]
 • search field in resolvconf............................[ ✓ passed ]
 • domain field in resolvconf............................[ ✓ passed ]
 • nameserver is defined in resolvconf...................[ ✓ passed ]
 • get NS records from default nameserver................[ ✓ passed ]
 • /etc/samba/smb.conf exists............................[ ✓ passed ]
 • check netbios name....................................[ ✓ passed ]
 • /etc/krb5.conf exists.................................[ ✓ passed ]
 • default_domain in krb5.conf...........................[ ✓ passed ]

Также будет сгенерирован файл отчёта с именем integrator.${DOMAIN_NAME}.report текущем рабочем каталоге.

Предварительная подготовка к проверке

Так как параметры окружения различаются у разных пользователей, то предварительно необходимо задать основные параметры для выполнения проверок. При выполнении этого документа с помощью инстумента \`integrator\` эти параметы будут запрошены как параметры запуска либо взяты из переменных окружения, если таковые уже установлены.

# впишите имя вашего домена домена в нижнем регистре
# например, domain.alt
#export DOMAIN_NAME=

Также для удобства объявим вспомогательные функции которые помогут выводить информацию на экран и позволят сформировать итоговый отчёт.

set -euo pipefail
logfile="integrator.${DOMAIN_NAME}.report"
pad () {
  local s1="$1"
  local s2="$2"
  local _pad=$(printf '%0.1s' "."{1..60})
  local padlen=60
  printf ' • %s' "$s1"
  printf '%*.*s' 0 $((padlen - ${#s1} - ${#s2})) "$_pad"
  case $s2 in
    "passed")
       printf '[ \e[1;92m✓ %s\e[0m ]\n' "$s2"
       ;;
    "failed")
       printf '[ \e[1;91m✗ %s\e[0m ]\n' "$s2"
       ;;
    *)
       printf '[ \e[1m%s\e[0m ]\n' "$s2"
       ;;
  esac
}

passed () {
  pad "${TEST}" "passed" | log
}

failed () {
  pad "${TEST}" "failed" | log
  #exit 1
}

log () {
  echo "TEST: ${TEST}" >> "${logfile}"
  tee -a "${logfile}"
}
rm -f "${logfile}"

hostname узла

Имя узла должно быть задано в формате \`FQDN\` и содержать имя домена в котором предполагается работа в качестве участника.

TEST="check hostname"; hostname | log | grep -qe "^.*\.${DOMAIN_NAME}$" && passed || failed

resolvconf

Проверяем параметры DNS-ресолвера

search

поле search в resolvconf должно указывать содержать нужный домен

TEST="read resolvconf"; RESOLVCONF=$(resolvconf -l | log)
TEST="search field in resolvconf"; echo "${RESOLVCONF}" | grep -qe "^search\s${DOMAIN_NAME}" && passed || failed

domain

поле domain в resolvconf должно указывать на нужный домен

TEST="domain field in resolvconf"; echo "${RESOLVCONF}" | grep -qe "^domain\s${DOMAIN_NAME}" && passed || failed

nameserver

должен быть объявлен хотя бы один nameserver

TEST="nameserver is defined in resolvconf"; echo "${RESOLVCONF}" | grep -qe "^nameserver\s" && passed || failed

работоспособность DNS

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

NS записи

dig_short="dig +noall +short"
TEST="get NS records from default nameserver"; ${dig_short} NS "${DOMAIN_NAME}" | log | grep -qe ".*${DOMAIN_NAME}\.$" && passed || failed

параметры smb.conf

/etc/samba/smb.conf существует

TEST="/etc/samba/smb.conf exists"; [[ -f /etc/samba/smb.conf ]] && passed || failed

и содержит правильный netbios name

TEST="read smb.conf"; SMBCONF=$(cat /etc/samba/smb.conf | log)
HOSTNAME_SHORT=$(hostname -s)
TEST="check netbios name"; echo "${SMBCONF}" | grep -qie "\snetbios name\s=\s${HOSTNAME_SHORT}" && passed || failed

параметры kerberos

/etc/krb5.conf существует

TEST="/etc/krb5.conf exists"; [[ -f /etc/krb5.conf ]] && passed || failed

рилм по-умолчанию указывает на нужный домен

TEST="read krb5.conf"; KRBCONF=$(cat /etc/krb5.conf | log)
TEST="default_domain in krb5.conf"; echo "${KRBCONF}" | grep -qe "\s*default_realm\s=\s${DOMAIN_NAME^^}" && passed || failed