Test AD Join
Проверка узла на готовность присоединится к домену 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