
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://it-help-school.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dkirienko</id>
	<title>IT в школе - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://it-help-school.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dkirienko"/>
	<link rel="alternate" type="text/html" href="https://it-help-school.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Dkirienko"/>
	<updated>2026-04-27T05:35:55Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8D%D1%82%D0%B0%D0%BF%D0%B0_%D0%92%D1%81%D0%9E%D0%A8_%D0%BF%D0%BE_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B5&amp;diff=2545</id>
		<title>Блокировка интернета при проведении регионального этапа ВсОШ по информатике</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8D%D1%82%D0%B0%D0%BF%D0%B0_%D0%92%D1%81%D0%9E%D0%A8_%D0%BF%D0%BE_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B5&amp;diff=2545"/>
		<updated>2026-01-13T18:32:56Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Разрывы строк в Powershell-скрипте&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эта статья создана для помощи организаторам регионального этапа всероссийской олимпиады школьников по информатике в настройке фильтрации доступа в интернет во время олимпиады.&lt;br /&gt;
&lt;br /&gt;
При проведении регионального этапа ВсОШ по информатике, в соответствии с [https://vso.edsoo.ru/public.php/dav/files/3pCCBL6X2C4ywkr/?accept=zip требованиями к проведению регионального этапа], доступ участников в интернет должен быть ограничен сайтом тестирующей системы.&lt;br /&gt;
&lt;br /&gt;
Удобнее всего осуществлять фильтрацию на сетевом оборудовании (роутеры, сервера организации), тогда настройки фильтрации производятся централизованно в одном месте. В этом случае фильтрация самостоятельно настраивается специалистами организации в соответствии с правилами, изложенными в этой статье. Если участники работают на компьютерах с WiFi-адаптером, и фильтрация интернета осуществляется на роутере (не локальным файрволом), то необходимо исключить возможность участников выхода в интернет через произвольную WiFi-сеть (например, через свой телефон в кармане). Для этого нужно разрешить подключаться только к определённой WiFi-сети. Инструкция, как этот сделать в Windows, например, [https://winnote.ru/networks/143-filtraciya-spiska-dostupnyh-wifi-setey-v-windows-10.html вот здесь].&lt;br /&gt;
&lt;br /&gt;
В случаях, когда фильтрация доступа в интернет на сетевом оборудовании невозможна, фильтрация осуществляется настройкой файрвола операционной системы на каждом компьютере участника.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
После получения логинов и паролей для доступа участников к пробному туру, зайдите в пробный тур под логином любого участника и проверьте, что вы видите задачи пробного тура.&lt;br /&gt;
===Основные правила===&lt;br /&gt;
Настройка фильтрации осуществляется под учетной записью администратора. Участники олимпиады должны использовать непривилегированную учётную запись, исключающую возможность изменения настроек файрвола.&lt;br /&gt;
&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
*DNS-протокол: UDP, порт 53 (для входящих соединений - UDP и TCP, порт 53).&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
*ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
*Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
Также может быть открыт доступ для работы других локальных сервисов, если это необходимо для функционирования сети или администрирования компьютеров. Например, может быть открыт доступ к локальным компьютерам по протоколу ssh (порт 22), если на компьютере участников запущен ssh-сервер для администрирования (исключающий возможность подключения участников по протоколу ssh), или UDP порт 5353 для работы протокола mDNS (zeroconf).&lt;br /&gt;
&lt;br /&gt;
Также должен быть открыт доступ к сайтам тестирующих систем (рекомендуется оставить только ту тестирующую систему, которая будет использоваться в регионе).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Тестирующая система&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |Яндекс-контест&lt;br /&gt;
|ext.contest.yandex.ru&lt;br /&gt;
ext.contest.yandex.com&lt;br /&gt;
|87.250.250.200&lt;br /&gt;
2a02:6b8::360&lt;br /&gt;
|-&lt;br /&gt;
|clck.yandex.ru&lt;br /&gt;
|77.88.21.14&lt;br /&gt;
87.250.250.14&lt;br /&gt;
&lt;br /&gt;
87.250.251.14&lt;br /&gt;
&lt;br /&gt;
93.158.134.14&lt;br /&gt;
&lt;br /&gt;
213.180.193.14&lt;br /&gt;
&lt;br /&gt;
213.180.204.14&lt;br /&gt;
&lt;br /&gt;
2a02:6b8::14 &lt;br /&gt;
|-&lt;br /&gt;
|yastatic.net&lt;br /&gt;
yandex.st&lt;br /&gt;
|37.9.64.225&lt;br /&gt;
2a02:6b8:23::225&lt;br /&gt;
|-&lt;br /&gt;
|contest-problem-files.s3-private.mds.yandex.net&lt;br /&gt;
contest-hidden.s3-private.mds.yandex.net&lt;br /&gt;
&lt;br /&gt;
contest-public.s3-private.mds.yandex.net&lt;br /&gt;
|87.250.251.158&lt;br /&gt;
2a02:6b8::3:158&lt;br /&gt;
|-&lt;br /&gt;
|Codeforces&lt;br /&gt;
|*.contest.codeforces.com&lt;br /&gt;
|95.163.252.68&lt;br /&gt;
|}&lt;br /&gt;
После настройки необходимо проверить, что сайт тестирующей системы доступен участникам. Примеры сайтов для проверки: ext.contest.yandex.ru (Яндекс-контест),  reg2025.contest.codeforces.com (Codeforces).&lt;br /&gt;
&lt;br /&gt;
Все прочие сайты должны быть заблокированы. Примеры сайтов для проверки (они должны быть заблокированы): codeforces.com, contest.yandex.ru, ya.ru, mail.ru, google.com, vk.com, web.telegram.org&lt;br /&gt;
&lt;br /&gt;
Желательно проверить, что доступ заблокирован не только в браузере, но и в других приложениях, например, невозможно подключение наружу по протоколу ssh (пример команды для проверки: ssh sshtron.zachlatta.com).&lt;br /&gt;
&lt;br /&gt;
Все настройки фильтрации можно сделать конфигурационным скриптом, запускаемом на компьютере участника, в соответствии с инструкциями ниже.&lt;br /&gt;
&lt;br /&gt;
===Настройка Windows 10 и Windows 11===&lt;br /&gt;
В Windows можно использовать стандартный файрвол операционной системы.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&lt;br /&gt;
&lt;br /&gt;
Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к сайтам тестирующей системы&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ext.contest.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.200,2a02:6b8::360&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ext.contest.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.200,2a02:6b8::360&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow clck.yandex.ru&amp;quot; -Direction Outbound -Action Allow `&lt;br /&gt;
-RemoteAddress 77.88.21.14,87.250.250.14,87.250.251.14,93.158.134.14,213.180.193.14,213.180.204.14,2a02:6b8::14&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow clck.yandex.ru&amp;quot; -Direction Inbound -Action Allow `&lt;br /&gt;
-RemoteAddress 77.88.21.14,87.250.250.14,87.250.251.14,93.158.134.14,213.180.193.14,213.180.204.14,2a02:6b8::14&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow yastatic.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 37.9.64.225,2a02:6b8:23::225&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow yastatic.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 37.9.64.225,2a02:6b8:23::225&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mds.yandex.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.251.158,2a02:6b8::3:158&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mds.yandex.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.251.158,2a02:6b8::3:158&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .contest.codeforces.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 95.163.252.68&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .contest.codeforces.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 95.163.252.68&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета. &lt;br /&gt;
&lt;br /&gt;
=== Настройка Linux ===&lt;br /&gt;
В операционных системах на базе GNU/Linux необходимо использовать системный файрвол iptables или nftables в зависимости от дистрибутива. Точные инструкции для Linux не приводятся, так как конфигурационные файлы различаются в разных дистрибутивах. Можно использовать следующие статьи для примеров подобной настройки:&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета при проведении ВсОШ в Москве]] - используется nftables для операционной системы МОС-12, применимо также для дистрибутивов семейства Роса.&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета в МОС-12 при помощи nftables]] - также про настройку nftables в МОС-12 и дистрибутивах семейства Роса.&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета в МОС при помощи iptables]] - используется iptables, применимо для дистрибутивов семейства Альт (Альт Образование, Альт рабочая станция, Simply linux и т.д.).&lt;br /&gt;
&lt;br /&gt;
==== Настройка ufw в Ubuntu ====&lt;br /&gt;
В Ubuntu и дистрибутивах, построенных на его основе, а также в ряде других дистрибутивов (Astra Linux) есть простая утилита [https://wiki.ubuntu.com/UncomplicatedFirewall ufw] для настройки файрвола.&lt;br /&gt;
&lt;br /&gt;
Если ufw не установлен, это можно сделать командой (под root или с использованием sudo).&lt;br /&gt;
 apt install ufw&lt;br /&gt;
Основные особенности использования ufw:&lt;br /&gt;
&lt;br /&gt;
* Не нужно создавать конфигурационные файлы. Каждый вызов утилиты ufw может создавать отдельное правило, для задания нескольких правил нужно несколько раз вызвать утилиту ufw.&lt;br /&gt;
* Правила сохраняются между перезапусками. Созданная конфигурация запоминается, не нужно изучать конфигурационные файлы, сохранение происходит автоматически.&lt;br /&gt;
* Для отладки и тиражирования конфигурации удобно создать скрипт, в который запишем все нужные вызовы ufw.&lt;br /&gt;
* Команда ufw reset сбрасывает все настройки и отключает файрвол.&lt;br /&gt;
* Команда ufw enable включает файрвол.&lt;br /&gt;
* Команда ufw status verbose выводит текущее состояние файрвола.&lt;br /&gt;
&lt;br /&gt;
Вот пример скрипта для создания всех необходимых правил фильтрации. Его нужно запускать от пользователя root или с использованием sudo. Запишите этот скрипт в файл для того, чтобы можно было быстро включать фильтрацию запуском скрипта.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
ufw --force reset&lt;br /&gt;
&lt;br /&gt;
ufw enable&lt;br /&gt;
&lt;br /&gt;
# Добавьте следующую строчку при необходимости подключения к компьютеру по ssh для управления им &lt;br /&gt;
# ufw allow ssh &lt;br /&gt;
&lt;br /&gt;
# ntp&lt;br /&gt;
ufw allow ntp &lt;br /&gt;
ufw allow out ntp&lt;br /&gt;
&lt;br /&gt;
# dns&lt;br /&gt;
ufw allow domain/udp&lt;br /&gt;
ufw allow out domain/udp&lt;br /&gt;
&lt;br /&gt;
# Локальные соединения&lt;br /&gt;
ufw allow from 127.0.0.1/8&lt;br /&gt;
ufw allow out to 127.0.0.1/8&lt;br /&gt;
&lt;br /&gt;
# Сюда вписываем сайты, к которым должен быть открыт доступ.&lt;br /&gt;
ufw allow out to 87.250.250.200&lt;br /&gt;
ufw allow out to 2a02:6b8::360&lt;br /&gt;
ufw allow out to 77.88.21.14&lt;br /&gt;
ufw allow out to 87.250.250.14&lt;br /&gt;
ufw allow out to 87.250.251.14&lt;br /&gt;
ufw allow out to 93.158.134.14&lt;br /&gt;
ufw allow out to 213.180.193.14&lt;br /&gt;
ufw allow out to 213.180.204.14&lt;br /&gt;
ufw allow out to 2a02:6b8::14&lt;br /&gt;
ufw allow out to 37.9.64.225&lt;br /&gt;
ufw allow out to 2a02:6b8:23::225&lt;br /&gt;
ufw allow out to 87.250.251.158&lt;br /&gt;
ufw allow out to 2a02:6b8::3:158&lt;br /&gt;
&lt;br /&gt;
ufw allow out to 95.163.252.68&lt;br /&gt;
&lt;br /&gt;
# Делаем reject на остальные хосты при подключении по http и https&lt;br /&gt;
ufw reject out http&lt;br /&gt;
ufw reject out https&lt;br /&gt;
&lt;br /&gt;
# Политика по умолчанию - отклонять пакеты&lt;br /&gt;
ufw default deny incoming&lt;br /&gt;
ufw default deny outgoing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для отключения фильтрации необходимо выполнить команду&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ufw --force reset&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8D%D1%82%D0%B0%D0%BF%D0%B0_%D0%92%D1%81%D0%9E%D0%A8_%D0%BF%D0%BE_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B5&amp;diff=2544</id>
		<title>Блокировка интернета при проведении регионального этапа ВсОШ по информатике</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8D%D1%82%D0%B0%D0%BF%D0%B0_%D0%92%D1%81%D0%9E%D0%A8_%D0%BF%D0%BE_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B5&amp;diff=2544"/>
		<updated>2026-01-13T18:29:14Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Обновление адресов Яндекса&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эта статья создана для помощи организаторам регионального этапа всероссийской олимпиады школьников по информатике в настройке фильтрации доступа в интернет во время олимпиады.&lt;br /&gt;
&lt;br /&gt;
При проведении регионального этапа ВсОШ по информатике, в соответствии с [https://vso.edsoo.ru/public.php/dav/files/3pCCBL6X2C4ywkr/?accept=zip требованиями к проведению регионального этапа], доступ участников в интернет должен быть ограничен сайтом тестирующей системы.&lt;br /&gt;
&lt;br /&gt;
Удобнее всего осуществлять фильтрацию на сетевом оборудовании (роутеры, сервера организации), тогда настройки фильтрации производятся централизованно в одном месте. В этом случае фильтрация самостоятельно настраивается специалистами организации в соответствии с правилами, изложенными в этой статье. Если участники работают на компьютерах с WiFi-адаптером, и фильтрация интернета осуществляется на роутере (не локальным файрволом), то необходимо исключить возможность участников выхода в интернет через произвольную WiFi-сеть (например, через свой телефон в кармане). Для этого нужно разрешить подключаться только к определённой WiFi-сети. Инструкция, как этот сделать в Windows, например, [https://winnote.ru/networks/143-filtraciya-spiska-dostupnyh-wifi-setey-v-windows-10.html вот здесь].&lt;br /&gt;
&lt;br /&gt;
В случаях, когда фильтрация доступа в интернет на сетевом оборудовании невозможна, фильтрация осуществляется настройкой файрвола операционной системы на каждом компьютере участника.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
После получения логинов и паролей для доступа участников к пробному туру, зайдите в пробный тур под логином любого участника и проверьте, что вы видите задачи пробного тура.&lt;br /&gt;
===Основные правила===&lt;br /&gt;
Настройка фильтрации осуществляется под учетной записью администратора. Участники олимпиады должны использовать непривилегированную учётную запись, исключающую возможность изменения настроек файрвола.&lt;br /&gt;
&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
*DNS-протокол: UDP, порт 53 (для входящих соединений - UDP и TCP, порт 53).&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
*ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
*Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
Также может быть открыт доступ для работы других локальных сервисов, если это необходимо для функционирования сети или администрирования компьютеров. Например, может быть открыт доступ к локальным компьютерам по протоколу ssh (порт 22), если на компьютере участников запущен ssh-сервер для администрирования (исключающий возможность подключения участников по протоколу ssh), или UDP порт 5353 для работы протокола mDNS (zeroconf).&lt;br /&gt;
&lt;br /&gt;
Также должен быть открыт доступ к сайтам тестирующих систем (рекомендуется оставить только ту тестирующую систему, которая будет использоваться в регионе).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Тестирующая система&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |Яндекс-контест&lt;br /&gt;
|ext.contest.yandex.ru&lt;br /&gt;
ext.contest.yandex.com&lt;br /&gt;
|87.250.250.200&lt;br /&gt;
2a02:6b8::360&lt;br /&gt;
|-&lt;br /&gt;
|clck.yandex.ru&lt;br /&gt;
|77.88.21.14&lt;br /&gt;
87.250.250.14&lt;br /&gt;
&lt;br /&gt;
87.250.251.14&lt;br /&gt;
&lt;br /&gt;
93.158.134.14&lt;br /&gt;
&lt;br /&gt;
213.180.193.14&lt;br /&gt;
&lt;br /&gt;
213.180.204.14&lt;br /&gt;
&lt;br /&gt;
2a02:6b8::14 &lt;br /&gt;
|-&lt;br /&gt;
|yastatic.net&lt;br /&gt;
yandex.st&lt;br /&gt;
|37.9.64.225&lt;br /&gt;
2a02:6b8:23::225&lt;br /&gt;
|-&lt;br /&gt;
|contest-problem-files.s3-private.mds.yandex.net&lt;br /&gt;
contest-hidden.s3-private.mds.yandex.net&lt;br /&gt;
&lt;br /&gt;
contest-public.s3-private.mds.yandex.net&lt;br /&gt;
|87.250.251.158&lt;br /&gt;
2a02:6b8::3:158&lt;br /&gt;
|-&lt;br /&gt;
|Codeforces&lt;br /&gt;
|*.contest.codeforces.com&lt;br /&gt;
|95.163.252.68&lt;br /&gt;
|}&lt;br /&gt;
После настройки необходимо проверить, что сайт тестирующей системы доступен участникам. Примеры сайтов для проверки: ext.contest.yandex.ru (Яндекс-контест),  reg2025.contest.codeforces.com (Codeforces).&lt;br /&gt;
&lt;br /&gt;
Все прочие сайты должны быть заблокированы. Примеры сайтов для проверки (они должны быть заблокированы): codeforces.com, contest.yandex.ru, ya.ru, mail.ru, google.com, vk.com, web.telegram.org&lt;br /&gt;
&lt;br /&gt;
Желательно проверить, что доступ заблокирован не только в браузере, но и в других приложениях, например, невозможно подключение наружу по протоколу ssh (пример команды для проверки: ssh sshtron.zachlatta.com).&lt;br /&gt;
&lt;br /&gt;
Все настройки фильтрации можно сделать конфигурационным скриптом, запускаемом на компьютере участника, в соответствии с инструкциями ниже.&lt;br /&gt;
&lt;br /&gt;
===Настройка Windows 10 и Windows 11===&lt;br /&gt;
В Windows можно использовать стандартный файрвол операционной системы.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&lt;br /&gt;
&lt;br /&gt;
Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к сайтам тестирующей системы&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ext.contest.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.200,2a02:6b8::360&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ext.contest.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.200,2a02:6b8::360&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow clck.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 77.88.21.14,87.250.250.14,87.250.251.14,93.158.134.14,213.180.193.14,213.180.204.14,2a02:6b8::14&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow clck.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 77.88.21.14,87.250.250.14,87.250.251.14,93.158.134.14,213.180.193.14,213.180.204.14,2a02:6b8::14&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow yastatic.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 37.9.64.225,2a02:6b8:23::225&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow yastatic.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 37.9.64.225,2a02:6b8:23::225&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mds.yandex.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.251.158,2a02:6b8::3:158&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mds.yandex.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.251.158,2a02:6b8::3:158&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .contest.codeforces.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 95.163.252.68&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .contest.codeforces.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 95.163.252.68&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета. &lt;br /&gt;
&lt;br /&gt;
=== Настройка Linux ===&lt;br /&gt;
В операционных системах на базе GNU/Linux необходимо использовать системный файрвол iptables или nftables в зависимости от дистрибутива. Точные инструкции для Linux не приводятся, так как конфигурационные файлы различаются в разных дистрибутивах. Можно использовать следующие статьи для примеров подобной настройки:&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета при проведении ВсОШ в Москве]] - используется nftables для операционной системы МОС-12, применимо также для дистрибутивов семейства Роса.&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета в МОС-12 при помощи nftables]] - также про настройку nftables в МОС-12 и дистрибутивах семейства Роса.&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета в МОС при помощи iptables]] - используется iptables, применимо для дистрибутивов семейства Альт (Альт Образование, Альт рабочая станция, Simply linux и т.д.).&lt;br /&gt;
&lt;br /&gt;
==== Настройка ufw в Ubuntu ====&lt;br /&gt;
В Ubuntu и дистрибутивах, построенных на его основе, а также в ряде других дистрибутивов (Astra Linux) есть простая утилита [https://wiki.ubuntu.com/UncomplicatedFirewall ufw] для настройки файрвола.&lt;br /&gt;
&lt;br /&gt;
Если ufw не установлен, это можно сделать командой (под root или с использованием sudo).&lt;br /&gt;
 apt install ufw&lt;br /&gt;
Основные особенности использования ufw:&lt;br /&gt;
&lt;br /&gt;
* Не нужно создавать конфигурационные файлы. Каждый вызов утилиты ufw может создавать отдельное правило, для задания нескольких правил нужно несколько раз вызвать утилиту ufw.&lt;br /&gt;
* Правила сохраняются между перезапусками. Созданная конфигурация запоминается, не нужно изучать конфигурационные файлы, сохранение происходит автоматически.&lt;br /&gt;
* Для отладки и тиражирования конфигурации удобно создать скрипт, в который запишем все нужные вызовы ufw.&lt;br /&gt;
* Команда ufw reset сбрасывает все настройки и отключает файрвол.&lt;br /&gt;
* Команда ufw enable включает файрвол.&lt;br /&gt;
* Команда ufw status verbose выводит текущее состояние файрвола.&lt;br /&gt;
&lt;br /&gt;
Вот пример скрипта для создания всех необходимых правил фильтрации. Его нужно запускать от пользователя root или с использованием sudo. Запишите этот скрипт в файл для того, чтобы можно было быстро включать фильтрацию запуском скрипта.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
ufw --force reset&lt;br /&gt;
&lt;br /&gt;
ufw enable&lt;br /&gt;
&lt;br /&gt;
# Добавьте следующую строчку при необходимости подключения к компьютеру по ssh для управления им &lt;br /&gt;
# ufw allow ssh &lt;br /&gt;
&lt;br /&gt;
# ntp&lt;br /&gt;
ufw allow ntp &lt;br /&gt;
ufw allow out ntp&lt;br /&gt;
&lt;br /&gt;
# dns&lt;br /&gt;
ufw allow domain/udp&lt;br /&gt;
ufw allow out domain/udp&lt;br /&gt;
&lt;br /&gt;
# Локальные соединения&lt;br /&gt;
ufw allow from 127.0.0.1/8&lt;br /&gt;
ufw allow out to 127.0.0.1/8&lt;br /&gt;
&lt;br /&gt;
# Сюда вписываем сайты, к которым должен быть открыт доступ.&lt;br /&gt;
ufw allow out to 87.250.250.200&lt;br /&gt;
ufw allow out to 2a02:6b8::360&lt;br /&gt;
ufw allow out to 77.88.21.14&lt;br /&gt;
ufw allow out to 87.250.250.14&lt;br /&gt;
ufw allow out to 87.250.251.14&lt;br /&gt;
ufw allow out to 93.158.134.14&lt;br /&gt;
ufw allow out to 213.180.193.14&lt;br /&gt;
ufw allow out to 213.180.204.14&lt;br /&gt;
ufw allow out to 2a02:6b8::14&lt;br /&gt;
ufw allow out to 37.9.64.225&lt;br /&gt;
ufw allow out to 2a02:6b8:23::225&lt;br /&gt;
ufw allow out to 87.250.251.158&lt;br /&gt;
ufw allow out to 2a02:6b8::3:158&lt;br /&gt;
&lt;br /&gt;
ufw allow out to 95.163.252.68&lt;br /&gt;
&lt;br /&gt;
# Делаем reject на остальные хосты при подключении по http и https&lt;br /&gt;
ufw reject out http&lt;br /&gt;
ufw reject out https&lt;br /&gt;
&lt;br /&gt;
# Политика по умолчанию - отклонять пакеты&lt;br /&gt;
ufw default deny incoming&lt;br /&gt;
ufw default deny outgoing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для отключения фильтрации необходимо выполнить команду&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ufw --force reset&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8D%D1%82%D0%B0%D0%BF%D0%B0_%D0%92%D1%81%D0%9E%D0%A8_%D0%BF%D0%BE_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B5&amp;diff=2535</id>
		<title>Блокировка интернета при проведении регионального этапа ВсОШ по информатике</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8D%D1%82%D0%B0%D0%BF%D0%B0_%D0%92%D1%81%D0%9E%D0%A8_%D0%BF%D0%BE_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B5&amp;diff=2535"/>
		<updated>2025-12-25T13:26:06Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Обновлена сслылка на требования к проведению.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Эта статья создана для помощи организаторам регионального этапа всероссийской олимпиады школьников по информатике в настройке фильтрации доступа в интернет во время олимпиады.&lt;br /&gt;
&lt;br /&gt;
При проведении регионального этапа ВсОШ по информатике, в соответствии с [https://vso.edsoo.ru/public.php/dav/files/3pCCBL6X2C4ywkr/?accept=zip требованиями к проведению регионального этапа], доступ участников в интернет должен быть ограничен сайтом тестирующей системы.&lt;br /&gt;
&lt;br /&gt;
Удобнее всего осуществлять фильтрацию на сетевом оборудовании (роутеры, сервера организации), тогда настройки фильтрации производятся централизованно в одном месте. В этом случае фильтрация самостоятельно настраивается специалистами организации в соответствии с правилами, изложенными в этой статье. Если участники работают на компьютерах с WiFi-адаптером, и фильтрация интернета осуществляется на роутере (не локальным файрволом), то необходимо исключить возможность участников выхода в интернет через произвольную WiFi-сеть (например, через свой телефон в кармане). Для этого нужно разрешить подключаться только к определённой WiFi-сети. Инструкция, как этот сделать в Windows, например, [https://winnote.ru/networks/143-filtraciya-spiska-dostupnyh-wifi-setey-v-windows-10.html вот здесь].&lt;br /&gt;
&lt;br /&gt;
В случаях, когда фильтрация доступа в интернет на сетевом оборудовании невозможна, фильтрация осуществляется настройкой файрвола операционной системы на каждом компьютере участника.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
После получения логинов и паролей для доступа участников к пробному туру, зайдите в пробный тур под логином любого участника и проверьте, что вы видите задачи пробного тура.&lt;br /&gt;
===Основные правила===&lt;br /&gt;
Настройка фильтрации осуществляется под учетной записью администратора. Участники олимпиады должны использовать непривилегированную учётную запись, исключающую возможность изменения настроек файрвола.&lt;br /&gt;
&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
*DNS-протокол: UDP, порт 53 (для входящих соединений - UDP и TCP, порт 53).&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
*ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
*Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
Также может быть открыт доступ для работы других локальных сервисов, если это необходимо для функционирования сети или администрирования компьютеров. Например, может быть открыт доступ к локальным компьютерам по протоколу ssh (порт 22), если на компьютере участников запущен ssh-сервер для администрирования (исключающий возможность подключения участников по протоколу ssh), или UDP порт 5353 для работы протокола mDNS (zeroconf).&lt;br /&gt;
&lt;br /&gt;
Также должен быть открыт доступ к сайтам тестирующих систем (рекомендуется оставить только ту тестирующую систему, которая будет использоваться в регионе).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Тестирующая система&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; |Яндекс-контест&lt;br /&gt;
|ext.contest.yandex.ru&lt;br /&gt;
ext.contest.yandex.com&lt;br /&gt;
|87.250.250.200&lt;br /&gt;
2a02:6b8::360&lt;br /&gt;
|-&lt;br /&gt;
|clck.yandex.ru&lt;br /&gt;
|77.88.21.14&lt;br /&gt;
87.250.250.14&lt;br /&gt;
&lt;br /&gt;
87.250.251.14&lt;br /&gt;
&lt;br /&gt;
93.158.134.14&lt;br /&gt;
&lt;br /&gt;
2a02:6b8::14 &lt;br /&gt;
|-&lt;br /&gt;
|yastatic.net&lt;br /&gt;
yandex.st&lt;br /&gt;
|178.154.131.215&lt;br /&gt;
178.154.131.216&lt;br /&gt;
&lt;br /&gt;
178.154.131.217&lt;br /&gt;
&lt;br /&gt;
2a02:6b8:20::215&lt;br /&gt;
|-&lt;br /&gt;
|contest-problem-files.s3-private.mds.yandex.net&lt;br /&gt;
contest-hidden.s3-private.mds.yandex.net&lt;br /&gt;
|87.250.251.158&lt;br /&gt;
2a02:6b8::3:158&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|77.88.21.119&lt;br /&gt;
87.250.250.119&lt;br /&gt;
&lt;br /&gt;
87.250.251.119&lt;br /&gt;
&lt;br /&gt;
93.158.134.119&lt;br /&gt;
&lt;br /&gt;
2a02:6b8::1:119&lt;br /&gt;
|-&lt;br /&gt;
|Codeforces&lt;br /&gt;
|*.contest.codeforces.com&lt;br /&gt;
|95.163.252.68&lt;br /&gt;
|}&lt;br /&gt;
После настройки необходимо проверить, что сайт тестирующей системы доступен участникам. Примеры сайтов для проверки: ext.contest.yandex.ru (Яндекс-контест),  reg2025.contest.codeforces.com (Codeforces).&lt;br /&gt;
&lt;br /&gt;
Все прочие сайты должны быть заблокированы. Примеры сайтов для проверки (они должны быть заблокированы): codeforces.com, contest.yandex.ru, ya.ru, mail.ru, google.com, vk.com, web.telegram.org&lt;br /&gt;
&lt;br /&gt;
Желательно проверить, что доступ заблокирован не только в браузере, но и в других приложениях, например, невозможно подключение наружу по протоколу ssh (пример команды для проверки: ssh sshtron.zachlatta.com).&lt;br /&gt;
&lt;br /&gt;
Все настройки фильтрации можно сделать конфигурационным скриптом, запускаемом на компьютере участника, в соответствии с инструкциями ниже.&lt;br /&gt;
&lt;br /&gt;
===Настройка Windows 10 и Windows 11===&lt;br /&gt;
В Windows можно использовать стандартный файрвол операционной системы.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&lt;br /&gt;
&lt;br /&gt;
Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к сайтам тестирующей системы&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ext.contest.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.200,2a02:6b8::360&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ext.contest.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.200,2a02:6b8::360&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow clck.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 77.88.21.14,87.250.250.14,87.250.251.14,93.158.134.14,2a02:6b8::14&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow clck.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 77.88.21.14,87.250.250.14,87.250.251.14,93.158.134.14,2a02:6b8::14&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow yastatic.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 178.154.131.215,178.154.131.216,178.154.131.217,2a02:6b8:20::215&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow yastatic.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 178.154.131.215,178.154.131.216,178.154.131.217,2a02:6b8:20::215&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mds.yandex.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.251.158,2a02:6b8::3:158&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mds.yandex.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.251.158,2a02:6b8::3:158&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 77.88.21.119,87.250.250.119,87.250.251.119,93.158.134.119,2a02:6b8::1:119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 77.88.21.119,87.250.250.119,87.250.251.119,93.158.134.119,2a02:6b8::1:119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .contest.codeforces.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 95.163.252.68&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .contest.codeforces.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 95.163.252.68&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета. &lt;br /&gt;
&lt;br /&gt;
=== Настройка Linux ===&lt;br /&gt;
В операционных системах на базе GNU/Linux необходимо использовать системный файрвол iptables или nftables в зависимости от дистрибутива. Точные инструкции для Linux не приводятся, так как конфигурационные файлы различаются в разных дистрибутивах. Можно использовать следующие статьи для примеров подобной настройки:&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета при проведении ВсОШ в Москве]] - используется nftables для операционной системы МОС-12, применимо также для дистрибутивов семейства Роса.&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета в МОС-12 при помощи nftables]] - также про настройку nftables в МОС-12 и дистрибутивах семейства Роса.&lt;br /&gt;
&lt;br /&gt;
[[Блокировка интернета в МОС при помощи iptables]] - используется iptables, применимо для дистрибутивов семейства Альт (Альт Образование, Альт рабочая станция, Simply linux и т.д.).&lt;br /&gt;
&lt;br /&gt;
==== Настройка ufw в Ubuntu ====&lt;br /&gt;
В Ubuntu и дистрибутивах, построенных на его основе, а также в ряде других дистрибутивов (Astra Linux) есть простая утилита [https://wiki.ubuntu.com/UncomplicatedFirewall ufw] для настройки файрвола.&lt;br /&gt;
&lt;br /&gt;
Если ufw не установлен, это можно сделать командой (под root или с использованием sudo).&lt;br /&gt;
 apt install ufw&lt;br /&gt;
Основные особенности использования ufw:&lt;br /&gt;
&lt;br /&gt;
* Не нужно создавать конфигурационные файлы. Каждый вызов утилиты ufw может создавать отдельное правило, для задания нескольких правил нужно несколько раз вызвать утилиту ufw.&lt;br /&gt;
* Правила сохраняются между перезапусками. Созданная конфигурация запоминается, не нужно изучать конфигурационные файлы, сохранение происходит автоматически.&lt;br /&gt;
* Для отладки и тиражирования конфигурации удобно создать скрипт, в который запишем все нужные вызовы ufw.&lt;br /&gt;
* Команда ufw reset сбрасывает все настройки и отключает файрвол.&lt;br /&gt;
* Команда ufw enable включает файрвол.&lt;br /&gt;
* Команда ufw status verbose выводит текущее состояние файрвола.&lt;br /&gt;
&lt;br /&gt;
Вот пример скрипта для создания всех необходимых правил фильтрации. Его нужно запускать от пользователя root или с использованием sudo. Запишите этот скрипт в файл для того, чтобы можно было быстро включать фильтрацию запуском скрипта.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
ufw --force reset&lt;br /&gt;
&lt;br /&gt;
ufw enable&lt;br /&gt;
&lt;br /&gt;
# Добавьте следующую строчку при необходимости подключения к компьютеру по ssh для управления им &lt;br /&gt;
# ufw allow ssh &lt;br /&gt;
&lt;br /&gt;
# ntp&lt;br /&gt;
ufw allow ntp &lt;br /&gt;
ufw allow out ntp&lt;br /&gt;
&lt;br /&gt;
# dns&lt;br /&gt;
ufw allow domain/udp&lt;br /&gt;
ufw allow out domain/udp&lt;br /&gt;
&lt;br /&gt;
# Локальные соединения&lt;br /&gt;
ufw allow from 127.0.0.1/8&lt;br /&gt;
ufw allow out to 127.0.0.1/8&lt;br /&gt;
&lt;br /&gt;
# Сюда вписываем сайты, к которым должен быть открыт доступ.&lt;br /&gt;
ufw allow out to 87.250.250.200&lt;br /&gt;
ufw allow out to 2a02:6b8::360&lt;br /&gt;
ufw allow out to 77.88.21.14&lt;br /&gt;
ufw allow out to 87.250.250.14&lt;br /&gt;
ufw allow out to 87.250.251.14&lt;br /&gt;
ufw allow out to 93.158.134.14&lt;br /&gt;
ufw allow out to 2a02:6b8::14&lt;br /&gt;
ufw allow out to 178.154.131.215&lt;br /&gt;
ufw allow out to 178.154.131.216&lt;br /&gt;
ufw allow out to 178.154.131.217&lt;br /&gt;
ufw allow out to 2a02:6b8:20::215&lt;br /&gt;
ufw allow out to 87.250.251.158&lt;br /&gt;
ufw allow out to 2a02:6b8::3:158&lt;br /&gt;
ufw allow out to 77.88.21.119&lt;br /&gt;
ufw allow out to 87.250.250.119&lt;br /&gt;
ufw allow out to 87.250.251.119&lt;br /&gt;
ufw allow out to 93.158.134.119&lt;br /&gt;
ufw allow out to 2a02:6b8::1:119&lt;br /&gt;
&lt;br /&gt;
ufw allow out to 95.163.252.68&lt;br /&gt;
&lt;br /&gt;
# Делаем reject на остальные хосты при подключении по http и https&lt;br /&gt;
ufw reject out http&lt;br /&gt;
ufw reject out https&lt;br /&gt;
&lt;br /&gt;
# Политика по умолчанию - отклонять пакеты&lt;br /&gt;
ufw default deny incoming&lt;br /&gt;
ufw default deny outgoing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для отключения фильтрации необходимо выполнить команду&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ufw --force reset&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2503</id>
		<title>Блокировка интернета при проведении ВсОШ в Москве</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2503"/>
		<updated>2025-12-12T11:53:40Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
При проведении муниципального этапа ВсОШ по информатике в Москве места проведения должны фильтровать доступ в интернет по указанным правилам. Фильтрация может быть осуществлена на сетевом оборудовании (роутере), централизованно для всех участников. При отсутствии роутера фильтрация осуществляется на каждом компьютере настройкой файрвола операционной системы.&lt;br /&gt;
&lt;br /&gt;
Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию [[Блокировка интернета в МОС при помощи iptables|Блокировка интернета в МОС при помощи iptables.]]&lt;br /&gt;
&lt;br /&gt;
Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.&lt;br /&gt;
&lt;br /&gt;
До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
=== Список необходимых разрешённых хостов ===&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
&lt;br /&gt;
* Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.&lt;br /&gt;
* DNS-протокол: UDP, порт 53.&lt;br /&gt;
*mDNS-протокол (zeroconf, Avahi): UDP порт 5353&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
* ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
* Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.&lt;br /&gt;
*Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.&lt;br /&gt;
* Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
&lt;br /&gt;
В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.&lt;br /&gt;
&lt;br /&gt;
Также должны быть разрешены соединения со следующими хостами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
!Зачем нужен&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|10.0.0.0/8&lt;br /&gt;
|Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования&lt;br /&gt;
|-&lt;br /&gt;
|school.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ и &amp;quot;Магазина приложений&amp;quot; МОС&lt;br /&gt;
|-&lt;br /&gt;
|uchebnik.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ&lt;br /&gt;
|-&lt;br /&gt;
|login.mos.ru&lt;br /&gt;
|94.79.51.0/24&lt;br /&gt;
|Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru&lt;br /&gt;
|-&lt;br /&gt;
|online.olimpiada.ru&lt;br /&gt;
|212.193.155.35&lt;br /&gt;
46.235.186.69&lt;br /&gt;
&lt;br /&gt;
46.235.188.68&lt;br /&gt;
|Резервная тестирующая система&lt;br /&gt;
|-&lt;br /&gt;
|fonts.googleapis.com&lt;br /&gt;
|142.250.184.234&lt;br /&gt;
|Шрифты для online.olimpiada.ru&lt;br /&gt;
|-&lt;br /&gt;
|vos.olimpiada.ru&lt;br /&gt;
|185.178.208.183&lt;br /&gt;
|Сайт ВсОШ в Москве&lt;br /&gt;
|-&lt;br /&gt;
|всош.цпм.рф&lt;br /&gt;
|185.30.228.25&lt;br /&gt;
|Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)&lt;br /&gt;
|-&lt;br /&gt;
|olympiads.ru&lt;br /&gt;
|194.58.88.173&lt;br /&gt;
|Сайт городской предметно-методической комиссии ВсОШ по информатике&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|87.250.250.119&lt;br /&gt;
87.250.251.119&lt;br /&gt;
&lt;br /&gt;
93.158.134.119&lt;br /&gt;
&lt;br /&gt;
77.88.21.119&lt;br /&gt;
|Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу&lt;br /&gt;
|-&lt;br /&gt;
|os.mos.ru&lt;br /&gt;
repo.os.mos.ru&lt;br /&gt;
|37.230.149.17&lt;br /&gt;
|Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.&lt;br /&gt;
|-&lt;br /&gt;
|marketplace.visualstudio.com&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Магазин расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|main.vscode-cdn.net&lt;br /&gt;
|13.107.246.53&lt;br /&gt;
13.107.213.53&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-python.gallerycdn.vsassets.io&lt;br /&gt;
|2.23.167.106/24&lt;br /&gt;
212.188.39.24/24&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|it-help-school.ru&lt;br /&gt;
|91.221.70.4&lt;br /&gt;
|Этот сайт, для доступа к техническим инструкциям&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Настройка МОС-12 ===&lt;br /&gt;
Подробности о настройке файрвола в МОС-12 в статье [[Блокировка интернета в МОС-12 при помощи nftables]]&lt;br /&gt;
&lt;br /&gt;
В МОС-12 можно записать в файл &#039;&#039;&#039;/etc/sysconfig/nftables.conf&#039;&#039;&#039; следующий набор правил:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain input {&lt;br /&gt;
        # Правила обработки входящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты всех установленных соединений&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh&lt;br /&gt;
        tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS&lt;br /&gt;
        tcp dport 53 accept&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon&lt;br /&gt;
        tcp dport 11100 accept&lt;br /&gt;
        tcp dport 11200 accept&lt;br /&gt;
        tcp dport 11300 accept&lt;br /&gt;
        tcp dport 11400 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем входящий ping&lt;br /&gt;
        icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)&lt;br /&gt;
        iif lo accept&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain output {&lt;br /&gt;
        # Правила обработки исходящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook output priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем все установленные соединения&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 UDP для работы DNS&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 5353 UDP для работы mDNS&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на UDP порт 123 для работы NTP&lt;br /&gt;
        udp dport 123 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на этот же компьютер (lo-интерфейс)&lt;br /&gt;
        oif lo accept&lt;br /&gt;
&lt;br /&gt;
        # Далее идёт белый список сайтов, к которым должен быть открыт доступ&lt;br /&gt;
&lt;br /&gt;
        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком&lt;br /&gt;
        ip daddr 10.0.0.0/8 accept&lt;br /&gt;
&lt;br /&gt;
        # *.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.0/24 accept&lt;br /&gt;
&lt;br /&gt;
        # mc.yandex.ru&lt;br /&gt;
        ip daddr 87.250.250.119 accept&lt;br /&gt;
        ip daddr 87.250.251.119 accept&lt;br /&gt;
        ip daddr 93.158.134.119 accept&lt;br /&gt;
        ip daddr 77.88.21.119 accept&lt;br /&gt;
&lt;br /&gt;
        # online.olimpiada.ru&lt;br /&gt;
        ip daddr 212.193.155.35 accept&lt;br /&gt;
        ip daddr 46.235.186.69 accept&lt;br /&gt;
        ip daddr 46.235.188.68 accept&lt;br /&gt;
        &lt;br /&gt;
        # fonts.googleapis.com&lt;br /&gt;
        ip daddr 142.250.184.234 accept&lt;br /&gt;
&lt;br /&gt;
        # vos.olimpiada.ru&lt;br /&gt;
        ip daddr 185.178.208.183 accept&lt;br /&gt;
&lt;br /&gt;
        # всош.цпм.рф&lt;br /&gt;
        ip daddr 185.30.228.25 accept&lt;br /&gt;
&lt;br /&gt;
        # olympiads.ru&lt;br /&gt;
        ip daddr 194.58.88.173 accept&lt;br /&gt;
&lt;br /&gt;
        # os.mos.ru, repo.os.mos.ru&lt;br /&gt;
        ip daddr 37.230.149.17 accept&lt;br /&gt;
&lt;br /&gt;
        # marketplace.visualstudio.com&lt;br /&gt;
        ip daddr 150.171.73.16 accept&lt;br /&gt;
        ip daddr 150.171.74.16 accept&lt;br /&gt;
&lt;br /&gt;
        # main.vscode-cdn.net&lt;br /&gt;
        ip daddr 13.107.246.53 accept&lt;br /&gt;
        ip daddr 13.107.213.53 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-python.gallerycdn.vsassets.io&lt;br /&gt;
        ip daddr 2.23.167.106/24 accept&lt;br /&gt;
        ip daddr 212.188.39.24/24 accept&lt;br /&gt;
&lt;br /&gt;
        # it-help-school.ru&lt;br /&gt;
        ip daddr 91.221.70.4 accept&lt;br /&gt;
&lt;br /&gt;
        # Это правило делает reject на все остальные соединения&lt;br /&gt;
        # на порт 80 (http) и 443 (https), в результате&lt;br /&gt;
        # браузер не будет ждать загрузки недоступных ресурсов&lt;br /&gt;
        tcp dport 80 reject&lt;br /&gt;
        tcp dport 443 reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем выполните команду для включения файрвола под root&lt;br /&gt;
 # systemctl enable --now nftables&lt;br /&gt;
&lt;br /&gt;
Для отключения фильтрации выполните команду&lt;br /&gt;
 # systemctl disable --now nftables&lt;br /&gt;
&lt;br /&gt;
=== Настройка Windows 10 и Windows 11 ===&lt;br /&gt;
В Windows 10 будем использовать стандартный файрвол Windows.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 5353 для работы mDNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к конкретным сайтам&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.0/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.0/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 212.193.155.35,46.235.186.69,46.235.188.68&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 212.193.155.35,46.235.186.69,46.235.188.68&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow fonts.googleapis.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 142.250.184.234&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow fonts.googleapis.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 142.250.184.234&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 &lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2502</id>
		<title>Блокировка интернета при проведении ВсОШ в Москве</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2502"/>
		<updated>2025-12-12T11:13:21Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Добавили fonts.googleapis.com&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При проведении муниципального этапа ВсОШ по информатике в Москве места проведения должны фильтровать доступ в интернет по указанным правилам. Фильтрация может быть осуществлена на сетевом оборудовании (роутере), централизованно для всех участников. При отсутствии роутера фильтрация осуществляется на каждом компьютере настройкой файрвола операционной системы.&lt;br /&gt;
&lt;br /&gt;
Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию [[Блокировка интернета в МОС при помощи iptables|Блокировка интернета в МОС при помощи iptables.]]&lt;br /&gt;
&lt;br /&gt;
Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.&lt;br /&gt;
&lt;br /&gt;
До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
=== Список необходимых разрешённых хостов ===&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
&lt;br /&gt;
* Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.&lt;br /&gt;
* DNS-протокол: UDP, порт 53.&lt;br /&gt;
*mDNS-протокол (zeroconf, Avahi): UDP порт 5353&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
* ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
* Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.&lt;br /&gt;
*Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.&lt;br /&gt;
* Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
&lt;br /&gt;
В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.&lt;br /&gt;
&lt;br /&gt;
Также должны быть разрешены соединения со следующими хостами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
!Зачем нужен&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|10.0.0.0/8&lt;br /&gt;
|Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования&lt;br /&gt;
|-&lt;br /&gt;
|school.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ и &amp;quot;Магазина приложений&amp;quot; МОС&lt;br /&gt;
|-&lt;br /&gt;
|uchebnik.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ&lt;br /&gt;
|-&lt;br /&gt;
|login.mos.ru&lt;br /&gt;
|94.79.51.0/24&lt;br /&gt;
|Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru&lt;br /&gt;
|-&lt;br /&gt;
|online.olimpiada.ru&lt;br /&gt;
|212.193.155.35&lt;br /&gt;
46.235.186.69&lt;br /&gt;
&lt;br /&gt;
46.235.188.68&lt;br /&gt;
|Резервная тестирующая система&lt;br /&gt;
|-&lt;br /&gt;
|fonts.googleapis.com&lt;br /&gt;
|142.250.184.234&lt;br /&gt;
|Шрифты для online.olimpiada.ru&lt;br /&gt;
|-&lt;br /&gt;
|vos.olimpiada.ru&lt;br /&gt;
|185.178.208.183&lt;br /&gt;
|Сайт ВсОШ в Москве&lt;br /&gt;
|-&lt;br /&gt;
|всош.цпм.рф&lt;br /&gt;
|185.30.228.25&lt;br /&gt;
|Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)&lt;br /&gt;
|-&lt;br /&gt;
|olympiads.ru&lt;br /&gt;
|194.58.88.173&lt;br /&gt;
|Сайт городской предметно-методической комиссии ВсОШ по информатике&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|87.250.250.119&lt;br /&gt;
87.250.251.119&lt;br /&gt;
&lt;br /&gt;
93.158.134.119&lt;br /&gt;
&lt;br /&gt;
77.88.21.119&lt;br /&gt;
|Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу&lt;br /&gt;
|-&lt;br /&gt;
|os.mos.ru&lt;br /&gt;
repo.os.mos.ru&lt;br /&gt;
|37.230.149.17&lt;br /&gt;
|Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.&lt;br /&gt;
|-&lt;br /&gt;
|marketplace.visualstudio.com&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Магазин расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|main.vscode-cdn.net&lt;br /&gt;
|13.107.246.53&lt;br /&gt;
13.107.213.53&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-python.gallerycdn.vsassets.io&lt;br /&gt;
|2.23.167.106/24&lt;br /&gt;
212.188.39.24/24&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|it-help-school.ru&lt;br /&gt;
|91.221.70.4&lt;br /&gt;
|Этот сайт, для доступа к техническим инструкциям&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Настройка МОС-12 ===&lt;br /&gt;
Подробности о настройке файрвола в МОС-12 в статье [[Блокировка интернета в МОС-12 при помощи nftables]]&lt;br /&gt;
&lt;br /&gt;
В МОС-12 можно записать в файл &#039;&#039;&#039;/etc/sysconfig/nftables.conf&#039;&#039;&#039; следующий набор правил:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain input {&lt;br /&gt;
        # Правила обработки входящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты всех установленных соединений&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh&lt;br /&gt;
        tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS&lt;br /&gt;
        tcp dport 53 accept&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon&lt;br /&gt;
        tcp dport 11100 accept&lt;br /&gt;
        tcp dport 11200 accept&lt;br /&gt;
        tcp dport 11300 accept&lt;br /&gt;
        tcp dport 11400 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем входящий ping&lt;br /&gt;
        icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)&lt;br /&gt;
        iif lo accept&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain output {&lt;br /&gt;
        # Правила обработки исходящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook output priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем все установленные соединения&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 UDP для работы DNS&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 5353 UDP для работы mDNS&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на UDP порт 123 для работы NTP&lt;br /&gt;
        udp dport 123 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на этот же компьютер (lo-интерфейс)&lt;br /&gt;
        oif lo accept&lt;br /&gt;
&lt;br /&gt;
        # Далее идёт белый список сайтов, к которым должен быть открыт доступ&lt;br /&gt;
&lt;br /&gt;
        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком&lt;br /&gt;
        ip daddr 10.0.0.0/8 accept&lt;br /&gt;
&lt;br /&gt;
        # *.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.0/24 accept&lt;br /&gt;
&lt;br /&gt;
        # mc.yandex.ru&lt;br /&gt;
        ip daddr 87.250.250.119 accept&lt;br /&gt;
        ip daddr 87.250.251.119 accept&lt;br /&gt;
        ip daddr 93.158.134.119 accept&lt;br /&gt;
        ip daddr 77.88.21.119 accept&lt;br /&gt;
&lt;br /&gt;
        # online.olimpiada.ru&lt;br /&gt;
        ip daddr 212.193.155.35 accept&lt;br /&gt;
        ip daddr 46.235.186.69 accept&lt;br /&gt;
        ip daddr 46.235.188.68 accept&lt;br /&gt;
        &lt;br /&gt;
        # fonts.googleapis.com&lt;br /&gt;
        ip daddr 142.250.184.234 accept&lt;br /&gt;
&lt;br /&gt;
        # vos.olimpiada.ru&lt;br /&gt;
        ip daddr 185.178.208.183 accept&lt;br /&gt;
&lt;br /&gt;
        # всош.цпм.рф&lt;br /&gt;
        ip daddr 185.30.228.25 accept&lt;br /&gt;
&lt;br /&gt;
        # olympiads.ru&lt;br /&gt;
        ip daddr 194.58.88.173 accept&lt;br /&gt;
&lt;br /&gt;
        # os.mos.ru, repo.os.mos.ru&lt;br /&gt;
        ip daddr 37.230.149.17 accept&lt;br /&gt;
&lt;br /&gt;
        # marketplace.visualstudio.com&lt;br /&gt;
        ip daddr 150.171.73.16 accept&lt;br /&gt;
        ip daddr 150.171.74.16 accept&lt;br /&gt;
&lt;br /&gt;
        # main.vscode-cdn.net&lt;br /&gt;
        ip daddr 13.107.246.53 accept&lt;br /&gt;
        ip daddr 13.107.213.53 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-python.gallerycdn.vsassets.io&lt;br /&gt;
        ip daddr 2.23.167.106/24 accept&lt;br /&gt;
        ip daddr 212.188.39.24/24 accept&lt;br /&gt;
&lt;br /&gt;
        # it-help-school.ru&lt;br /&gt;
        ip daddr 91.221.70.4 accept&lt;br /&gt;
&lt;br /&gt;
        # Это правило делает reject на все остальные соединения&lt;br /&gt;
        # на порт 80 (http) и 443 (https), в результате&lt;br /&gt;
        # браузер не будет ждать загрузки недоступных ресурсов&lt;br /&gt;
        tcp dport 80 reject&lt;br /&gt;
        tcp dport 443 reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем выполните команды для включения файрвола под root&lt;br /&gt;
 # systemctl enable nftables&lt;br /&gt;
 # systemctl start nftables&lt;br /&gt;
Для отключения фильтрации выполните команды&lt;br /&gt;
 # systemctl disable nftables&lt;br /&gt;
 # systemctl stop nftables&lt;br /&gt;
&lt;br /&gt;
=== Настройка Windows 10 и Windows 11 ===&lt;br /&gt;
В Windows 10 будем использовать стандартный файрвол Windows.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 5353 для работы mDNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к конкретным сайтам&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.0/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow .mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.0/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 212.193.155.35,46.235.186.69,46.235.188.68&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 212.193.155.35,46.235.186.69,46.235.188.68&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow fonts.googleapis.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 142.250.184.234&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow fonts.googleapis.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 142.250.184.234&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 &lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2501</id>
		<title>Блокировка интернета при проведении ВсОШ в Москве</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2501"/>
		<updated>2025-12-12T09:46:53Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При проведении муниципального этапа ВсОШ по информатике в Москве места проведения должны фильтровать доступ в интернет по указанным правилам. Фильтрация может быть осуществлена на сетевом оборудовании (роутере), централизованно для всех участников. При отсутствии роутера фильтрация осуществляется на каждом компьютере настройкой файрвола операционной системы.&lt;br /&gt;
&lt;br /&gt;
Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию [[Блокировка интернета в МОС при помощи iptables|Блокировка интернета в МОС при помощи iptables.]]&lt;br /&gt;
&lt;br /&gt;
Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.&lt;br /&gt;
&lt;br /&gt;
До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
=== Список необходимых разрешённых хостов ===&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
&lt;br /&gt;
* Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.&lt;br /&gt;
* DNS-протокол: UDP, порт 53.&lt;br /&gt;
*mDNS-протокол (zeroconf, Avahi): UDP порт 5353&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
* ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
* Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.&lt;br /&gt;
*Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.&lt;br /&gt;
* Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
&lt;br /&gt;
В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.&lt;br /&gt;
&lt;br /&gt;
Также должны быть разрешены соединения со следующими хостами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
!Зачем нужен&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|10.0.0.0/8&lt;br /&gt;
|Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования&lt;br /&gt;
|-&lt;br /&gt;
|school.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ и &amp;quot;Магазина приложений&amp;quot; МОС&lt;br /&gt;
|-&lt;br /&gt;
|uchebnik.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ&lt;br /&gt;
|-&lt;br /&gt;
|login.mos.ru&lt;br /&gt;
|94.79.51.0/24&lt;br /&gt;
|Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru&lt;br /&gt;
|-&lt;br /&gt;
|online.olimpiada.ru&lt;br /&gt;
|212.193.155.35&lt;br /&gt;
46.235.186.69&lt;br /&gt;
&lt;br /&gt;
46.235.188.68&lt;br /&gt;
&lt;br /&gt;
78.41.110.69&lt;br /&gt;
&lt;br /&gt;
93.93.88.23&lt;br /&gt;
&lt;br /&gt;
212.193.144.0/20&lt;br /&gt;
|Резервная тестирующая система&lt;br /&gt;
|-&lt;br /&gt;
|vos.olimpiada.ru&lt;br /&gt;
|185.178.208.183&lt;br /&gt;
|Сайт ВсОШ в Москве&lt;br /&gt;
|-&lt;br /&gt;
|всош.цпм.рф&lt;br /&gt;
|185.30.228.25&lt;br /&gt;
|Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)&lt;br /&gt;
|-&lt;br /&gt;
|olympiads.ru&lt;br /&gt;
|194.58.88.173&lt;br /&gt;
|Сайт городской предметно-методической комиссии ВсОШ по информатике&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|87.250.250.119&lt;br /&gt;
87.250.251.119&lt;br /&gt;
&lt;br /&gt;
93.158.134.119&lt;br /&gt;
&lt;br /&gt;
77.88.21.119&lt;br /&gt;
|Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу&lt;br /&gt;
|-&lt;br /&gt;
|os.mos.ru&lt;br /&gt;
repo.os.mos.ru&lt;br /&gt;
|37.230.149.17&lt;br /&gt;
|Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.&lt;br /&gt;
|-&lt;br /&gt;
|marketplace.visualstudio.com&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Магазин расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|main.vscode-cdn.net&lt;br /&gt;
|13.107.246.53&lt;br /&gt;
13.107.213.53&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-python.gallerycdn.vsassets.io&lt;br /&gt;
|2.23.167.106/24&lt;br /&gt;
212.188.39.24/24&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|it-help-school.ru&lt;br /&gt;
|91.221.70.4&lt;br /&gt;
|Этот сайт, для доступа к техническим инструкциям&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Настройка МОС-12 ===&lt;br /&gt;
Подробности о настройке файрвола в МОС-12 в статье [[Блокировка интернета в МОС-12 при помощи nftables]]&lt;br /&gt;
&lt;br /&gt;
В МОС-12 можно записать в файл &#039;&#039;&#039;/etc/sysconfig/nftables.conf&#039;&#039;&#039; следующий набор правил:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain input {&lt;br /&gt;
        # Правила обработки входящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты всех установленных соединений&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh&lt;br /&gt;
        tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS&lt;br /&gt;
        tcp dport 53 accept&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon&lt;br /&gt;
        tcp dport 11100 accept&lt;br /&gt;
        tcp dport 11200 accept&lt;br /&gt;
        tcp dport 11300 accept&lt;br /&gt;
        tcp dport 11400 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем входящий ping&lt;br /&gt;
        icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)&lt;br /&gt;
        iif lo accept&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain output {&lt;br /&gt;
        # Правила обработки исходящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook output priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем все установленные соединения&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 UDP для работы DNS&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 5353 UDP для работы mDNS&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на UDP порт 123 для работы NTP&lt;br /&gt;
        udp dport 123 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на этот же компьютер (lo-интерфейс)&lt;br /&gt;
        oif lo accept&lt;br /&gt;
&lt;br /&gt;
        # Далее идёт белый список сайтов, к которым должен быть открыт доступ&lt;br /&gt;
&lt;br /&gt;
        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком&lt;br /&gt;
        ip daddr 10.0.0.0/8 accept&lt;br /&gt;
&lt;br /&gt;
        # school.mos.ru, uchebnik.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.184 accept&lt;br /&gt;
        ip daddr 94.79.51.185 accept&lt;br /&gt;
        ip daddr 94.79.51.186 accept&lt;br /&gt;
&lt;br /&gt;
        # login.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.0/24 accept&lt;br /&gt;
&lt;br /&gt;
        # mc.yandex.ru&lt;br /&gt;
        ip daddr 87.250.250.119 accept&lt;br /&gt;
        ip daddr 87.250.251.119 accept&lt;br /&gt;
        ip daddr 93.158.134.119 accept&lt;br /&gt;
        ip daddr 77.88.21.119 accept&lt;br /&gt;
&lt;br /&gt;
        # online.olimpiada.ru&lt;br /&gt;
        ip daddr 212.193.155.35 accept&lt;br /&gt;
        ip daddr 46.235.186.69 accept&lt;br /&gt;
        ip daddr 46.235.188.68 accept&lt;br /&gt;
        ip daddr 78.41.110.69 accept&lt;br /&gt;
        ip daddr 93.93.88.23 accept&lt;br /&gt;
        ip daddr 212.193.144.0/20 accept&lt;br /&gt;
&lt;br /&gt;
        # vos.olimpiada.ru&lt;br /&gt;
        ip daddr 185.178.208.183 accept&lt;br /&gt;
&lt;br /&gt;
        # всош.цпм.рф&lt;br /&gt;
        ip daddr 185.30.228.25 accept&lt;br /&gt;
&lt;br /&gt;
        # olympiads.ru&lt;br /&gt;
        ip daddr 194.58.88.173 accept&lt;br /&gt;
&lt;br /&gt;
        # os.mos.ru, repo.os.mos.ru&lt;br /&gt;
        ip daddr 37.230.149.17 accept&lt;br /&gt;
&lt;br /&gt;
        # marketplace.visualstudio.com&lt;br /&gt;
        ip daddr 150.171.73.16 accept&lt;br /&gt;
        ip daddr 150.171.74.16 accept&lt;br /&gt;
&lt;br /&gt;
        # main.vscode-cdn.net&lt;br /&gt;
        ip daddr 13.107.246.53 accept&lt;br /&gt;
        ip daddr 13.107.213.53 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-python.gallerycdn.vsassets.io&lt;br /&gt;
        ip daddr 2.23.167.106/24 accept&lt;br /&gt;
        ip daddr 212.188.39.24/24 accept&lt;br /&gt;
&lt;br /&gt;
        # it-help-school.ru&lt;br /&gt;
        ip daddr 91.221.70.4 accept&lt;br /&gt;
&lt;br /&gt;
        # Это правило делает reject на все остальные соединения&lt;br /&gt;
        # на порт 80 (http) и 443 (https), в результате&lt;br /&gt;
        # браузер не будет ждать загрузки недоступных ресурсов&lt;br /&gt;
        tcp dport 80 reject&lt;br /&gt;
        tcp dport 443 reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем выполните команды для включения файрвола под root&lt;br /&gt;
 # systemctl enable nftables&lt;br /&gt;
 # systemctl start nftables&lt;br /&gt;
Для отключения фильтрации выполните команды&lt;br /&gt;
 # systemctl disable nftables&lt;br /&gt;
 # systemctl stop nftables&lt;br /&gt;
&lt;br /&gt;
=== Настройка Windows 10 и Windows 11 ===&lt;br /&gt;
В Windows 10 будем использовать стандартный файрвол Windows.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 5353 для работы mDNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к конкретным сайтам&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.184,94.79.51.185,94.79.51.186&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.184,94.79.51.185,94.79.51.186&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.0/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.0/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 212.193.155.35,46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 212.193.155.35,46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 &lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2500</id>
		<title>Блокировка интернета при проведении ВсОШ в Москве</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2500"/>
		<updated>2025-12-11T09:35:29Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При проведении муниципального этапа ВсОШ по информатике в Москве места проведения должны фильтровать доступ в интернет по указанным правилам. Фильтрация может быть осуществлена на сетевом оборудовании (роутере), централизованно для всех участников. При отсутствии роутера фильтрация осуществляется на каждом компьютере настройкой файрвола операционной системы.&lt;br /&gt;
&lt;br /&gt;
Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию [[Блокировка интернета в МОС при помощи iptables|Блокировка интернета в МОС при помощи iptables.]]&lt;br /&gt;
&lt;br /&gt;
Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.&lt;br /&gt;
&lt;br /&gt;
До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
=== Список необходимых разрешённых хостов ===&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
&lt;br /&gt;
* Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.&lt;br /&gt;
* DNS-протокол: UDP, порт 53.&lt;br /&gt;
*mDNS-протокол (zeroconf, Avahi): UDP порт 5353&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
* ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
* Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.&lt;br /&gt;
*Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.&lt;br /&gt;
* Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
&lt;br /&gt;
В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.&lt;br /&gt;
&lt;br /&gt;
Также должны быть разрешены соединения со следующими хостами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
!Зачем нужен&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|10.0.0.0/8&lt;br /&gt;
|Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования&lt;br /&gt;
|-&lt;br /&gt;
|school.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ и &amp;quot;Магазина приложений&amp;quot; МОС&lt;br /&gt;
|-&lt;br /&gt;
|uchebnik.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ&lt;br /&gt;
|-&lt;br /&gt;
|login.mos.ru&lt;br /&gt;
|94.79.51.0/24&lt;br /&gt;
|Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru&lt;br /&gt;
|-&lt;br /&gt;
|online.olimpiada.ru&lt;br /&gt;
|46.235.186.69&lt;br /&gt;
46.235.188.68&lt;br /&gt;
&lt;br /&gt;
78.41.110.69&lt;br /&gt;
&lt;br /&gt;
93.93.88.23&lt;br /&gt;
&lt;br /&gt;
212.193.144.0/20&lt;br /&gt;
|Резервная тестирующая система&lt;br /&gt;
|-&lt;br /&gt;
|vos.olimpiada.ru&lt;br /&gt;
|185.178.208.183&lt;br /&gt;
|Сайт ВсОШ в Москве&lt;br /&gt;
|-&lt;br /&gt;
|всош.цпм.рф&lt;br /&gt;
|185.30.228.25&lt;br /&gt;
|Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)&lt;br /&gt;
|-&lt;br /&gt;
|olympiads.ru&lt;br /&gt;
|194.58.88.173&lt;br /&gt;
|Сайт городской предметно-методической комиссии ВсОШ по информатике&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|87.250.250.119&lt;br /&gt;
87.250.251.119&lt;br /&gt;
&lt;br /&gt;
93.158.134.119&lt;br /&gt;
&lt;br /&gt;
77.88.21.119&lt;br /&gt;
|Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу&lt;br /&gt;
|-&lt;br /&gt;
|os.mos.ru&lt;br /&gt;
repo.os.mos.ru&lt;br /&gt;
|37.230.149.17&lt;br /&gt;
|Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.&lt;br /&gt;
|-&lt;br /&gt;
|marketplace.visualstudio.com&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Магазин расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|main.vscode-cdn.net&lt;br /&gt;
|13.107.246.53&lt;br /&gt;
13.107.213.53&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-python.gallerycdn.vsassets.io&lt;br /&gt;
|2.23.167.106/24&lt;br /&gt;
212.188.39.24/24&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|it-help-school.ru&lt;br /&gt;
|91.221.70.4&lt;br /&gt;
|Этот сайт, для доступа к техническим инструкциям&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Настройка МОС-12 ===&lt;br /&gt;
Подробности о настройке файрвола в МОС-12 в статье [[Блокировка интернета в МОС-12 при помощи nftables]]&lt;br /&gt;
&lt;br /&gt;
В МОС-12 можно записать в файл &#039;&#039;&#039;/etc/sysconfig/nftables.conf&#039;&#039;&#039; следующий набор правил:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain input {&lt;br /&gt;
        # Правила обработки входящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты всех установленных соединений&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh&lt;br /&gt;
        tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS&lt;br /&gt;
        tcp dport 53 accept&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon&lt;br /&gt;
        tcp dport 11100 accept&lt;br /&gt;
        tcp dport 11200 accept&lt;br /&gt;
        tcp dport 11300 accept&lt;br /&gt;
        tcp dport 11400 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем входящий ping&lt;br /&gt;
        icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)&lt;br /&gt;
        iif lo accept&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain output {&lt;br /&gt;
        # Правила обработки исходящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook output priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем все установленные соединения&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 UDP для работы DNS&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 5353 UDP для работы mDNS&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на UDP порт 123 для работы NTP&lt;br /&gt;
        udp dport 123 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на этот же компьютер (lo-интерфейс)&lt;br /&gt;
        oif lo accept&lt;br /&gt;
&lt;br /&gt;
        # Далее идёт белый список сайтов, к которым должен быть открыт доступ&lt;br /&gt;
&lt;br /&gt;
        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком&lt;br /&gt;
        ip daddr 10.0.0.0/8 accept&lt;br /&gt;
&lt;br /&gt;
        # school.mos.ru, uchebnik.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.184 accept&lt;br /&gt;
        ip daddr 94.79.51.185 accept&lt;br /&gt;
        ip daddr 94.79.51.186 accept&lt;br /&gt;
&lt;br /&gt;
        # login.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.0/24 accept&lt;br /&gt;
&lt;br /&gt;
        # mc.yandex.ru&lt;br /&gt;
        ip daddr 87.250.250.119 accept&lt;br /&gt;
        ip daddr 87.250.251.119 accept&lt;br /&gt;
        ip daddr 93.158.134.119 accept&lt;br /&gt;
        ip daddr 77.88.21.119 accept&lt;br /&gt;
&lt;br /&gt;
        # online.olimpiada.ru&lt;br /&gt;
        ip daddr 46.235.186.69 accept&lt;br /&gt;
        ip daddr 46.235.188.68 accept&lt;br /&gt;
        ip daddr 78.41.110.69 accept&lt;br /&gt;
        ip daddr 93.93.88.23 accept&lt;br /&gt;
        ip daddr 212.193.144.0/20 accept&lt;br /&gt;
&lt;br /&gt;
        # vos.olimpiada.ru&lt;br /&gt;
        ip daddr 185.178.208.183 accept&lt;br /&gt;
&lt;br /&gt;
        # всош.цпм.рф&lt;br /&gt;
        ip daddr 185.30.228.25 accept&lt;br /&gt;
&lt;br /&gt;
        # olympiads.ru&lt;br /&gt;
        ip daddr 194.58.88.173 accept&lt;br /&gt;
&lt;br /&gt;
        # os.mos.ru, repo.os.mos.ru&lt;br /&gt;
        ip daddr 37.230.149.17 accept&lt;br /&gt;
&lt;br /&gt;
        # marketplace.visualstudio.com&lt;br /&gt;
        ip daddr 150.171.73.16 accept&lt;br /&gt;
        ip daddr 150.171.74.16 accept&lt;br /&gt;
&lt;br /&gt;
        # main.vscode-cdn.net&lt;br /&gt;
        ip daddr 13.107.246.53 accept&lt;br /&gt;
        ip daddr 13.107.213.53 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-python.gallerycdn.vsassets.io&lt;br /&gt;
        ip daddr 2.23.167.106/24 accept&lt;br /&gt;
        ip daddr 212.188.39.24/24 accept&lt;br /&gt;
&lt;br /&gt;
        # it-help-school.ru&lt;br /&gt;
        ip daddr 91.221.70.4 accept&lt;br /&gt;
&lt;br /&gt;
        # Это правило делает reject на все остальные соединения&lt;br /&gt;
        # на порт 80 (http) и 443 (https), в результате&lt;br /&gt;
        # браузер не будет ждать загрузки недоступных ресурсов&lt;br /&gt;
        tcp dport 80 reject&lt;br /&gt;
        tcp dport 443 reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем выполните команды для включения файрвола под root&lt;br /&gt;
 # systemctl enable nftables&lt;br /&gt;
 # systemctl start nftables&lt;br /&gt;
Для отключения фильтрации выполните команды&lt;br /&gt;
 # systemctl disable nftables&lt;br /&gt;
 # systemctl stop nftables&lt;br /&gt;
&lt;br /&gt;
=== Настройка Windows 10 и Windows 11 ===&lt;br /&gt;
В Windows 10 будем использовать стандартный файрвол Windows.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 5353 для работы mDNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к конкретным сайтам&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.184,94.79.51.185,94.79.51.186&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.184,94.79.51.185,94.79.51.186&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.0/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.0/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 &lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2492</id>
		<title>Блокировка интернета при проведении ВсОШ в Москве</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2492"/>
		<updated>2025-12-08T14:53:50Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Обновление адресов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При проведении муниципального этапа ВсОШ по информатике в Москве места проведения должны фильтровать доступ в интернет по указанным правилам. Фильтрация может быть осуществлена на сетевом оборудовании (роутере), централизованно для всех участников. При отсутствии роутера фильтрация осуществляется на каждом компьютере настройкой файрвола операционной системы.&lt;br /&gt;
&lt;br /&gt;
Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию [[Блокировка интернета в МОС при помощи iptables|Блокировка интернета в МОС при помощи iptables.]]&lt;br /&gt;
&lt;br /&gt;
Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.&lt;br /&gt;
&lt;br /&gt;
До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
=== Список необходимых разрешённых хостов ===&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
&lt;br /&gt;
* Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.&lt;br /&gt;
* DNS-протокол: UDP, порт 53.&lt;br /&gt;
*mDNS-протокол (zeroconf, Avahi): UDP порт 5353&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
* ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
* Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.&lt;br /&gt;
*Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.&lt;br /&gt;
* Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
&lt;br /&gt;
В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.&lt;br /&gt;
&lt;br /&gt;
Также должны быть разрешены соединения со следующими хостами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
!Зачем нужен&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|10.0.0.0/8&lt;br /&gt;
|Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования&lt;br /&gt;
|-&lt;br /&gt;
|school.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ и &amp;quot;Магазина приложений&amp;quot; МОС&lt;br /&gt;
|-&lt;br /&gt;
|uchebnik.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ&lt;br /&gt;
|-&lt;br /&gt;
|login.mos.ru&lt;br /&gt;
|94.79.51.169&lt;br /&gt;
94.79.51.170&lt;br /&gt;
&lt;br /&gt;
94.79.51.171&lt;br /&gt;
|Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru&lt;br /&gt;
|-&lt;br /&gt;
|online.olimpiada.ru&lt;br /&gt;
|46.235.186.69&lt;br /&gt;
46.235.188.68&lt;br /&gt;
&lt;br /&gt;
78.41.110.69&lt;br /&gt;
&lt;br /&gt;
93.93.88.23&lt;br /&gt;
&lt;br /&gt;
212.193.144.0/20&lt;br /&gt;
|Резервная тестирующая система&lt;br /&gt;
|-&lt;br /&gt;
|vos.olimpiada.ru&lt;br /&gt;
|185.178.208.183&lt;br /&gt;
|Сайт ВсОШ в Москве&lt;br /&gt;
|-&lt;br /&gt;
|всош.цпм.рф&lt;br /&gt;
|185.30.228.25&lt;br /&gt;
|Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)&lt;br /&gt;
|-&lt;br /&gt;
|olympiads.ru&lt;br /&gt;
|194.58.88.173&lt;br /&gt;
|Сайт городской предметно-методической комиссии ВсОШ по информатике&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|87.250.250.119&lt;br /&gt;
87.250.251.119&lt;br /&gt;
&lt;br /&gt;
93.158.134.119&lt;br /&gt;
&lt;br /&gt;
77.88.21.119&lt;br /&gt;
|Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу&lt;br /&gt;
|-&lt;br /&gt;
|os.mos.ru&lt;br /&gt;
repo.os.mos.ru&lt;br /&gt;
|37.230.149.17&lt;br /&gt;
|Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.&lt;br /&gt;
|-&lt;br /&gt;
|marketplace.visualstudio.com&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Магазин расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|main.vscode-cdn.net&lt;br /&gt;
|13.107.246.53&lt;br /&gt;
13.107.213.53&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-python.gallerycdn.vsassets.io&lt;br /&gt;
|2.23.167.106/24&lt;br /&gt;
212.188.39.24/24&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|it-help-school.ru&lt;br /&gt;
|91.221.70.4&lt;br /&gt;
|Этот сайт, для доступа к техническим инструкциям&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Настройка МОС-12 ===&lt;br /&gt;
Подробности о настройке файрвола в МОС-12 в статье [[Блокировка интернета в МОС-12 при помощи nftables]]&lt;br /&gt;
&lt;br /&gt;
В МОС-12 можно записать в файл &#039;&#039;&#039;/etc/sysconfig/nftables.conf&#039;&#039;&#039; следующий набор правил:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain input {&lt;br /&gt;
        # Правила обработки входящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты всех установленных соединений&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh&lt;br /&gt;
        tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS&lt;br /&gt;
        tcp dport 53 accept&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon&lt;br /&gt;
        tcp dport 11100 accept&lt;br /&gt;
        tcp dport 11200 accept&lt;br /&gt;
        tcp dport 11300 accept&lt;br /&gt;
        tcp dport 11400 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем входящий ping&lt;br /&gt;
        icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)&lt;br /&gt;
        iif lo accept&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain output {&lt;br /&gt;
        # Правила обработки исходящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook output priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем все установленные соединения&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 UDP для работы DNS&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 5353 UDP для работы mDNS&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на UDP порт 123 для работы NTP&lt;br /&gt;
        udp dport 123 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на этот же компьютер (lo-интерфейс)&lt;br /&gt;
        oif lo accept&lt;br /&gt;
&lt;br /&gt;
        # Далее идёт белый список сайтов, к которым должен быть открыт доступ&lt;br /&gt;
&lt;br /&gt;
        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком&lt;br /&gt;
        ip daddr 10.0.0.0/8 accept&lt;br /&gt;
&lt;br /&gt;
        # school.mos.ru, uchebnik.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.184 accept&lt;br /&gt;
        ip daddr 94.79.51.185 accept&lt;br /&gt;
        ip daddr 94.79.51.186 accept&lt;br /&gt;
&lt;br /&gt;
        # login.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.169 accept&lt;br /&gt;
        ip daddr 94.79.51.170 accept&lt;br /&gt;
        ip daddr 94.79.51.171 accept&lt;br /&gt;
&lt;br /&gt;
        # mc.yandex.ru&lt;br /&gt;
        ip daddr 87.250.250.119 accept&lt;br /&gt;
        ip daddr 87.250.251.119 accept&lt;br /&gt;
        ip daddr 93.158.134.119 accept&lt;br /&gt;
        ip daddr 77.88.21.119 accept&lt;br /&gt;
&lt;br /&gt;
        # online.olimpiada.ru&lt;br /&gt;
        ip daddr 46.235.186.69 accept&lt;br /&gt;
        ip daddr 46.235.188.68 accept&lt;br /&gt;
        ip daddr 78.41.110.69 accept&lt;br /&gt;
        ip daddr 93.93.88.23 accept&lt;br /&gt;
        ip daddr 212.193.144.0/20 accept&lt;br /&gt;
&lt;br /&gt;
        # vos.olimpiada.ru&lt;br /&gt;
        ip daddr 185.178.208.183 accept&lt;br /&gt;
&lt;br /&gt;
        # всош.цпм.рф&lt;br /&gt;
        ip daddr 185.30.228.25 accept&lt;br /&gt;
&lt;br /&gt;
        # olympiads.ru&lt;br /&gt;
        ip daddr 194.58.88.173 accept&lt;br /&gt;
&lt;br /&gt;
        # os.mos.ru, repo.os.mos.ru&lt;br /&gt;
        ip daddr 37.230.149.17 accept&lt;br /&gt;
&lt;br /&gt;
        # marketplace.visualstudio.com&lt;br /&gt;
        ip daddr 150.171.73.16 accept&lt;br /&gt;
        ip daddr 150.171.74.16 accept&lt;br /&gt;
&lt;br /&gt;
        # main.vscode-cdn.net&lt;br /&gt;
        ip daddr 13.107.246.53 accept&lt;br /&gt;
        ip daddr 13.107.213.53 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-python.gallerycdn.vsassets.io&lt;br /&gt;
        ip daddr 2.23.167.106/24 accept&lt;br /&gt;
        ip daddr 212.188.39.24/24 accept&lt;br /&gt;
&lt;br /&gt;
        # it-help-school.ru&lt;br /&gt;
        ip daddr 91.221.70.4 accept&lt;br /&gt;
&lt;br /&gt;
        # Это правило делает reject на все остальные соединения&lt;br /&gt;
        # на порт 80 (http) и 443 (https), в результате&lt;br /&gt;
        # браузер не будет ждать загрузки недоступных ресурсов&lt;br /&gt;
        tcp dport 80 reject&lt;br /&gt;
        tcp dport 443 reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем выполните команды для включения файрвола под root&lt;br /&gt;
 # systemctl enable nftables&lt;br /&gt;
 # systemctl start nftables&lt;br /&gt;
Для отключения фильтрации выполните команды&lt;br /&gt;
 # systemctl disable nftables&lt;br /&gt;
 # systemctl stop nftables&lt;br /&gt;
&lt;br /&gt;
=== Настройка Windows 10 и Windows 11 ===&lt;br /&gt;
В Windows 10 будем использовать стандартный файрвол Windows.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 5353 для работы mDNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к конкретным сайтам&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.184,94.79.51.185,94.79.51.186&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.184,94.79.51.185,94.79.51.186&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 &lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 2.23.167.106/24,212.188.39.24/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2487</id>
		<title>Блокировка интернета при проведении ВсОШ в Москве</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2487"/>
		<updated>2025-12-08T13:36:58Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
При проведении муниципального этапа ВсОШ по информатике в Москве места проведения должны фильтровать доступ в интернет по указанным правилам. Фильтрация может быть осуществлена на сетевом оборудовании (роутере), централизованно для всех участников. При отсутствии роутера фильтрация осуществляется на каждом компьютере настройкой файрвола операционной системы.&lt;br /&gt;
&lt;br /&gt;
Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию [[Блокировка интернета в МОС при помощи iptables|Блокировка интернета в МОС при помощи iptables.]]&lt;br /&gt;
&lt;br /&gt;
Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.&lt;br /&gt;
&lt;br /&gt;
До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
=== Список необходимых разрешённых хостов ===&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
&lt;br /&gt;
* Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.&lt;br /&gt;
* DNS-протокол: UDP, порт 53.&lt;br /&gt;
*mDNS-протокол (zeroconf, Avahi): UDP порт 5353&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
* ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
* Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.&lt;br /&gt;
*Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.&lt;br /&gt;
* Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
&lt;br /&gt;
В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.&lt;br /&gt;
&lt;br /&gt;
Также должны быть разрешены соединения со следующими хостами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
!Зачем нужен&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|10.0.0.0/8&lt;br /&gt;
|Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования&lt;br /&gt;
|-&lt;br /&gt;
|school.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ и &amp;quot;Магазина приложений&amp;quot; МОС&lt;br /&gt;
|-&lt;br /&gt;
|uchebnik.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ&lt;br /&gt;
|-&lt;br /&gt;
|login.mos.ru&lt;br /&gt;
|94.79.51.169&lt;br /&gt;
94.79.51.170&lt;br /&gt;
&lt;br /&gt;
94.79.51.171&lt;br /&gt;
|Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru&lt;br /&gt;
|-&lt;br /&gt;
|online.olimpiada.ru&lt;br /&gt;
|46.235.186.69&lt;br /&gt;
46.235.188.68&lt;br /&gt;
&lt;br /&gt;
78.41.110.69&lt;br /&gt;
&lt;br /&gt;
93.93.88.23&lt;br /&gt;
&lt;br /&gt;
212.193.144.0/20&lt;br /&gt;
|Резервная тестирующая система&lt;br /&gt;
|-&lt;br /&gt;
|vos.olimpiada.ru&lt;br /&gt;
|185.178.208.183&lt;br /&gt;
|Сайт ВсОШ в Москве&lt;br /&gt;
|-&lt;br /&gt;
|всош.цпм.рф&lt;br /&gt;
|185.30.228.25&lt;br /&gt;
|Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)&lt;br /&gt;
|-&lt;br /&gt;
|olympiads.ru&lt;br /&gt;
|194.58.88.173&lt;br /&gt;
|Сайт городской предметно-методической комиссии ВсОШ по информатике&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|87.250.250.119&lt;br /&gt;
87.250.251.119&lt;br /&gt;
&lt;br /&gt;
93.158.134.119&lt;br /&gt;
&lt;br /&gt;
77.88.21.119&lt;br /&gt;
|Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу&lt;br /&gt;
|-&lt;br /&gt;
|os.mos.ru&lt;br /&gt;
repo.os.mos.ru&lt;br /&gt;
|37.230.149.17&lt;br /&gt;
|Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.&lt;br /&gt;
|-&lt;br /&gt;
|marketplace.visualstudio.com&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Магазин расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|main.vscode-cdn.net&lt;br /&gt;
|13.107.246.53&lt;br /&gt;
13.107.213.53&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-python.gallerycdn.vsassets.io&lt;br /&gt;
|2.23.167.106/24&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|it-help-school.ru&lt;br /&gt;
|91.221.70.4&lt;br /&gt;
|Этот сайт, для доступа к техническим инструкциям&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Настройка МОС-12 ===&lt;br /&gt;
Подробности о настройке файрвола в МОС-12 в статье [[Блокировка интернета в МОС-12 при помощи nftables]]&lt;br /&gt;
&lt;br /&gt;
В МОС-12 можно записать в файл &#039;&#039;&#039;/etc/sysconfig/nftables.conf&#039;&#039;&#039; следующий набор правил:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain input {&lt;br /&gt;
        # Правила обработки входящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты всех установленных соединений&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh&lt;br /&gt;
        tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS&lt;br /&gt;
        tcp dport 53 accept&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon&lt;br /&gt;
        tcp dport 11100 accept&lt;br /&gt;
        tcp dport 11200 accept&lt;br /&gt;
        tcp dport 11300 accept&lt;br /&gt;
        tcp dport 11400 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем входящий ping&lt;br /&gt;
        icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)&lt;br /&gt;
        iif lo accept&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain output {&lt;br /&gt;
        # Правила обработки исходящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook output priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем все установленные соединения&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 UDP для работы DNS&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 5353 UDP для работы mDNS&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на UDP порт 123 для работы NTP&lt;br /&gt;
        udp dport 123 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на этот же компьютер (lo-интерфейс)&lt;br /&gt;
        oif lo accept&lt;br /&gt;
&lt;br /&gt;
        # Далее идёт белый список сайтов, к которым должен быть открыт доступ&lt;br /&gt;
&lt;br /&gt;
        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком&lt;br /&gt;
        ip daddr 10.0.0.0/8 accept&lt;br /&gt;
&lt;br /&gt;
        # school.mos.ru, uchebnik.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.184 accept&lt;br /&gt;
        ip daddr 94.79.51.185 accept&lt;br /&gt;
        ip daddr 94.79.51.186 accept&lt;br /&gt;
&lt;br /&gt;
        # login.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.169 accept&lt;br /&gt;
        ip daddr 94.79.51.170 accept&lt;br /&gt;
        ip daddr 94.79.51.171 accept&lt;br /&gt;
&lt;br /&gt;
        # mc.yandex.ru&lt;br /&gt;
        ip daddr 87.250.250.119 accept&lt;br /&gt;
        ip daddr 87.250.251.119 accept&lt;br /&gt;
        ip daddr 93.158.134.119 accept&lt;br /&gt;
        ip daddr 77.88.21.119 accept&lt;br /&gt;
&lt;br /&gt;
        # online.olimpiada.ru&lt;br /&gt;
        ip daddr 46.235.186.69 accept&lt;br /&gt;
        ip daddr 46.235.188.68 accept&lt;br /&gt;
        ip daddr 78.41.110.69 accept&lt;br /&gt;
        ip daddr 93.93.88.23 accept&lt;br /&gt;
        ip daddr 212.193.144.0/20 accept&lt;br /&gt;
&lt;br /&gt;
        # vos.olimpiada.ru&lt;br /&gt;
        ip daddr 185.178.208.183 accept&lt;br /&gt;
&lt;br /&gt;
        # всош.цпм.рф&lt;br /&gt;
        ip daddr 185.30.228.25 accept&lt;br /&gt;
&lt;br /&gt;
        # olympiads.ru&lt;br /&gt;
        ip daddr 194.58.88.173 accept&lt;br /&gt;
&lt;br /&gt;
        # os.mos.ru, repo.os.mos.ru&lt;br /&gt;
        ip daddr 37.230.149.17 accept&lt;br /&gt;
&lt;br /&gt;
        # marketplace.visualstudio.com&lt;br /&gt;
        ip daddr 150.171.73.16 accept&lt;br /&gt;
        ip daddr 150.171.74.16 accept&lt;br /&gt;
&lt;br /&gt;
        # main.vscode-cdn.net&lt;br /&gt;
        ip daddr 13.107.246.53 accept&lt;br /&gt;
        ip daddr 13.107.213.53 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-python.gallerycdn.vsassets.io&lt;br /&gt;
        ip daddr 2.23.167.106/24 accept&lt;br /&gt;
&lt;br /&gt;
        # it-help-school.ru&lt;br /&gt;
        ip daddr 91.221.70.4 accept&lt;br /&gt;
&lt;br /&gt;
        # Это правило делает reject на все остальные соединения&lt;br /&gt;
        # на порт 80 (http) и 443 (https), в результате&lt;br /&gt;
        # браузер не будет ждать загрузки недоступных ресурсов&lt;br /&gt;
        tcp dport 80 reject&lt;br /&gt;
        tcp dport 443 reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем выполните команды для включения файрвола под root&lt;br /&gt;
 # systemctl enable nftables&lt;br /&gt;
 # systemctl start nftables&lt;br /&gt;
Для отключения фильтрации выполните команды&lt;br /&gt;
 # systemctl disable nftables&lt;br /&gt;
 # systemctl stop nftables&lt;br /&gt;
&lt;br /&gt;
=== Настройка Windows 10 и Windows 11 ===&lt;br /&gt;
В Windows 10 будем использовать стандартный файрвол Windows.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 5353 для работы mDNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к конкретным сайтам&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.184,94.79.51.185,94.79.51.186&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.184,94.79.51.185,94.79.51.186&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 &lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 150.171.73.16,150.171.74.16&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow main.vscode-cdn.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.246.53,13.107.213.53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 2.23.167.106/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-python.gallerycdn.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 2.23.167.106/24&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2486</id>
		<title>Блокировка интернета при проведении ВсОШ в Москве</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2486"/>
		<updated>2025-12-08T13:28:34Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
При проведении муниципального этапа ВсОШ по информатике в Москве места проведения должны фильтровать доступ в интернет по указанным правилам. Фильтрация может быть осуществлена на сетевом оборудовании (роутере), централизованно для всех участников. При отсутствии роутера фильтрация осуществляется на каждом компьютере настройкой файрвола операционной системы.&lt;br /&gt;
&lt;br /&gt;
Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию [[Блокировка интернета в МОС при помощи iptables|Блокировка интернета в МОС при помощи iptables.]]&lt;br /&gt;
&lt;br /&gt;
Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.&lt;br /&gt;
&lt;br /&gt;
До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
=== Список необходимых разрешённых хостов ===&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
&lt;br /&gt;
* Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.&lt;br /&gt;
* DNS-протокол: UDP, порт 53.&lt;br /&gt;
*mDNS-протокол (zeroconf, Avahi): UDP порт 5353&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
* ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
* Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.&lt;br /&gt;
*Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.&lt;br /&gt;
* Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
&lt;br /&gt;
В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.&lt;br /&gt;
&lt;br /&gt;
Также должны быть разрешены соединения со следующими хостами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
!Зачем нужен&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|10.0.0.0/8&lt;br /&gt;
|Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования&lt;br /&gt;
|-&lt;br /&gt;
|school.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ и &amp;quot;Магазина приложений&amp;quot; МОС&lt;br /&gt;
|-&lt;br /&gt;
|uchebnik.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ&lt;br /&gt;
|-&lt;br /&gt;
|login.mos.ru&lt;br /&gt;
|94.79.51.169&lt;br /&gt;
94.79.51.170&lt;br /&gt;
&lt;br /&gt;
94.79.51.171&lt;br /&gt;
|Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru&lt;br /&gt;
|-&lt;br /&gt;
|online.olimpiada.ru&lt;br /&gt;
|46.235.186.69&lt;br /&gt;
46.235.188.68&lt;br /&gt;
&lt;br /&gt;
78.41.110.69&lt;br /&gt;
&lt;br /&gt;
93.93.88.23&lt;br /&gt;
&lt;br /&gt;
212.193.144.0/20&lt;br /&gt;
|Резервная тестирующая система&lt;br /&gt;
|-&lt;br /&gt;
|vos.olimpiada.ru&lt;br /&gt;
|185.178.208.183&lt;br /&gt;
|Сайт ВсОШ в Москве&lt;br /&gt;
|-&lt;br /&gt;
|всош.цпм.рф&lt;br /&gt;
|185.30.228.25&lt;br /&gt;
|Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)&lt;br /&gt;
|-&lt;br /&gt;
|olympiads.ru&lt;br /&gt;
|194.58.88.173&lt;br /&gt;
|Сайт городской предметно-методической комиссии ВсОШ по информатике&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|87.250.250.119&lt;br /&gt;
87.250.251.119&lt;br /&gt;
&lt;br /&gt;
93.158.134.119&lt;br /&gt;
&lt;br /&gt;
77.88.21.119&lt;br /&gt;
|Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу&lt;br /&gt;
|-&lt;br /&gt;
|os.mos.ru&lt;br /&gt;
repo.os.mos.ru&lt;br /&gt;
|37.230.149.17&lt;br /&gt;
|Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.&lt;br /&gt;
|-&lt;br /&gt;
|marketplace.visualstudio.com&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Магазин расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|main.vscode-cdn.net&lt;br /&gt;
|13.107.246.53&lt;br /&gt;
13.107.213.53&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-python.gallerycdn.vsassets.io&lt;br /&gt;
|2.23.167.106/24&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|it-help-school.ru&lt;br /&gt;
|91.221.70.4&lt;br /&gt;
|Этот сайт, для доступа к техническим инструкциям&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Настройка МОС-12 ===&lt;br /&gt;
Подробности о настройке файрвола в МОС-12 в статье [[Блокировка интернета в МОС-12 при помощи nftables]]&lt;br /&gt;
&lt;br /&gt;
В МОС-12 можно записать в файл &#039;&#039;&#039;/etc/sysconfig/nftables.conf&#039;&#039;&#039; следующий набор правил:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain input {&lt;br /&gt;
        # Правила обработки входящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты всех установленных соединений&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh&lt;br /&gt;
        tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS&lt;br /&gt;
        tcp dport 53 accept&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon&lt;br /&gt;
        tcp dport 11100 accept&lt;br /&gt;
        tcp dport 11200 accept&lt;br /&gt;
        tcp dport 11300 accept&lt;br /&gt;
        tcp dport 11400 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем входящий ping&lt;br /&gt;
        icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)&lt;br /&gt;
        iif lo accept&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain output {&lt;br /&gt;
        # Правила обработки исходящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook output priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем все установленные соединения&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 UDP для работы DNS&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 5353 UDP для работы mDNS&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на UDP порт 123 для работы NTP&lt;br /&gt;
        udp dport 123 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на этот же компьютер (lo-интерфейс)&lt;br /&gt;
        oif lo accept&lt;br /&gt;
&lt;br /&gt;
        # Далее идёт белый список сайтов, к которым должен быть открыт доступ&lt;br /&gt;
&lt;br /&gt;
        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком&lt;br /&gt;
        ip daddr 10.0.0.0/8 accept&lt;br /&gt;
&lt;br /&gt;
        # school.mos.ru, uchebnik.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.184 accept&lt;br /&gt;
        ip daddr 94.79.51.185 accept&lt;br /&gt;
        ip daddr 94.79.51.186 accept&lt;br /&gt;
&lt;br /&gt;
        # login.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.169 accept&lt;br /&gt;
        ip daddr 94.79.51.170 accept&lt;br /&gt;
        ip daddr 94.79.51.171 accept&lt;br /&gt;
&lt;br /&gt;
        # mc.yandex.ru&lt;br /&gt;
        ip daddr 87.250.250.119 accept&lt;br /&gt;
        ip daddr 87.250.251.119 accept&lt;br /&gt;
        ip daddr 93.158.134.119 accept&lt;br /&gt;
        ip daddr 77.88.21.119 accept&lt;br /&gt;
&lt;br /&gt;
        # online.olimpiada.ru&lt;br /&gt;
        ip daddr 46.235.186.69 accept&lt;br /&gt;
        ip daddr 46.235.188.68 accept&lt;br /&gt;
        ip daddr 78.41.110.69 accept&lt;br /&gt;
        ip daddr 93.93.88.23 accept&lt;br /&gt;
        ip daddr 212.193.144.0/20 accept&lt;br /&gt;
&lt;br /&gt;
        # vos.olimpiada.ru&lt;br /&gt;
        ip daddr 185.178.208.183 accept&lt;br /&gt;
&lt;br /&gt;
        # всош.цпм.рф&lt;br /&gt;
        ip daddr 185.30.228.25 accept&lt;br /&gt;
&lt;br /&gt;
        # olympiads.ru&lt;br /&gt;
        ip daddr 194.58.88.173 accept&lt;br /&gt;
&lt;br /&gt;
        # os.mos.ru, repo.os.mos.ru&lt;br /&gt;
        ip daddr 37.230.149.17 accept&lt;br /&gt;
&lt;br /&gt;
        # marketplace.visualstudio.com&lt;br /&gt;
        ip daddr 150.171.73.16 accept&lt;br /&gt;
        ip daddr 150.171.74.16 accept&lt;br /&gt;
&lt;br /&gt;
        # main.vscode-cdn.net&lt;br /&gt;
        ip daddr 13.107.246.53 accept&lt;br /&gt;
        ip daddr 13.107.213.53 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-python.gallerycdn.vsassets.io&lt;br /&gt;
        ip daddr 2.23.167.106/24 accept&lt;br /&gt;
&lt;br /&gt;
        # it-help-school.ru&lt;br /&gt;
        ip daddr 91.221.70.4 accept&lt;br /&gt;
&lt;br /&gt;
        # Это правило делает reject на все остальные соединения&lt;br /&gt;
        # на порт 80 (http) и 443 (https), в результате&lt;br /&gt;
        # браузер не будет ждать загрузки недоступных ресурсов&lt;br /&gt;
        tcp dport 80 reject&lt;br /&gt;
        tcp dport 443 reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем выполните команды для включения файрвола под root&lt;br /&gt;
 # systemctl enable nftables&lt;br /&gt;
 # systemctl start nftables&lt;br /&gt;
Для отключения фильтрации выполните команды&lt;br /&gt;
 # systemctl disable nftables&lt;br /&gt;
 # systemctl stop nftables&lt;br /&gt;
&lt;br /&gt;
=== Настройка Windows 10 и Windows 11 ===&lt;br /&gt;
В Windows 10 будем использовать стандартный файрвол Windows.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 5353 для работы mDNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к конкретным сайтам&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.81,94.79.51.82,94.79.51.83&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.81,94.79.51.82,94.79.51.83&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 &lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.42.18&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.42.18&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-vscode.gallerycdn.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 68.232.34.200&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-vscode.gallerycdn.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 68.232.34.200&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-vscode.gallery.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.6.175&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-vscode.gallery.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.6.175&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow az764295.vo.msecnd.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 152.199.19.160&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow az764295.vo.msecnd.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 152.199.19.160&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%9A%D1%83%D0%9C%D0%B8%D1%80&amp;diff=2482</id>
		<title>КуМир</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%9A%D1%83%D0%9C%D0%B8%D1%80&amp;diff=2482"/>
		<updated>2025-12-08T12:17:53Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Учебная среда программирования для младших школьников, содержит ряд исполнителей, таких как &amp;quot;Робот&amp;quot;, &amp;quot;Черепаха&amp;quot;, &amp;quot;Чертёжник&amp;quot; и проч.&lt;br /&gt;
&lt;br /&gt;
Сайт: https://www.niisi.ru&lt;br /&gt;
&lt;br /&gt;
== Установка в МОС-12 ==&lt;br /&gt;
В системе МОС-12 можно установить из магазина приложений или командой&lt;br /&gt;
 # dnf install kumir-all&lt;br /&gt;
&lt;br /&gt;
== Установка в Windows ==&lt;br /&gt;
Скачайте файл https://www.niisi.ru/kumir/kumir2-2.1.0-rc11-install.exe и запустите с правами администратора.&lt;br /&gt;
[[Категория:Приложения]][[Категория:Языки_программирования]][[Категория:Разработка]][[Категория:Программирование]][[Категория:Информатика]]&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=PascalABC.NET&amp;diff=2481</id>
		<title>PascalABC.NET</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=PascalABC.NET&amp;diff=2481"/>
		<updated>2025-12-08T12:16:32Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Сайт: https://pascalabc.net/&lt;br /&gt;
&lt;br /&gt;
==Установка в МОС-12 (дистрибутив 2023 года на РОСА)==&lt;br /&gt;
В системе МОС-12 PascalABC.NET можно установить из магазина приложений или командой&lt;br /&gt;
 # dnf install pascalabcnet&lt;br /&gt;
&lt;br /&gt;
==Установка в МОС-10 (дистрибутив 2022 года на базе ALT Linux) при помощи epm==&lt;br /&gt;
В систему МОС PascalABC.NET можно установить из репозитория, пакет называется pascalabcnet. Например, командой&lt;br /&gt;
 # apt-get update &amp;amp;&amp;amp; apt-get install pascalabcnet&lt;br /&gt;
&lt;br /&gt;
==Установка в Windows==&lt;br /&gt;
[http://pascalabc.net/downloads/PascalABCNETMiniSetup.exe Скачайте установщик] с сайта. Устанавливайте, как обычно.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Приложения]][[Категория:Разработка]][[Категория:Программирование]][[Категория:Информатика]]&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=Code::Blocks&amp;diff=2480</id>
		<title>Code::Blocks</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=Code::Blocks&amp;diff=2480"/>
		<updated>2025-12-08T11:20:20Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Code::Blocks - кросс-платформенная среда разработки для языка программирования С++ и ряда других. Обычно используется вместе с компилятором GNU C++ (под Windows используется MinGW). Часто используется на олимпиадах, в ЕГЭ и ОГЭ.&lt;br /&gt;
&lt;br /&gt;
Достоинства: быстрая, легковесная, простая в использовании.&lt;br /&gt;
&lt;br /&gt;
Недостатки: неудобный отладчик, особенно под Windows.&lt;br /&gt;
&lt;br /&gt;
Сайт: https://www.codeblocks.org/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Внимание! При сохранении программ и проектов в Code::Blocks нельзя использовать пробелы и русские буквы в именах файлов и в именах всех папок в полном пути к файлу, это может привести к некорректной работе компилятора или отладчика в среде Code::Blocks. В частности, не следует сохранять файлы на &amp;quot;рабочем столе&amp;quot; или в домашнем каталоге пользователя в Windows, если имя пользователя содержит русские буквы или пробелы. В  МОС-12 эта проблема исправлена осенью 2025, нужно обновить систему.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Установка в МОС-12 ==&lt;br /&gt;
Необходимо установить следующие пакеты:&lt;br /&gt;
&lt;br /&gt;
* gcc-c++ - компилятор GNU C++&lt;br /&gt;
* gdb - отладчик&lt;br /&gt;
* codeblocks - сама среда разработки&lt;br /&gt;
В системе МОС-12 достаточно просто установить Code::Blocks через магазин приложений или используя dnf:&lt;br /&gt;
 $ sudo dnf install gcc-c++ gdb codeblocks&lt;br /&gt;
== Установка в МОС-10 ==&lt;br /&gt;
Устанавливается автоматически при установке дистрибутива. Ярлык для запуска в меню KDE находится в разделе &amp;quot;Разработка - IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если не установлена, то необходимо установить следующие пакеты:&lt;br /&gt;
&lt;br /&gt;
* gcc-c++ - компилятор GNU C++&lt;br /&gt;
* gdb - отладчик&lt;br /&gt;
* codeblocks - сама среда разработки&lt;br /&gt;
* codeblocks-contrib - дополнительные плагины (в дистрибутиве МОС-10 2022 года на базе Alt Linux).&lt;br /&gt;
&lt;br /&gt;
В системе МОС-10 (2022 года на базе Alt Linux) установить  пакеты можно используя пакетный менеджер [[Synaptic]] или командой консоли под пользователем root:&lt;br /&gt;
 # apt-get install gcc-c++ gdb codeblocks codeblocks-contrib&lt;br /&gt;
== Установка в Windows ==&lt;br /&gt;
Дистрибутивы для скачивания находятся на сайте [https://www.codeblocks.org/downloads/binaries/ https://www.codeblocks.org/downloads/] .&lt;br /&gt;
&lt;br /&gt;
Слова в названиях файлов означают следующее:&lt;br /&gt;
&lt;br /&gt;
* setup - инсталлятор&lt;br /&gt;
* nosetup - обычный zip-архив без инсталлятора, достаточно просто распаковать.&lt;br /&gt;
* nonadmin - не требует прав администратора для запуска.&lt;br /&gt;
* mingw - содержит компилятор MinGW-w64 для языков C++ и других.&lt;br /&gt;
* 32bit - 32-битная версия компилятора и среды.&lt;br /&gt;
&lt;br /&gt;
Поскольку для работы среды необходим компилятор, нужно скачивать файл со словом mingw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуемый файл для скачивания и установки: [https://sourceforge.net/projects/codeblocks/files/Binaries/25.03/Windows/codeblocks-25.03mingw-setup.exe codeblocks-25.03mingw-setup.exe]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Проверка работы среды ==&lt;br /&gt;
При первом запуске среды появится окно со списком доступных компиляторов. Убедитесь, что в этом окне указан &amp;quot;Компилятор GNU GCC - обнаружен&amp;quot; (в английской версии - &amp;quot;GNU GCC compiler - detected&amp;quot;. Если компилятор не обнаружен, необходимо установить компилятор (под Windows - скачайте дистрибутив Code::Blocks с mingw).&lt;br /&gt;
[[Файл:Поиск компиляторов.png|без|мини|Окно определения компиляторов при первом запуске]]&lt;br /&gt;
Нажмите на OK.&lt;br /&gt;
&lt;br /&gt;
Создайте простое приложение. Выберите в меню &amp;quot;Файл - Создать - Пустой файл...&amp;quot; (File - New - Empty File) или при помощи иконки на панели инструментов. Сразу же сохраните файл, при сохранении укажите расширение .cpp. Например, если вы работаете в МОС под пользователем с именем student, то путь для сохранения может быть &amp;quot;/home/student/test.cpp&amp;quot;. В системе Windows путь может быть C:\Users\student\Documents\test.cpp.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Внимание! Если не указать расширение файла, то файл будет сохранён с расширением .c, и это будет программа на языке C, а не на C++. Проверьте, что после сохранения имя файла имеет расширение .cpp.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Внимание! Не используйте пробелы и русские буквы в именах файлов и в именах всех папок в полном пути к файлу, это может привести к некорректной работе компилятора или отладчика в среде Code::Blocks.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Также можно использовать мастер создания файлов &amp;quot;Файл - Создать - Файл...&amp;quot; (File - New - File...). Выберите тип файла &amp;quot;C/C++ Source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Скопируйте текст следующей программы в редактор файла:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
 #include&amp;lt;iostream&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     cout &amp;lt;&amp;lt; &amp;quot;Hello, world!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Скомпилируйте и запустите программу, используя команду меню &amp;quot;Сборка - Собрать и выполнить&amp;quot; (Build - Build and run) или горячую клавишу F9.&lt;br /&gt;
&lt;br /&gt;
Должно появиться окно терминала с выводом программы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Запуск простой программы.png|без|мини|Запуск простой программы в Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
==Возможные проблемы==&lt;br /&gt;
&lt;br /&gt;
Если в имени файла или пути встречаются пробелы (например, на рабочем столе), то проект может не скомпилироваться, указывая в ошибке, что файл заканчивается на слово &amp;quot;Рабочий&amp;quot; и не найден.&lt;br /&gt;
&lt;br /&gt;
Можно настроить среду, чтобы работало в любом случае. Для этого откройте &#039;&#039;&#039;Settings - Environment&#039;&#039;&#039; и выставите там терминал в значение &#039;&#039;&#039;konsole -e&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Настройки среды Code--Blocks.png|без|мини|Настройки среды Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
После этого можно компилировать файлы и без проекта и прямо с рабочего стола.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Результат запуска файла с рабочего стола.png|мини|без|Результат запуска файла с рабочего стола]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Приложения]][[Категория:Разработка]][[Категория:Программирование]][[Категория:Информатика]]&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2479</id>
		<title>Блокировка интернета при проведении ВсОШ в Москве</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8_%D0%92%D1%81%D0%9E%D0%A8_%D0%B2_%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&amp;diff=2479"/>
		<updated>2025-12-08T09:16:34Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;При проведении муниципального этапа ВсОШ по информатике в Москве места проведения должны фильтровать доступ в интернет по указанным правилам. Фильтрация может быть осуществлена на сетевом оборудовании (роутере), централизованно для всех участников. При отсутствии роутера фильтрация осуществляется на каждом компьютере настройкой файрвола операционной системы.&lt;br /&gt;
&lt;br /&gt;
Эта статья описывает необходимые настройки фильтрации интернета при проведении муниципального этапов всероссийской олимпиады школьников в Москве. В статье описаны настройки для систем МОС-12 и Windows. Фильтрацию можно реализовать на МОС-10 используя правила из этой статьи и инструкцию [[Блокировка интернета в МОС при помощи iptables|Блокировка интернета в МОС при помощи iptables.]]&lt;br /&gt;
&lt;br /&gt;
Список необходимых хостов из этой статьи может дополняться и меняться. Перед муниципальным этапом необходимо использовать актуальный список.&lt;br /&gt;
&lt;br /&gt;
До проведения муниципального этапа рекомендуется провести проверку фильтрации при проведении любого школьного этапа ВсОШ, а также при проведении школьного этапа ВсОШ по информатике в Москве.&lt;br /&gt;
&lt;br /&gt;
После настройки фильтрации необходимо проверить, что данные сайты открываются в браузере, другие сайты (например, ya.ru, vk.com, gmail.com, web.telegram.org) - не открываются.&lt;br /&gt;
&lt;br /&gt;
=== Список необходимых разрешённых хостов ===&lt;br /&gt;
На каждом компьютере должен быть открыт доступ:&lt;br /&gt;
&lt;br /&gt;
* Для всех соединений, находящихся в состоянии Established или Related, то есть для уже открытых соединений.&lt;br /&gt;
* DNS-протокол: UDP, порт 53.&lt;br /&gt;
*mDNS-протокол (zeroconf, Avahi): UDP порт 5353&lt;br /&gt;
*NTP-протокол: UDP порт 123.&lt;br /&gt;
* ICMP-протокол, входящие и исходящие соединения, для тестирования сети командой ping.&lt;br /&gt;
* Входящие соединения по протоколу TCP на порт 22 - если используется ssh-сервер, запущенный на компьютере, для удалённого управления.&lt;br /&gt;
*Входящие соединения по протоколу TCP на порты 11100, 11200, 11300, 11400 - если используется Veyon для удалённого управления.&lt;br /&gt;
* Все соединения на localhost, для работы локальных приложений.&lt;br /&gt;
&lt;br /&gt;
В случае использования средств удалённого управления (ssh, Veyon) они не должны быть доступны участникам для подключения к компьютерам других участников.&lt;br /&gt;
&lt;br /&gt;
Также должны быть разрешены соединения со следующими хостами.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Список открытых хостов&lt;br /&gt;
!Имя хоста&lt;br /&gt;
!IP-адрес&lt;br /&gt;
!Зачем нужен&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|10.0.0.0/8&lt;br /&gt;
|Локальная сеть ДОНМ для доступа ко всем ресурсам, для простоты конфигурирования&lt;br /&gt;
|-&lt;br /&gt;
|school.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ и &amp;quot;Магазина приложений&amp;quot; МОС&lt;br /&gt;
|-&lt;br /&gt;
|uchebnik.mos.ru&lt;br /&gt;
|94.79.51.184&lt;br /&gt;
94.79.51.185&lt;br /&gt;
&lt;br /&gt;
94.79.51.186&lt;br /&gt;
|Необходим для работы тестирующей системы МЭШ&lt;br /&gt;
|-&lt;br /&gt;
|login.mos.ru&lt;br /&gt;
|94.79.51.169&lt;br /&gt;
94.79.51.170&lt;br /&gt;
94.79.51.171&lt;br /&gt;
|Необходим для авторизации в МЭШ. Сам сайт login.mos.ru открывать не нужно, он делает редирект на mos.ru&lt;br /&gt;
|-&lt;br /&gt;
|online.olimpiada.ru&lt;br /&gt;
|46.235.186.69&lt;br /&gt;
46.235.188.68&lt;br /&gt;
78.41.110.69&lt;br /&gt;
93.93.88.23&lt;br /&gt;
212.193.144.0/20&lt;br /&gt;
|Резервная тестирующая система&lt;br /&gt;
|-&lt;br /&gt;
|vos.olimpiada.ru&lt;br /&gt;
|185.178.208.183&lt;br /&gt;
|Сайт ВсОШ в Москве&lt;br /&gt;
|-&lt;br /&gt;
|всош.цпм.рф&lt;br /&gt;
|185.30.228.25&lt;br /&gt;
|Сайт ВсОШ в Москве (xn--b1ayi3a.xn--l1afu.xn--p1ai)&lt;br /&gt;
|-&lt;br /&gt;
|olympiads.ru&lt;br /&gt;
|194.58.88.173&lt;br /&gt;
|Сайт городской предметно-методической комиссии ВсОШ по информатике&lt;br /&gt;
|-&lt;br /&gt;
|mc.yandex.ru&lt;br /&gt;
|87.250.250.119&lt;br /&gt;
87.250.251.119&lt;br /&gt;
93.158.134.119&lt;br /&gt;
77.88.21.119&lt;br /&gt;
|Метрика яндекса, если заблокировать, то браузер будет долго загружать страницу&lt;br /&gt;
|-&lt;br /&gt;
|os.mos.ru&lt;br /&gt;
repo.os.mos.ru&lt;br /&gt;
|37.230.149.17&lt;br /&gt;
|Репозитории МОС, для установки пакетов, если возникнет необходимость доставить приложения.&lt;br /&gt;
|-&lt;br /&gt;
|marketplace.visualstudio.com&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Магазин расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-vscode.gallerycdn.vsassets.io&lt;br /&gt;
|212.188.39.24&lt;br /&gt;
212.188.39.35&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|ms-vscode.gallery.vsassets.io&lt;br /&gt;
|150.171.73.16&lt;br /&gt;
150.171.74.16&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|az764295.vo.msecnd.net&lt;br /&gt;
|152.199.19.160&lt;br /&gt;
|Необходим для скачивания расширений для VSCode&lt;br /&gt;
|-&lt;br /&gt;
|it-help-school.ru&lt;br /&gt;
|91.221.70.4&lt;br /&gt;
|Этот сайт, для доступа к техническим инструкциям&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Настройка МОС-12 ===&lt;br /&gt;
Подробности о настройке файрвола в МОС-12 в статье [[Блокировка интернета в МОС-12 при помощи nftables]]&lt;br /&gt;
&lt;br /&gt;
В МОС-12 можно записать в файл &#039;&#039;&#039;/etc/sysconfig/nftables.conf&#039;&#039;&#039; следующий набор правил:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# Эта команда сбрасывает все правила, иначе новые правила будут добавляться к ранее установленным&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain input {&lt;br /&gt;
        # Правила обработки входящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты всех установленных соединений&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 22 порт TCP для управления компьютером по ssh&lt;br /&gt;
        tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 TCP и UDP для работы DNS&lt;br /&gt;
        tcp dport 53 accept&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на 5353 порт UDP для работы mDNS (avahi)&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем пакеты на порты 11100, 11200, 11300, 11400 TCP для управления компьютером по Veyon&lt;br /&gt;
        tcp dport 11100 accept&lt;br /&gt;
        tcp dport 11200 accept&lt;br /&gt;
        tcp dport 11300 accept&lt;br /&gt;
        tcp dport 11400 accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем входящий ping&lt;br /&gt;
        icmp type echo-request accept&lt;br /&gt;
&lt;br /&gt;
        # Принимаем все пакеты с этого компьютера (на lo-интерфейс)&lt;br /&gt;
        iif lo accept&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain output {&lt;br /&gt;
        # Правила обработки исходящих пакетов&lt;br /&gt;
        # По умолчанию ставим правило drop для пакетов&lt;br /&gt;
        type filter hook output priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем все установленные соединения&lt;br /&gt;
        ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 53 UDP для работы DNS&lt;br /&gt;
        udp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на порт 5353 UDP для работы mDNS&lt;br /&gt;
        udp dport 5353 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на UDP порт 123 для работы NTP&lt;br /&gt;
        udp dport 123 accept&lt;br /&gt;
&lt;br /&gt;
        # Разрешаем соединения на этот же компьютер (lo-интерфейс)&lt;br /&gt;
        oif lo accept&lt;br /&gt;
&lt;br /&gt;
        # Далее идёт белый список сайтов, к которым должен быть открыт доступ&lt;br /&gt;
&lt;br /&gt;
        # Вся локальная сеть 10.*.*.* для доступа к ресурсам МЭШ из сети ДОНМ, для простоты целиком&lt;br /&gt;
        ip daddr 10.0.0.0/8 accept&lt;br /&gt;
&lt;br /&gt;
        # school.mos.ru, uchebnik.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.184 accept&lt;br /&gt;
        ip daddr 94.79.51.185 accept&lt;br /&gt;
        ip daddr 94.79.51.186 accept&lt;br /&gt;
&lt;br /&gt;
        # login.mos.ru&lt;br /&gt;
        ip daddr 94.79.51.169 accept&lt;br /&gt;
        ip daddr 94.79.51.170 accept&lt;br /&gt;
        ip daddr 94.79.51.171 accept&lt;br /&gt;
&lt;br /&gt;
        # mc.yandex.ru&lt;br /&gt;
        ip daddr 87.250.250.119 accept&lt;br /&gt;
        ip daddr 87.250.251.119 accept&lt;br /&gt;
        ip daddr 93.158.134.119 accept&lt;br /&gt;
        ip daddr 77.88.21.119 accept&lt;br /&gt;
&lt;br /&gt;
        # online.olimpiada.ru&lt;br /&gt;
        ip daddr 46.235.186.69 accept&lt;br /&gt;
        ip daddr 46.235.188.68 accept&lt;br /&gt;
        ip daddr 78.41.110.69 accept&lt;br /&gt;
        ip daddr 93.93.88.23 accept&lt;br /&gt;
        ip daddr 212.193.144.0/20 accept&lt;br /&gt;
&lt;br /&gt;
        # vos.olimpiada.ru&lt;br /&gt;
        ip daddr 185.178.208.183 accept&lt;br /&gt;
&lt;br /&gt;
        # всош.цпм.рф&lt;br /&gt;
        ip daddr 185.30.228.25 accept&lt;br /&gt;
&lt;br /&gt;
        # olympiads.ru&lt;br /&gt;
        ip daddr 194.58.88.173 accept&lt;br /&gt;
&lt;br /&gt;
        # os.mos.ru, repo.os.mos.ru&lt;br /&gt;
        ip daddr 37.230.149.17 accept&lt;br /&gt;
        &lt;br /&gt;
        # marketplace.visualstudio.com&lt;br /&gt;
        ip daddr 150.171.73.16 accept&lt;br /&gt;
        ip daddr 150.171.74.16 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-vscode.gallerycdn.vsassets.io&lt;br /&gt;
        ip daddr 68.232.34.200 accept&lt;br /&gt;
&lt;br /&gt;
        # ms-vscode.gallery.vsassets.io&lt;br /&gt;
        ip daddr 212.188.39.0/24 accept&lt;br /&gt;
        &lt;br /&gt;
        # az764295.vo.msecnd.net&lt;br /&gt;
        ip daddr 152.199.19.160 accept&lt;br /&gt;
&lt;br /&gt;
        # it-help-school.ru&lt;br /&gt;
        ip daddr 91.221.70.4 accept&lt;br /&gt;
&lt;br /&gt;
        # Это правило делает reject на все остальные соединения&lt;br /&gt;
        # на порт 80 (http) и 443 (https), в результате&lt;br /&gt;
        # браузер не будет ждать загрузки недоступных ресурсов&lt;br /&gt;
        tcp dport 80 reject&lt;br /&gt;
        tcp dport 443 reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем выполните команды для включения файрвола под root&lt;br /&gt;
 # systemctl enable nftables&lt;br /&gt;
 # systemctl start nftables&lt;br /&gt;
Для отключения фильтрации выполните команды&lt;br /&gt;
 # systemctl disable nftables&lt;br /&gt;
 # systemctl stop nftables&lt;br /&gt;
&lt;br /&gt;
=== Настройка Windows 10 и Windows 11 ===&lt;br /&gt;
В Windows 10 будем использовать стандартный файрвол Windows.&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать powershell-скрипт следующего содержания.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Устанавливаем policy для пакетов по умолчанию - Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction Block&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction Block&lt;br /&gt;
&lt;br /&gt;
# Разрешаем весь трафик для службы dnscache&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Outbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow dnscache service&amp;quot; -Direction Inbound -Action Allow -Service &amp;quot;dnscache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 53 для работы DNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 53&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow DNS Inbound TCP&amp;quot; -Direction Inbound -Action Allow -Protocol TCP -RemotePort 53&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 5353 для работы mDNS&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mDNS Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 5353&lt;br /&gt;
&lt;br /&gt;
# Открываем порт 123 UDP для работы NTP&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow NTP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol UDP -RemotePort 123&lt;br /&gt;
&lt;br /&gt;
# Разрешаем трафик на localhost&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Inbound&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Localhost Outbound&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
# Разрешаем ICMP (ping)&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Outbound&amp;quot; -Direction Outbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ICMP Inbound&amp;quot; -Direction Inbound -Action Allow -Protocol ICMPv4&lt;br /&gt;
&lt;br /&gt;
# Разрешаетм доступ к локальной сети 10.0.0.0/8 для доступа к ресурсам МЭШ из сети ДОНМ&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow Local Network&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
# Разрешаем доступ к конкретным сайтам&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.81,94.79.51.82,94.79.51.83&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow school.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.81,94.79.51.82,94.79.51.83&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow login.mos.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 94.79.51.169,94.79.51.170,94.79.51.171&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow online.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 46.235.186.69,46.235.188.68,78.41.110.69,93.93.88.23,212.193.144.0/20&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.178.208.183 &lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vos.olimpiada.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.178.208.183&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow vsosh.cpm.rf&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 185.30.228.25&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow olympiads.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 194.58.88.173&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow mc.yandex.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 87.250.250.119,87.250.251.119,93.158.134.119,77.88.21.119&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.42.18&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow marketplace.visualstudio.com&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.42.18&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-vscode.gallerycdn.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 68.232.34.200&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-vscode.gallerycdn.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 68.232.34.200&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-vscode.gallery.vsassets.io&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 13.107.6.175&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow ms-vscode.gallery.vsassets.io&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 13.107.6.175&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow az764295.vo.msecnd.net&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 152.199.19.160&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow az764295.vo.msecnd.net&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 152.199.19.160&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Outbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
New-NetFirewallRule -DisplayName &amp;quot;Olymp Allow it-help-school.ru&amp;quot; -Direction Inbound -Action Allow -RemoteAddress 91.221.70.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Сохраните этот скрипт в файле с расширением ps1, например, &#039;&#039;&#039;block-internet.ps1.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Этот скрипт нужно запускать с правами администратора. Для этого нужно запустить PowerShell с правами администратора, например, найти в меню &amp;quot;Пуск&amp;quot; Windows PowerShell, сделать правый клик мышью и выбрать &amp;quot;Запуск от имени администратора&amp;quot;. Затем в консоли PowerShell ввести полный путь и имя этого скрипта. Участникам олимпиады права администратора компьютера должны быть недоступны.&lt;br /&gt;
&lt;br /&gt;
Можно создать ярлык, чтобы скрипт всегда запускался от администратора. Для этого нужно создать новый ярлык, например, на рабочем столе: правый клик мышью - Создать - Ярлык.&lt;br /&gt;
&lt;br /&gt;
В поле &amp;quot;Укажите расположение объекта&amp;quot; нужно вписать (заменив &amp;quot;C:\users\student\block-internet.ps1&amp;quot; на правильный путь к скрипту). Параметр -NoExit можно убрать, тогда окно PowerShell будет закрываться после исполнения скрипта.&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -NoExit -File &amp;quot;C:\users\student\block-internet.ps1&amp;quot;&lt;br /&gt;
Затем откройте свойства ярлыка, нажмите &amp;quot;Дополнительно&amp;quot; и поставьте галку &amp;quot;Запуск от имени администратора&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что все создаваемые правила начинаются со слова Olymp. Благодаря этому можно отфильтровать эти правила и для снятия ограничений удалить только правила, которые начинаются со слова Olymp. Для этого создайте и запустите следующий PowerShell-скрипт, который удаляет все установленные правила и сбрасывает правила для обработки пакетов &amp;quot;по умолчанию&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Set-NetFirewallProfile -DefaultInboundAction NotConfigured&lt;br /&gt;
Set-NetFirewallProfile -DefaultOutboundAction NotConfigured&lt;br /&gt;
Get-NetFirewallRule | Where-Object { $_.DisplayName -like &amp;quot;Olymp*&amp;quot; } | Remove-NetFirewallRule&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исполнение этого скрипта снимает все установленные ограничения. Его также нужно запускать с правами администратора, рекомендуется создать на рабочем столе два ярлыка для запуска под администратором - ддя блокировки и разблокировки интернета.&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=Code::Blocks&amp;diff=2478</id>
		<title>Code::Blocks</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=Code::Blocks&amp;diff=2478"/>
		<updated>2025-12-08T07:27:21Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Обновление ссылки на скачивание&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Code::Blocks - кросс-платформенная среда разработки для языка программирования С++ и ряда других. Обычно используется вместе с компилятором GNU C++ (под Windows используется MinGW). Часто используется на олимпиадах, в ЕГЭ и ОГЭ.&lt;br /&gt;
&lt;br /&gt;
Достоинства: быстрая, легковесная, простая в использовании.&lt;br /&gt;
&lt;br /&gt;
Недостатки: неудобный отладчик, особенно под Windows.&lt;br /&gt;
&lt;br /&gt;
Сайт: https://www.codeblocks.org/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Внимание! При сохранении программ и проектов в Code::Blocks нельзя использовать пробелы и русские буквы в именах файлов и в именах всех папок в полном пути к файлу, это может привести к некорректной работе компилятора или отладчика в среде Code::Blocks. В частности, не следует сохранять файлы на &amp;quot;рабочем столе&amp;quot; или в домашнем каталоге пользователя в Windows, если имя пользователя содержит русские буквы или пробелы.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Установка в МОС-12 ==&lt;br /&gt;
Устанавливается автоматически при установке дистрибутива. Ярлык для запуска в меню KDE находится в разделе &amp;quot;Разработка&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если не установлена, то необходимо установить следующие пакеты:&lt;br /&gt;
&lt;br /&gt;
* gcc-c++ - компилятор GNU C++&lt;br /&gt;
* gdb - отладчик&lt;br /&gt;
* codeblocks - сама среда разработки&lt;br /&gt;
В системе МОС-12 установить пакеты можно через магазин приложений МОС или используя dnf:&lt;br /&gt;
 $ sudo dnf install gcc-c++ gdb codeblocks&lt;br /&gt;
== Установка в МОС-10 ==&lt;br /&gt;
Устанавливается автоматически при установке дистрибутива. Ярлык для запуска в меню KDE находится в разделе &amp;quot;Разработка - IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если не установлена, то необходимо установить следующие пакеты:&lt;br /&gt;
&lt;br /&gt;
* gcc-c++ - компилятор GNU C++&lt;br /&gt;
* gdb - отладчик&lt;br /&gt;
* codeblocks - сама среда разработки&lt;br /&gt;
* codeblocks-contrib - дополнительные плагины (в дистрибутиве МОС-10 2022 года на базе Alt Linux).&lt;br /&gt;
&lt;br /&gt;
В системе МОС-10 (2022 года на базе Alt Linux) установить  пакеты можно используя пакетный менеджер [[Synaptic]] или командой консоли под пользователем root:&lt;br /&gt;
 # apt-get install gcc-c++ gdb codeblocks codeblocks-contrib&lt;br /&gt;
== Установка в Windows ==&lt;br /&gt;
Дистрибутивы для скачивания находятся на сайте [https://www.codeblocks.org/downloads/binaries/ https://www.codeblocks.org/downloads/] .&lt;br /&gt;
&lt;br /&gt;
Слова в названиях файлов означают следующее:&lt;br /&gt;
&lt;br /&gt;
* setup - инсталлятор&lt;br /&gt;
* nosetup - обычный zip-архив без инсталлятора, достаточно просто распаковать.&lt;br /&gt;
* nonadmin - не требует прав администратора для запуска.&lt;br /&gt;
* mingw - содержит компилятор MinGW-w64 для языков C++ и других.&lt;br /&gt;
* 32bit - 32-битная версия компилятора и среды.&lt;br /&gt;
&lt;br /&gt;
Поскольку для работы среды необходим компилятор, нужно скачивать файл со словом mingw.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Рекомендуемый файл для скачивания и установки: [https://sourceforge.net/projects/codeblocks/files/Binaries/25.03/Windows/codeblocks-25.03mingw-setup.exe codeblocks-25.03mingw-setup.exe]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Проверка работы среды ==&lt;br /&gt;
При первом запуске среды появится окно со списком доступных компиляторов. Убедитесь, что в этом окне указан &amp;quot;Компилятор GNU GCC - обнаружен&amp;quot; (в английской версии - &amp;quot;GNU GCC compiler - detected&amp;quot;. Если компилятор не обнаружен, необходимо установить компилятор (под Windows - скачайте дистрибутив Code::Blocks с mingw).&lt;br /&gt;
[[Файл:Поиск компиляторов.png|без|мини|Окно определения компиляторов при первом запуске]]&lt;br /&gt;
Нажмите на OK.&lt;br /&gt;
&lt;br /&gt;
Создайте простое приложение. Выберите в меню &amp;quot;Файл - Создать - Пустой файл...&amp;quot; (File - New - Empty File) или при помощи иконки на панели инструментов. Сразу же сохраните файл, при сохранении укажите расширение .cpp. Например, если вы работаете в МОС под пользователем с именем student, то путь для сохранения может быть &amp;quot;/home/student/test.cpp&amp;quot;. В системе Windows путь может быть C:\Users\student\Documents\test.cpp.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Внимание! Если не указать расширение файла, то файл будет сохранён с расширением .c, и это будет программа на языке C, а не на C++. Проверьте, что после сохранения имя файла имеет расширение .cpp.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Внимание! Не используйте пробелы и русские буквы в именах файлов и в именах всех папок в полном пути к файлу, это может привести к некорректной работе компилятора или отладчика в среде Code::Blocks.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Также можно использовать мастер создания файлов &amp;quot;Файл - Создать - Файл...&amp;quot; (File - New - File...). Выберите тип файла &amp;quot;C/C++ Source&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Скопируйте текст следующей программы в редактор файла:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
 #include&amp;lt;iostream&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     cout &amp;lt;&amp;lt; &amp;quot;Hello, world!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Скомпилируйте и запустите программу, используя команду меню &amp;quot;Сборка - Собрать и выполнить&amp;quot; (Build - Build and run) или горячую клавишу F9.&lt;br /&gt;
&lt;br /&gt;
Должно появиться окно терминала с выводом программы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Запуск простой программы.png|без|мини|Запуск простой программы в Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
==Возможные проблемы==&lt;br /&gt;
&lt;br /&gt;
Если в имени файла или пути встречаются пробелы (например, на рабочем столе), то проект может не скомпилироваться, указывая в ошибке, что файл заканчивается на слово &amp;quot;Рабочий&amp;quot; и не найден.&lt;br /&gt;
&lt;br /&gt;
Можно настроить среду, чтобы работало в любом случае. Для этого откройте &#039;&#039;&#039;Settings - Environment&#039;&#039;&#039; и выставите там терминал в значение &#039;&#039;&#039;konsole -e&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Настройки среды Code--Blocks.png|без|мини|Настройки среды Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
После этого можно компилировать файлы и без проекта и прямо с рабочего стола.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Результат запуска файла с рабочего стола.png|мини|без|Результат запуска файла с рабочего стола]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Приложения]][[Категория:Разработка]][[Категория:Программирование]][[Категория:Информатика]]&lt;br /&gt;
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2472</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2472"/>
		<updated>2025-12-04T12:50:33Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Исправление уровней заголовков&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом.&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса &amp;quot;Фреш&amp;quot; 13).&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку &amp;quot;Дополнительно&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y task-lxqt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В МОС-13 может быть установлен пакет authselect-force, который управляет механизмом авторизации пользователей. Этот пакет не нужен, мы не будем использовать его. Удалите его и запретите последующую установку.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf remove -y authselect-force&lt;br /&gt;
dnf config-manager --setopt exclude=&amp;quot;authselect-force&amp;quot; --save&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. &lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие &amp;quot;домен&amp;quot; дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch179.local) и везде используем именно его.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На клиенте выполните аналогичную команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи  пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалите файл /usr/share/openldap-servers/UPGRADE_INSTRUCTIONS&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -f /usr/share/openldap-servers/UPGRADE_INSTRUCTIONS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите службу LDAP  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка созданной базы командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Выполните команды:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Она должна вывести текст, в котором есть строки:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 5000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 3001&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 5001&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для каждого принципала необходимо будет два раза ввести его пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр enumerate = false. Этот параметр отключает загрузку всей базы ldap в память сервера sssd, загрузка осуществляется по мере необходимости. С включенным параметром (enumerate = true) наблюдались отказы в работе службы sssd, из-за длительной загрузки базы. Поэтому рекомендуется использовать enumerate = false. Однако в этом случае при первом обращении к информации о пользователе (например, при входе в систему) такое обращение может выполняться долго, но затем данные кешируются sssd и повторое обращение к ldap производиться не будет.&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выведите информацию о полученных билетах.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Удалите полученный билет командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод будет таким.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что система экспортируется, выполнив команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
==Автомонтирование домашних каталогов при помощи autofs==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим пакет autofs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/auto.home и запишем в него строку.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включим и запустим службу autofs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Включение дисковых квот==&lt;br /&gt;
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.&lt;br /&gt;
&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...&lt;br /&gt;
Отмонтируйте раздел.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Подмонтируйте раздел&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.&lt;br /&gt;
&lt;br /&gt;
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.&lt;br /&gt;
&lt;br /&gt;
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.&lt;br /&gt;
&lt;br /&gt;
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.&lt;br /&gt;
&lt;br /&gt;
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77&lt;br /&gt;
29102 students s29a_rostova Ростова Наталья LRhevK2O &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.&lt;br /&gt;
&lt;br /&gt;
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Скрипт запускается так&lt;br /&gt;
&lt;br /&gt;
python useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Или если сделать файл useradmin.py исполняемым, то&lt;br /&gt;
&lt;br /&gt;
./useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Примеры параметров, которые можно передавать скрипту&lt;br /&gt;
!Параметры скрипта&lt;br /&gt;
!Выполняемое действие&lt;br /&gt;
|-&lt;br /&gt;
|list-users&lt;br /&gt;
|Вывести список пользователей&lt;br /&gt;
|-&lt;br /&gt;
|list-users --detailed&lt;br /&gt;
|Вывести список пользователей с подробной информацией (наличие принципала Kerberos, дисковая квота)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt&lt;br /&gt;
|Создать пользователей используя файл users.txt. Создаются записи в LDAP, Kerberos, создаётся домашний каталог и устанавливается квота&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --ldap&lt;br /&gt;
|Только создать записи ldap&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --kerberos&lt;br /&gt;
|Только создать принципалы Kerberos&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --home&lt;br /&gt;
|Только создать домашние каталоги (и скопировать туда skel)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --quota&lt;br /&gt;
|Только установить квоту&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --steps ldap kerberos home&lt;br /&gt;
|Выполнить только указанные шаги (ldap, kerberos, home), то есть создать пользователя с домашним каталогом, но без квоты&lt;br /&gt;
|-&lt;br /&gt;
|delete-user user_login&lt;br /&gt;
|Удалить пользователя с логином user_login (в том числе удаляется и домашний каталог)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Подключение ноутбуков к WiFi до входа в систему ==&lt;br /&gt;
На компьютере должна быть поднята сеть до входа в систему. Если используются ноутбуки с WiFi, то подключение к WiFi сети должно быть осуществлено до входа пользователя в систему, то есть без участия пользователя. Это возможно сделать, если для подключения к WiFi-сети достаточно указать только SSID и ключ подключения к сети.&lt;br /&gt;
&lt;br /&gt;
Войдите в систему под пользователем root. Следующая команда выведет список доступных сетей.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте новую сеть командой, заменив YOUR_SSID на SSID вашей сети и YOUR_PASSWORD - на ключ подключения к вашей сети. school-wifi - это имя соединения, его также можно изменить.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi connect YOUR_SSID password YOUR_PASSWORD name school-wifi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите автоподключение для этого соединения.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli connection modify school-wifi connection.autoconnect yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В каталоге /etc/NetworkManager/system-connections/ появится файл school-wifi.nmconnection  примерно такого содержания&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[connection]&lt;br /&gt;
id=school-wifi&lt;br /&gt;
uuid=***какой-то uuid***&lt;br /&gt;
type=wifi&lt;br /&gt;
interface-name=wlp0s20f3&lt;br /&gt;
timestamp=1753189862&lt;br /&gt;
&lt;br /&gt;
[wifi]&lt;br /&gt;
mode=infrastructure&lt;br /&gt;
ssid=***SSID вашей сети***&lt;br /&gt;
&lt;br /&gt;
[wifi-security]&lt;br /&gt;
auth-alg=open&lt;br /&gt;
key-mgmt=wpa-psk&lt;br /&gt;
psk=***ключ вашей сети***&lt;br /&gt;
&lt;br /&gt;
[ipv4]&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[ipv6]&lt;br /&gt;
addr-gen-mode=default&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обслуживание системы ==&lt;br /&gt;
&lt;br /&gt;
=== Обновление ldap ===&lt;br /&gt;
В состав пакета openldap-servers входит файл /usr/share/openldap-servers/UPGRADE_INSTRUCTIONS с инструкциями по обновлению базы данных при обновлении сервера ldap. Если этот файл присутствует в системе, то сервер ldap не запустится (посмотрите команду systemctl status slapd). Чтобы сервер стартовал, необходимо удалить этот файл. Предполагается, что администратор системы выполняет действия по обновлению базы ldap, затем удаляет этот файл. Однако, при минорных обновлениях версии ldap эти действия не нужны, но файл восстанавливается при любом обновлении пакета openldap-servers. Поэтому как правило, если был обновлён пакет openldap-servers, например, при выполнении команды dnf update, необходимо удалить этот файл и перезапустить сервис ldap.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -f /usr/share/openldap-servers/UPGRADE_INSTRUCTIONS&lt;br /&gt;
systemctl restart slapd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Чистка домашних каталогов ===&lt;br /&gt;
&lt;br /&gt;
=== Проверка квот ===&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2471</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2471"/>
		<updated>2025-12-04T12:46:54Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Про обновление openldap-servers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом.&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса &amp;quot;Фреш&amp;quot; 13).&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку &amp;quot;Дополнительно&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y task-lxqt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В МОС-13 может быть установлен пакет authselect-force, который управляет механизмом авторизации пользователей. Этот пакет не нужен, мы не будем использовать его. Удалите его и запретите последующую установку.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf remove -y authselect-force&lt;br /&gt;
dnf config-manager --setopt exclude=&amp;quot;authselect-force&amp;quot; --save&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. &lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие &amp;quot;домен&amp;quot; дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch179.local) и везде используем именно его.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На клиенте выполните аналогичную команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи  пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Удалите файл /usr/share/openldap-servers/UPGRADE_INSTRUCTIONS&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -f /usr/share/openldap-servers/UPGRADE_INSTRUCTIONS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите службу LDAP  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка созданной базы командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Выполните команды:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Она должна вывести текст, в котором есть строки:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 5000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 3001&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 5001&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для каждого принципала необходимо будет два раза ввести его пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр enumerate = false. Этот параметр отключает загрузку всей базы ldap в память сервера sssd, загрузка осуществляется по мере необходимости. С включенным параметром (enumerate = true) наблюдались отказы в работе службы sssd, из-за длительной загрузки базы. Поэтому рекомендуется использовать enumerate = false. Однако в этом случае при первом обращении к информации о пользователе (например, при входе в систему) такое обращение может выполняться долго, но затем данные кешируются sssd и повторое обращение к ldap производиться не будет.&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выведите информацию о полученных билетах.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Удалите полученный билет командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод будет таким.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что система экспортируется, выполнив команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
==Автомонтирование домашних каталогов при помощи autofs==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим пакет autofs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/auto.home и запишем в него строку.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включим и запустим службу autofs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Включение дисковых квот==&lt;br /&gt;
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.&lt;br /&gt;
&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...&lt;br /&gt;
Отмонтируйте раздел.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Подмонтируйте раздел&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.&lt;br /&gt;
&lt;br /&gt;
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.&lt;br /&gt;
&lt;br /&gt;
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.&lt;br /&gt;
&lt;br /&gt;
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.&lt;br /&gt;
&lt;br /&gt;
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77&lt;br /&gt;
29102 students s29a_rostova Ростова Наталья LRhevK2O &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.&lt;br /&gt;
&lt;br /&gt;
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Скрипт запускается так&lt;br /&gt;
&lt;br /&gt;
python useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Или если сделать файл useradmin.py исполняемым, то&lt;br /&gt;
&lt;br /&gt;
./useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Примеры параметров, которые можно передавать скрипту&lt;br /&gt;
!Параметры скрипта&lt;br /&gt;
!Выполняемое действие&lt;br /&gt;
|-&lt;br /&gt;
|list-users&lt;br /&gt;
|Вывести список пользователей&lt;br /&gt;
|-&lt;br /&gt;
|list-users --detailed&lt;br /&gt;
|Вывести список пользователей с подробной информацией (наличие принципала Kerberos, дисковая квота)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt&lt;br /&gt;
|Создать пользователей используя файл users.txt. Создаются записи в LDAP, Kerberos, создаётся домашний каталог и устанавливается квота&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --ldap&lt;br /&gt;
|Только создать записи ldap&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --kerberos&lt;br /&gt;
|Только создать принципалы Kerberos&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --home&lt;br /&gt;
|Только создать домашние каталоги (и скопировать туда skel)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --quota&lt;br /&gt;
|Только установить квоту&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --steps ldap kerberos home&lt;br /&gt;
|Выполнить только указанные шаги (ldap, kerberos, home), то есть создать пользователя с домашним каталогом, но без квоты&lt;br /&gt;
|-&lt;br /&gt;
|delete-user user_login&lt;br /&gt;
|Удалить пользователя с логином user_login (в том числе удаляется и домашний каталог)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Подключение ноутбуков к WiFi до входа в систему ==&lt;br /&gt;
На компьютере должна быть поднята сеть до входа в систему. Если используются ноутбуки с WiFi, то подключение к WiFi сети должно быть осуществлено до входа пользователя в систему, то есть без участия пользователя. Это возможно сделать, если для подключения к WiFi-сети достаточно указать только SSID и ключ подключения к сети.&lt;br /&gt;
&lt;br /&gt;
Войдите в систему под пользователем root. Следующая команда выведет список доступных сетей.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте новую сеть командой, заменив YOUR_SSID на SSID вашей сети и YOUR_PASSWORD - на ключ подключения к вашей сети. school-wifi - это имя соединения, его также можно изменить.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi connect YOUR_SSID password YOUR_PASSWORD name school-wifi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите автоподключение для этого соединения.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli connection modify school-wifi connection.autoconnect yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В каталоге /etc/NetworkManager/system-connections/ появится файл school-wifi.nmconnection  примерно такого содержания&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[connection]&lt;br /&gt;
id=school-wifi&lt;br /&gt;
uuid=***какой-то uuid***&lt;br /&gt;
type=wifi&lt;br /&gt;
interface-name=wlp0s20f3&lt;br /&gt;
timestamp=1753189862&lt;br /&gt;
&lt;br /&gt;
[wifi]&lt;br /&gt;
mode=infrastructure&lt;br /&gt;
ssid=***SSID вашей сети***&lt;br /&gt;
&lt;br /&gt;
[wifi-security]&lt;br /&gt;
auth-alg=open&lt;br /&gt;
key-mgmt=wpa-psk&lt;br /&gt;
psk=***ключ вашей сети***&lt;br /&gt;
&lt;br /&gt;
[ipv4]&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[ipv6]&lt;br /&gt;
addr-gen-mode=default&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Обслуживание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Обновление ldap ====&lt;br /&gt;
В состав пакета openldap-servers входит файл /usr/share/openldap-servers/UPGRADE_INSTRUCTIONS с инструкциями по обновлению базы данных при обновлении сервера ldap. Если этот файл присутствует в системе, то сервер ldap не запустится (посмотрите команду systemctl status slapd). Чтобы сервер стартовал, необходимо удалить этот файл. Предполагается, что администратор системы выполняет действия по обновлению базы ldap, затем удаляет этот файл. Однако, при минорных обновлениях версии ldap эти действия не нужны, но файл восстанавливается при любом обновлении пакета openldap-servers. Поэтому как правило, если был обновлён пакет openldap-servers, например, при выполнении команды dnf update, необходимо удалить этот файл и перезапустить сервис ldap.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -f /usr/share/openldap-servers/UPGRADE_INSTRUCTIONS&lt;br /&gt;
systemctl restart slapd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Чистка домашних каталогов ====&lt;br /&gt;
&lt;br /&gt;
==== Проверка квот ====&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2434</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2434"/>
		<updated>2025-11-13T14:43:21Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: /* Доступ к LDAP и Kerberos через SSSD */ Про enumerate = false&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом.&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса &amp;quot;Фреш&amp;quot; 13).&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку &amp;quot;Дополнительно&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y task-lxqt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В МОС-13 может быть установлен пакет authselect-force, который управляет механизмом авторизации пользователей. Этот пакет не нужен, мы не будем использовать его. Удалите его и запретите последующую установку.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf remove -y authselect-force&lt;br /&gt;
dnf config-manager --setopt exclude=&amp;quot;authselect-force&amp;quot; --save&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. &lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие &amp;quot;домен&amp;quot; дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch179.local) и везде используем именно его.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На клиенте выполните аналогичную команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи  пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка созданной базы командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Выполните команды:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Она должна вывести текст, в котором есть строки:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 5000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 3001&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 5001&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для каждого принципала необходимо будет два раза ввести его пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр enumerate = false. Этот параметр отключает загрузку всей базы ldap в память сервера sssd, загрузка осуществляется по мере необходимости. С включенным параметром (enumerate = true) наблюдались отказы в работе службы sssd, из-за длительной загрузки базы. Поэтому рекомендуется использовать enumerate = false. Однако в этом случае при первом обращении к информации о пользователе (например, при входе в систему) такое обращение может выполняться долго, но затем данные кешируются sssd и повторое обращение к ldap производиться не будет.&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выведите информацию о полученных билетах.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Удалите полученный билет командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод будет таким.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что система экспортируется, выполнив команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
==Автомонтирование домашних каталогов при помощи autofs==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим пакет autofs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/auto.home и запишем в него строку.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включим и запустим службу autofs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Включение дисковых квот==&lt;br /&gt;
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.&lt;br /&gt;
&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...&lt;br /&gt;
Отмонтируйте раздел.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Подмонтируйте раздел&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.&lt;br /&gt;
&lt;br /&gt;
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.&lt;br /&gt;
&lt;br /&gt;
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.&lt;br /&gt;
&lt;br /&gt;
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.&lt;br /&gt;
&lt;br /&gt;
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77&lt;br /&gt;
29102 students s29a_rostova Ростова Наталья LRhevK2O &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.&lt;br /&gt;
&lt;br /&gt;
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Скрипт запускается так&lt;br /&gt;
&lt;br /&gt;
python useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Или если сделать файл useradmin.py исполняемым, то&lt;br /&gt;
&lt;br /&gt;
./useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Примеры параметров, которые можно передавать скрипту&lt;br /&gt;
!Параметры скрипта&lt;br /&gt;
!Выполняемое действие&lt;br /&gt;
|-&lt;br /&gt;
|list-users&lt;br /&gt;
|Вывести список пользователей&lt;br /&gt;
|-&lt;br /&gt;
|list-users --detailed&lt;br /&gt;
|Вывести список пользователей с подробной информацией (наличие принципала Kerberos, дисковая квота)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt&lt;br /&gt;
|Создать пользователей используя файл users.txt. Создаются записи в LDAP, Kerberos, создаётся домашний каталог и устанавливается квота&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --ldap&lt;br /&gt;
|Только создать записи ldap&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --kerberos&lt;br /&gt;
|Только создать принципалы Kerberos&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --home&lt;br /&gt;
|Только создать домашние каталоги (и скопировать туда skel)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --quota&lt;br /&gt;
|Только установить квоту&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --steps ldap kerberos home&lt;br /&gt;
|Выполнить только указанные шаги (ldap, kerberos, home), то есть создать пользователя с домашним каталогом, но без квоты&lt;br /&gt;
|-&lt;br /&gt;
|delete-user user_login&lt;br /&gt;
|Удалить пользователя с логином user_login (в том числе удаляется и домашний каталог)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Подключение ноутбуков к WiFi до входа в систему ==&lt;br /&gt;
На компьютере должна быть поднята сеть до входа в систему. Если используются ноутбуки с WiFi, то подключение к WiFi сети должно быть осуществлено до входа пользователя в систему, то есть без участия пользователя. Это возможно сделать, если для подключения к WiFi-сети достаточно указать только SSID и ключ подключения к сети.&lt;br /&gt;
&lt;br /&gt;
Войдите в систему под пользователем root. Следующая команда выведет список доступных сетей.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте новую сеть командой, заменив YOUR_SSID на SSID вашей сети и YOUR_PASSWORD - на ключ подключения к вашей сети. school-wifi - это имя соединения, его также можно изменить.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi connect YOUR_SSID password YOUR_PASSWORD name school-wifi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите автоподключение для этого соединения.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli connection modify school-wifi connection.autoconnect yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В каталоге /etc/NetworkManager/system-connections/ появится файл school-wifi.nmconnection  примерно такого содержания&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[connection]&lt;br /&gt;
id=school-wifi&lt;br /&gt;
uuid=***какой-то uuid***&lt;br /&gt;
type=wifi&lt;br /&gt;
interface-name=wlp0s20f3&lt;br /&gt;
timestamp=1753189862&lt;br /&gt;
&lt;br /&gt;
[wifi]&lt;br /&gt;
mode=infrastructure&lt;br /&gt;
ssid=***SSID вашей сети***&lt;br /&gt;
&lt;br /&gt;
[wifi-security]&lt;br /&gt;
auth-alg=open&lt;br /&gt;
key-mgmt=wpa-psk&lt;br /&gt;
psk=***ключ вашей сети***&lt;br /&gt;
&lt;br /&gt;
[ipv4]&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[ipv6]&lt;br /&gt;
addr-gen-mode=default&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2323</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2323"/>
		<updated>2025-09-10T07:08:34Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Запрет на обновление пакета authselect-force&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом.&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса &amp;quot;Фреш&amp;quot; 13).&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку &amp;quot;Дополнительно&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y task-lxqt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В МОС-13 может быть установлен пакет authselect-force, который управляет механизмом авторизации пользователей. Этот пакет не нужен, мы не будем использовать его. Удалите его и запретите последующую установку.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf remove -y authselect-force&lt;br /&gt;
dnf config-manager --setopt exclude=&amp;quot;authselect-force&amp;quot; --save&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. &lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие &amp;quot;домен&amp;quot; дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch179.local) и везде используем именно его.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На клиенте выполните аналогичную команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи  пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка созданной базы командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Выполните команды:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Она должна вывести текст, в котором есть строки:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 5000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 3001&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 5001&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для каждого принципала необходимо будет два раза ввести его пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выведите информацию о полученных билетах.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Удалите полученный билет командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод будет таким.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что система экспортируется, выполнив команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
==Автомонтирование домашних каталогов при помощи autofs==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим пакет autofs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/auto.home и запишем в него строку.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включим и запустим службу autofs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Включение дисковых квот==&lt;br /&gt;
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.&lt;br /&gt;
&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...&lt;br /&gt;
Отмонтируйте раздел.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Подмонтируйте раздел&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.&lt;br /&gt;
&lt;br /&gt;
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.&lt;br /&gt;
&lt;br /&gt;
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.&lt;br /&gt;
&lt;br /&gt;
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.&lt;br /&gt;
&lt;br /&gt;
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77&lt;br /&gt;
29102 students s29a_rostova Ростова Наталья LRhevK2O &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.&lt;br /&gt;
&lt;br /&gt;
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Скрипт запускается так&lt;br /&gt;
&lt;br /&gt;
python useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Или если сделать файл useradmin.py исполняемым, то&lt;br /&gt;
&lt;br /&gt;
./useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Примеры параметров, которые можно передавать скрипту&lt;br /&gt;
!Параметры скрипта&lt;br /&gt;
!Выполняемое действие&lt;br /&gt;
|-&lt;br /&gt;
|list-users&lt;br /&gt;
|Вывести список пользователей&lt;br /&gt;
|-&lt;br /&gt;
|list-users --detailed&lt;br /&gt;
|Вывести список пользователей с подробной информацией (наличие принципала Kerberos, дисковая квота)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt&lt;br /&gt;
|Создать пользователей используя файл users.txt. Создаются записи в LDAP, Kerberos, создаётся домашний каталог и устанавливается квота&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --ldap&lt;br /&gt;
|Только создать записи ldap&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --kerberos&lt;br /&gt;
|Только создать принципалы Kerberos&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --home&lt;br /&gt;
|Только создать домашние каталоги (и скопировать туда skel)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --quota&lt;br /&gt;
|Только установить квоту&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --steps ldap kerberos home&lt;br /&gt;
|Выполнить только указанные шаги (ldap, kerberos, home), то есть создать пользователя с домашним каталогом, но без квоты&lt;br /&gt;
|-&lt;br /&gt;
|delete-user user_login&lt;br /&gt;
|Удалить пользователя с логином user_login (в том числе удаляется и домашний каталог)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Подключение ноутбуков к WiFi до входа в систему ==&lt;br /&gt;
На компьютере должна быть поднята сеть до входа в систему. Если используются ноутбуки с WiFi, то подключение к WiFi сети должно быть осуществлено до входа пользователя в систему, то есть без участия пользователя. Это возможно сделать, если для подключения к WiFi-сети достаточно указать только SSID и ключ подключения к сети.&lt;br /&gt;
&lt;br /&gt;
Войдите в систему под пользователем root. Следующая команда выведет список доступных сетей.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте новую сеть командой, заменив YOUR_SSID на SSID вашей сети и YOUR_PASSWORD - на ключ подключения к вашей сети. school-wifi - это имя соединения, его также можно изменить.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi connect YOUR_SSID password YOUR_PASSWORD name school-wifi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите автоподключение для этого соединения.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli connection modify school-wifi connection.autoconnect yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В каталоге /etc/NetworkManager/system-connections/ появится файл school-wifi.nmconnection  примерно такого содержания&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[connection]&lt;br /&gt;
id=school-wifi&lt;br /&gt;
uuid=***какой-то uuid***&lt;br /&gt;
type=wifi&lt;br /&gt;
interface-name=wlp0s20f3&lt;br /&gt;
timestamp=1753189862&lt;br /&gt;
&lt;br /&gt;
[wifi]&lt;br /&gt;
mode=infrastructure&lt;br /&gt;
ssid=***SSID вашей сети***&lt;br /&gt;
&lt;br /&gt;
[wifi-security]&lt;br /&gt;
auth-alg=open&lt;br /&gt;
key-mgmt=wpa-psk&lt;br /&gt;
psk=***ключ вашей сети***&lt;br /&gt;
&lt;br /&gt;
[ipv4]&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[ipv6]&lt;br /&gt;
addr-gen-mode=default&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2293</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2293"/>
		<updated>2025-08-26T13:36:27Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Настройка сети&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом.&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса &amp;quot;Фреш&amp;quot; 13).&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку &amp;quot;Дополнительно&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y task-lxqt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. &lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие &amp;quot;домен&amp;quot; дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch179.local) и везде используем именно его.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На клиенте выполните аналогичную команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи  пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка созданной базы командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Выполните команды:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Она должна вывести текст, в котором есть строки:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 5000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 3001&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 5001&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для каждого принципала необходимо будет два раза ввести его пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выведите информацию о полученных билетах.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Удалите полученный билет командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод будет таким.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что система экспортируется, выполнив команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
==Автомонтирование домашних каталогов при помощи autofs==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим пакет autofs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/auto.home и запишем в него строку.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включим и запустим службу autofs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Включение дисковых квот==&lt;br /&gt;
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.&lt;br /&gt;
&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...&lt;br /&gt;
Отмонтируйте раздел.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Подмонтируйте раздел&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.&lt;br /&gt;
&lt;br /&gt;
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.&lt;br /&gt;
&lt;br /&gt;
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.&lt;br /&gt;
&lt;br /&gt;
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.&lt;br /&gt;
&lt;br /&gt;
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77&lt;br /&gt;
29102 students s29a_rostova Ростова Наталья LRhevK2O &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.&lt;br /&gt;
&lt;br /&gt;
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Скрипт запускается так&lt;br /&gt;
&lt;br /&gt;
python useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Или если сделать файл useradmin.py исполняемым, то&lt;br /&gt;
&lt;br /&gt;
./useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Примеры параметров, которые можно передавать скрипту&lt;br /&gt;
!Параметры скрипта&lt;br /&gt;
!Выполняемое действие&lt;br /&gt;
|-&lt;br /&gt;
|list-users&lt;br /&gt;
|Вывести список пользователей&lt;br /&gt;
|-&lt;br /&gt;
|list-users --detailed&lt;br /&gt;
|Вывести список пользователей с подробной информацией (наличие принципала Kerberos, дисковая квота)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt&lt;br /&gt;
|Создать пользователей используя файл users.txt. Создаются записи в LDAP, Kerberos, создаётся домашний каталог и устанавливается квота&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --ldap&lt;br /&gt;
|Только создать записи ldap&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --kerberos&lt;br /&gt;
|Только создать принципалы Kerberos&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --home&lt;br /&gt;
|Только создать домашние каталоги (и скопировать туда skel)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --quota&lt;br /&gt;
|Только установить квоту&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --steps ldap kerberos home&lt;br /&gt;
|Выполнить только указанные шаги (ldap, kerberos, home), то есть создать пользователя с домашним каталогом, но без квоты&lt;br /&gt;
|-&lt;br /&gt;
|delete-user user_login&lt;br /&gt;
|Удалить пользователя с логином user_login (в том числе удаляется и домашний каталог)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Подключение ноутбуков к WiFi до входа в систему ==&lt;br /&gt;
На компьютере должна быть поднята сеть до входа в систему. Если используются ноутбуки с WiFi, то подключение к WiFi сети должно быть осуществлено до входа пользователя в систему, то есть без участия пользователя. Это возможно сделать, если для подключения к WiFi-сети достаточно указать только SSID и ключ подключения к сети.&lt;br /&gt;
&lt;br /&gt;
Войдите в систему под пользователем root. Следующая команда выведет список доступных сетей.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте новую сеть командой, заменив YOUR_SSID на SSID вашей сети и YOUR_PASSWORD - на ключ подключения к вашей сети. school-wifi - это имя соединения, его также можно изменить.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli dev wifi connect YOUR_SSID password YOUR_PASSWORD name school-wifi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите автоподключение для этого соединения.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli connection modify school-wifi connection.autoconnect yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В каталоге /etc/NetworkManager/system-connections/ появится файл school-wifi.nmconnection  примерно такого содержания&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[connection]&lt;br /&gt;
id=school-wifi&lt;br /&gt;
uuid=***какой-то uuid***&lt;br /&gt;
type=wifi&lt;br /&gt;
interface-name=wlp0s20f3&lt;br /&gt;
timestamp=1753189862&lt;br /&gt;
&lt;br /&gt;
[wifi]&lt;br /&gt;
mode=infrastructure&lt;br /&gt;
ssid=***SSID вашей сети***&lt;br /&gt;
&lt;br /&gt;
[wifi-security]&lt;br /&gt;
auth-alg=open&lt;br /&gt;
key-mgmt=wpa-psk&lt;br /&gt;
psk=***ключ вашей сети***&lt;br /&gt;
&lt;br /&gt;
[ipv4]&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[ipv6]&lt;br /&gt;
addr-gen-mode=default&lt;br /&gt;
method=auto&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2292</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2292"/>
		<updated>2025-08-25T19:34:09Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом.&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса &amp;quot;Фреш&amp;quot; 13).&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку &amp;quot;Дополнительно&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y task-lxqt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. &lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие &amp;quot;домен&amp;quot; дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch179.local) и везде используем именно его.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На клиенте выполните аналогичную команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи  пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка созданной базы командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Выполните команды:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Она должна вывести текст, в котором есть строки:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 5000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 3001&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 5001&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для каждого принципала необходимо будет два раза ввести его пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выведите информацию о полученных билетах.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Удалите полученный билет командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод будет таким.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что система экспортируется, выполнив команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
==Автомонтирование домашних каталогов при помощи autofs==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим пакет autofs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/auto.home и запишем в него строку.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включим и запустим службу autofs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Включение дисковых квот==&lt;br /&gt;
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.&lt;br /&gt;
&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...&lt;br /&gt;
Отмонтируйте раздел.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Подмонтируйте раздел&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.&lt;br /&gt;
&lt;br /&gt;
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.&lt;br /&gt;
&lt;br /&gt;
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.&lt;br /&gt;
&lt;br /&gt;
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.&lt;br /&gt;
&lt;br /&gt;
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77&lt;br /&gt;
29102 students s29a_rostova Ростова Наталья LRhevK2O &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.&lt;br /&gt;
&lt;br /&gt;
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Скрипт запускается так&lt;br /&gt;
&lt;br /&gt;
python useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Или если сделать файл useradmin.py исполняемым, то&lt;br /&gt;
&lt;br /&gt;
./useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Примеры параметров, которые можно передавать скрипту&lt;br /&gt;
!Параметры скрипта&lt;br /&gt;
!Выполняемое действие&lt;br /&gt;
|-&lt;br /&gt;
|list-users&lt;br /&gt;
|Вывести список пользователей&lt;br /&gt;
|-&lt;br /&gt;
|list-users --detailed&lt;br /&gt;
|Вывести список пользователей с подробной информацией (наличие принципала Kerberos, дисковая квота)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt&lt;br /&gt;
|Создать пользователей используя файл users.txt. Создаются записи в LDAP, Kerberos, создаётся домашний каталог и устанавливается квота&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --ldap&lt;br /&gt;
|Только создать записи ldap&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --kerberos&lt;br /&gt;
|Только создать принципалы Kerberos&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --home&lt;br /&gt;
|Только создать домашние каталоги (и скопировать туда skel)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --quota&lt;br /&gt;
|Только установить квоту&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --steps ldap kerberos home&lt;br /&gt;
|Выполнить только указанные шаги (ldap, kerberos, home), то есть создать пользователя с домашним каталогом, но без квоты&lt;br /&gt;
|-&lt;br /&gt;
|delete-user user_login&lt;br /&gt;
|Удалить пользователя с логином user_login (в том числе удаляется и домашний каталог)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2268</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2268"/>
		<updated>2025-07-21T18:17:08Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: /* Массовое создание пользователей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом.&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса &amp;quot;Фреш&amp;quot; 13).&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку &amp;quot;Дополнительно&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y task-lxqt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. &lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие &amp;quot;домен&amp;quot; дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch719.local) и везде используем именно его.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На клиенте выполните аналогичную команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи  пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка созданной базы командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Выполните команды:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Она должна вывести текст, в котором есть строки:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 5000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 3001&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 5001&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для каждого принципала необходимо будет два раза ввести его пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выведите информацию о полученных билетах.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Удалите полученный билет командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод будет таким.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что система экспортируется, выполнив команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
==Автомонтирование домашних каталогов при помощи autofs==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим пакет autofs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/auto.home и запишем в него строку.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включим и запустим службу autofs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Включение дисковых квот==&lt;br /&gt;
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.&lt;br /&gt;
&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...&lt;br /&gt;
Отмонтируйте раздел.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Подмонтируйте раздел&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.&lt;br /&gt;
&lt;br /&gt;
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.&lt;br /&gt;
&lt;br /&gt;
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.&lt;br /&gt;
&lt;br /&gt;
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.&lt;br /&gt;
&lt;br /&gt;
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77&lt;br /&gt;
29102 students s29a_rostova Ростова Наталья LRhevK2O &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.&lt;br /&gt;
&lt;br /&gt;
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Скрипт запускается так&lt;br /&gt;
&lt;br /&gt;
python useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Или если сделать файл useradmin.py исполняемым, то&lt;br /&gt;
&lt;br /&gt;
./useradmin.py add-file users.txt&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./useradmin.py add-file users.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Примеры параметров, которые можно передавать скрипту&lt;br /&gt;
!Параметры скрипта&lt;br /&gt;
!Выполняемое действие&lt;br /&gt;
|-&lt;br /&gt;
|list-users&lt;br /&gt;
|Вывести список пользователей&lt;br /&gt;
|-&lt;br /&gt;
|list-users --detailed&lt;br /&gt;
|Вывести список пользователей с подробной информацией (наличие принципала Kerberos, дисковая квота)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt&lt;br /&gt;
|Создать пользователей используя файл users.txt. Создаются записи в LDAP, Kerberos, создаётся домашний каталог и устанавливается квота&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --ldap&lt;br /&gt;
|Только создать записи ldap&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --kerberos&lt;br /&gt;
|Только создать принципалы Kerberos&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --home&lt;br /&gt;
|Только создать домашние каталоги (и скопировать туда skel)&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --quota&lt;br /&gt;
|Только установить квоту&lt;br /&gt;
|-&lt;br /&gt;
|add-file users.txt --steps ldap kerberos home&lt;br /&gt;
|Выполнить только указанные шаги (ldap, kerberos, home), то есть создать пользователя с домашним каталогом, но без квоты&lt;br /&gt;
|-&lt;br /&gt;
|delete-user user_login&lt;br /&gt;
|Удалить пользователя с логином user_login (в том числе удаляется и домашний каталог)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2267</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2267"/>
		<updated>2025-07-21T18:03:16Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом.&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса &amp;quot;Фреш&amp;quot; 13).&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку &amp;quot;Дополнительно&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y task-lxqt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. &lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие &amp;quot;домен&amp;quot; дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch719.local) и везде используем именно его.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На клиенте выполните аналогичную команду (от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи  пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка созданной базы командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Выполните команды:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Она должна вывести текст, в котором есть строки:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 5000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 3001&lt;br /&gt;
gidNumber: 3001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 5001&lt;br /&gt;
gidNumber: 5001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Для каждого принципала необходимо будет два раза ввести его пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Выведите информацию о полученных билетах.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Удалите полученный билет командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вывод будет таким.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Проверьте, что система экспортируется, выполнив команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
==Автомонтирование домашних каталогов при помощи autofs==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим пакет autofs.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создадим файл /etc/auto.home и запишем в него строку.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включим и запустим службу autofs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Включение дисковых квот==&lt;br /&gt;
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.&lt;br /&gt;
&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...&lt;br /&gt;
Отмонтируйте раздел.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Подмонтируйте раздел&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.&lt;br /&gt;
&lt;br /&gt;
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.&lt;br /&gt;
&lt;br /&gt;
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.&lt;br /&gt;
&lt;br /&gt;
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.&lt;br /&gt;
&lt;br /&gt;
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77&lt;br /&gt;
29102 students s29a_rostova Ростова Наталья LRhevK2O &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.&lt;br /&gt;
&lt;br /&gt;
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D1%80%D0%BE%D1%87%D0%B8%D0%B5&amp;diff=2255</id>
		<title>Обсуждение:Прочие</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D1%80%D0%BE%D1%87%D0%B8%D0%B5&amp;diff=2255"/>
		<updated>2025-07-15T17:05:20Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Ого, я даже помню, как в размете MediaWiki вставлять ссылку на своё имя и дату правки.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Кажется, что &amp;quot;Прочие&amp;quot; - плохое название для страницы. [[Участник:Dkirienko|Dkirienko]] ([[Обсуждение участника:Dkirienko|обсуждение]]) 20:05, 15 июля 2025 (MSK)&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D1%80%D0%BE%D1%87%D0%B8%D0%B5&amp;diff=2254</id>
		<title>Обсуждение:Прочие</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D1%80%D0%BE%D1%87%D0%B8%D0%B5&amp;diff=2254"/>
		<updated>2025-07-15T17:04:22Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Новая страница: «Кажется, что &amp;quot;Прочие&amp;quot; - плохое название для страницы.»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Кажется, что &amp;quot;Прочие&amp;quot; - плохое название для страницы.&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2253</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2253"/>
		<updated>2025-07-15T09:58:55Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: /* Экспорт /home на сервере */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Перезагрузите клиент и проверьте, что служба nfs-idmapd успешно запущена.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2250</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2250"/>
		<updated>2025-07-11T09:36:54Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Перезагрузите клиент и проверьте, что служба nfs-idmapd успешно запущена.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 noatime,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2fs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs noatime,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2249</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2249"/>
		<updated>2025-07-11T08:03:10Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Отмена правки 2248, сделанной Dkirienko (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Перезагрузите клиент и проверьте, что служба nfs-idmapd успешно запущена.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2ffs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quoquotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2248</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2248"/>
		<updated>2025-07-11T08:02:23Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: /* Конфигурация базы данных Kerberos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
 default_realm = SCH179.RU&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Перезагрузите клиент и проверьте, что служба nfs-idmapd успешно запущена.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2ffs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quoquotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2246</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2246"/>
		<updated>2025-07-09T13:02:33Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: /* Автомонтирование домашних каталогов при помощи autofs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Перезагрузите клиент и проверьте, что служба nfs-idmapd успешно запущена.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2ffs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quoquotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2245</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2245"/>
		<updated>2025-07-09T12:48:00Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Изменение параметров монтирования nfs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Перезагрузите клиент и проверьте, что служба nfs-idmapd успешно запущена.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,nosuid,timeo=600,retrans=2 rosa-server.179.ru:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2ffs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quoquotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2244</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2244"/>
		<updated>2025-07-09T09:44:53Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status nfs-idmapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере скорее всего вы увидите, что служба работает - в выводе будет строка &amp;quot;&amp;lt;code&amp;gt;Active: active (running)&amp;lt;/code&amp;gt;&amp;quot;. А на клиенте - не работает (&amp;quot;&amp;lt;code&amp;gt;Active: inactive (dead)&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.&lt;br /&gt;
&lt;br /&gt;
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).&lt;br /&gt;
&lt;br /&gt;
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Wants=nfs-idmapd.service&lt;br /&gt;
After=nfs-idmapd.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Перезагрузите клиент и проверьте, что служба nfs-idmapd успешно запущена.&lt;br /&gt;
&lt;br /&gt;
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2ffs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quoquotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2240</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2240"/>
		<updated>2025-07-07T07:04:10Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd]&#039;&#039;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. Отсутствие этой строки приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[нужно уточнить, возможно, нужно как-то отдельно запускать службу nfs-idmapd]&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2ffs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quoquotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2239</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2239"/>
		<updated>2025-07-07T06:39:07Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd]&#039;&#039;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. Отсутствие этой строки приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[нужно уточнить, возможно, нужно как-то отдельно запускать службу nfs-idmapd]&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2ffs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quoquotacheck -cum /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите квоты на файловой системе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
quotaon /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Файловая система xfs ===&lt;br /&gt;
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home xfs defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Массовое создание пользователей ==&lt;br /&gt;
Для создания пользователя нужно выполнить следующие шаги.&lt;br /&gt;
&lt;br /&gt;
# Добавить информацию о пользователе в LDAP.&lt;br /&gt;
# Создать билет Kerberos.&lt;br /&gt;
# Создать домашний каталог и скопировать туда содержимое /etc/skel.&lt;br /&gt;
# Установить квоты.&lt;br /&gt;
&lt;br /&gt;
Для автоматизации этих действий можно использовать скрипт, который будет выложен позже.&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2238</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2238"/>
		<updated>2025-07-07T06:26:33Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd]&#039;&#039;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. Отсутствие этой строки приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[нужно уточнить, возможно, нужно как-то отдельно запускать службу nfs-idmapd]&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Включение дисковых квот ==&lt;br /&gt;
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.&lt;br /&gt;
&lt;br /&gt;
=== Файловая система ext4 ===&lt;br /&gt;
Установите пакет quota&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install quota&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/dev/sda4 /home ext4 defaults,usrquota 0 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...&lt;br /&gt;
&lt;br /&gt;
Отмонтируйте раздел.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tune2ffs -O quota /dev/sda4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Подмонтируйте раздел&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount /home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2237</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2237"/>
		<updated>2025-07-05T12:14:23Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Краткое описание==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.&lt;br /&gt;
&lt;br /&gt;
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local.&lt;br /&gt;
&lt;br /&gt;
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду (от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Настройка OpenLDAP на сервере==&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставьте в него такой текст. Здесь dc=sch179,dc=local - суффикс имён всех объектов, которые будут храниться в LDAP. Замените здесь sch179 на своё название, делайте это везде в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление этого файла в LDAP (команда от root): &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка - запрос информации обо всех группах:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Попробуем добавить тестовых пользователей.&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos на сервере==&lt;br /&gt;
Kerberos - протокол аутентификации (проверки пароля). Хотя пароли пользователей могут храниться в LDAP, Kerberos является более защищённым протоколом. А для доступа к NFS с авторизацией использование Kerberos является обязательным. Поэтому мы будем хранить пароли пользователей только в Kerberos.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &lt;br /&gt;
&lt;br /&gt;
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Доступ к LDAP и Kerberos через SSSD==&lt;br /&gt;
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.&lt;br /&gt;
&lt;br /&gt;
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка sssd===&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка Kerberos ===&lt;br /&gt;
На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&lt;br /&gt;
&lt;br /&gt;
Вероятно, этого можно и не делать, если обращаться к Kerberos будет только служба sssd, а параметры доступа к Kerberos в sssd.conf указаны. Но если вы захотите на клиенте получить билет Kerberos напрямую (без sssd), например, если для проверки вы попробуете смонтировать каталог /home по nfs, то для этого нужно будет использовать консольную утилиту kinit, а ей для информации о сервере kerberos нужен файл /etc/krb5.conf. Поэтому создайте на клиенте этот файл, аналогичный приведённому выше примеру для сервера.&lt;br /&gt;
&lt;br /&gt;
===Настройка Name Service Switch (nss)===&lt;br /&gt;
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.&lt;br /&gt;
&lt;br /&gt;
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
PAM (Pluggable Authentication Module) - это библиотека, осуществляющая аутентификацию пользователей. Нужно настроить эту библиотеку так, чтобы сначала она сначала проверяла пароль по локальным файлам shadow, а затем обращалась к службе sssd.&lt;br /&gt;
&lt;br /&gt;
Настройки PAM хранятся в каталоге /etc/pam.d/.&lt;br /&gt;
&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка аутентификации===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выведите информацию о полученных билетах.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный билет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).&lt;br /&gt;
&lt;br /&gt;
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
Если это получилось, переходите к настройке хранения домашних каталогов в сети.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
Каталог /home на сервере, где будут лежать домашние каталоги всех доменных пользователей, будет доступен по сети. Для этого будем использовать сетевой протокол NFS.&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd]&#039;&#039;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&lt;br /&gt;
&lt;br /&gt;
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы и экспортированы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. Отсутствие этой строки приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[нужно уточнить, возможно, нужно как-то отдельно запускать службу nfs-idmapd]&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root на клиенте.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.&lt;br /&gt;
&lt;br /&gt;
Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него строку.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2236</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2236"/>
		<updated>2025-07-04T17:08:27Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также расположение домашнего каталога администратора системы можно задать при установке системы.&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
Эти шаги нужно сделать и на сервере, и на клиенте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Служба sssd получает информацию о пользователях и их паролях через ldap и kerberos.&lt;br /&gt;
&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка NSS===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере - вряд ли вы хотите давать пользователям такую возможность, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности использовать LDAP + Kerberos для авторизации. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте. Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&lt;br /&gt;
(нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd).&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. Отсутствие этой строки приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
(нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd).&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2235</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2235"/>
		<updated>2025-07-04T14:06:39Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также расположение домашнего каталога администратора системы можно задать при установке системы.&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
Для отключения всех ждущих-спящих режимов на компьютере выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
Эти шаги нужно сделать и на сервере, и на клиенте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Служба sssd получает информацию о пользователях и их паролях через ldap и kerberos.&lt;br /&gt;
&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка NSS===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере - вряд ли вы хотите давать пользователям такую возможность, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности использовать LDAP + Kerberos для авторизации. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте. Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&lt;br /&gt;
(нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd).&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. Отсутствие этой строки приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
(нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd).&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2234</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2234"/>
		<updated>2025-07-04T13:55:10Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также расположение домашнего каталога администратора системы можно задать при установке системы.&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
Эти шаги нужно сделать и на сервере, и на клиенте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Служба sssd получает информацию о пользователях и их паролях через ldap и kerberos.&lt;br /&gt;
&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка NSS===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере - вряд ли вы хотите давать пользователям такую возможность, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности использовать LDAP + Kerberos для авторизации. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте. Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&lt;br /&gt;
(нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd).&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. Отсутствие этой строки приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
(нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd).&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2233</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2233"/>
		<updated>2025-07-04T13:50:37Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также расположение домашнего каталога администратора системы можно задать при установке системы.&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
Эти шаги нужно сделать и на сервере, и на клиенте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Служба sssd получает информацию о пользователях и их паролях через ldap и kerberos.&lt;br /&gt;
&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка NSS===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере - вряд ли вы хотите давать пользователям такую возможность, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности использовать LDAP + Kerberos для авторизации. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
Служба oddjobd нужна для создания домашнего каталога.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте. Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.&lt;br /&gt;
&lt;br /&gt;
(нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd).&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка idmapd ===&lt;br /&gt;
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. Отсутствие этой строки приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.&lt;br /&gt;
&lt;br /&gt;
(нужно уточнить, возможно, нужно как-то запускать службу nfs-idmapd).&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[General]&lt;br /&gt;
Domain = sch179.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2232</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2232"/>
		<updated>2025-07-04T09:10:22Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также расположение домашнего каталога администратора системы можно задать при установке системы.&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
Эти шаги нужно сделать и на сервере, и на клиенте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap openldap-clients krb5-workstation oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Служба sssd получает информацию о пользователях и их паролях через ldap и kerberos.&lt;br /&gt;
&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка NSS===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере - вряд ли вы хотите давать пользователям такую возможность, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности использовать LDAP + Kerberos для авторизации. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
Служба oddjobd нужна для создания домашнего каталога.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте. Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2228</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2228"/>
		<updated>2025-07-03T13:59:57Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание групп пользователей===&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание пользователей===&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local -q list_principals&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
Эти шаги нужно сделать и на сервере, и на клиенте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Служба sssd получает информацию о пользователях и их паролях через ldap и kerberos.&lt;br /&gt;
&lt;br /&gt;
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://server.sch179.local&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = server.sch179.local&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Установите на этот файл права.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка NSS===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка PAM ===&lt;br /&gt;
Измените файл /etc/pam.d/system-auth, добавив несколько строк.&lt;br /&gt;
&lt;br /&gt;
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.&lt;br /&gt;
&lt;br /&gt;
Скорее всего у вас получится такой файл.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
auth        required      pam_env.so&lt;br /&gt;
auth        sufficient    pam_unix.so try_first_pass likeauth nullok&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
auth        required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
account     required      pam_unix.so&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
&lt;br /&gt;
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
password    required      pam_deny.so&lt;br /&gt;
&lt;br /&gt;
session     optional      pam_keyinit.so revoke&lt;br /&gt;
session     required      pam_limits.so&lt;br /&gt;
session     optional      pam_env.so&lt;br /&gt;
session     optional      pam_umask.so&lt;br /&gt;
session     optional      pam_systemd.so&lt;br /&gt;
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid&lt;br /&gt;
session     required      pam_unix.so&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Сделайте такие же правки в файле /etc/pam.d/pasword-auth&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере - вряд ли вы хотите давать пользователям такую возможность, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности использовать LDAP + Kerberos для авторизации. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. &#039;&#039;(проверить информацию).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
Служба oddjobd нужна для создания домашнего каталога.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка===&lt;br /&gt;
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение билета Kerberos для пользователя. Выполните эту команду на клиенте. Нужно ввести пароль пользователя teacher1.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - teacher1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на сервере ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание ключей Kerberos ===&lt;br /&gt;
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить на сервере команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Экспорт /home на сервере ===&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Вы можете указать сразу несколько возможных уровней безопасности Kerberos, которые будет поддерживать сервер, например: sec=krb5,sec=krb5i,sec=krb5p&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка NFS на клиенте ==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Копирование ключей Kerberos ===&lt;br /&gt;
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&lt;br /&gt;
&lt;br /&gt;
Проверьте наличие ключей в этом файле командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Включение и запуск служб ===&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка монтирования файловой системы ===&lt;br /&gt;
Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit teacher1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Настройка выполняется на клиенте.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2227</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2227"/>
		<updated>2025-07-03T10:57:50Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление групп и пользователей==&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление пользователей==&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Файл: /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://localhost&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = localhost&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Права:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSS и PAM===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Сделайте такие же правки в файле /etc/pam.d/pasword-auth&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка возможности входа===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
su - dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка клиента ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://192.168.1.82&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = 192.168.1.82&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите права доступа на этот файл&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файле /etc/nsswitch.conf замените три строки на такие:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 192.168.1.82&lt;br /&gt;
  admin_server = 192.168.1.82&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.&lt;br /&gt;
&lt;br /&gt;
Запустите службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь проверьте работу всех сервисов.&lt;br /&gt;
&lt;br /&gt;
Проверка ldap. Должна вывести информацию о пользователе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение тикета керберос. Нужно ввести пароль пользователя dk.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на сервере ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим ключи Kerberos на сервере.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В приложении kadmin.local нужно ввести команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно и даёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на клиенте ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2226</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2226"/>
		<updated>2025-07-03T10:32:48Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: Другая версия, часть правок может быть потеряна.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При установке на реальное железо нужно проверить, что SELINUX отключён.  &lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление групп и пользователей==&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление пользователей==&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
=== Установка пакетов ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка главного конфига Kerberos ===&lt;br /&gt;
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.local&lt;br /&gt;
  admin_server = server.sch179.local&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.&lt;br /&gt;
&lt;br /&gt;
===Настройка базы Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципалов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однострочная команда для создания пароля для заданного пользователя.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw xWnp7NoX dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Файл: /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://localhost&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = localhost&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Права:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSS и PAM===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Сделайте такие же правки в файле /etc/pam.d/pasword-auth&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка возможности входа===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
su - dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка клиента ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://192.168.1.82&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = 192.168.1.82&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите права доступа на этот файл&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файле /etc/nsswitch.conf замените три строки на такие:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 192.168.1.82&lt;br /&gt;
  admin_server = 192.168.1.82&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.&lt;br /&gt;
&lt;br /&gt;
Запустите службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь проверьте работу всех сервисов.&lt;br /&gt;
&lt;br /&gt;
Проверка ldap. Должна вывести информацию о пользователе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение тикета керберос. Нужно ввести пароль пользователя dk.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на сервере ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим ключи Kerberos на сервере.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В приложении kadmin.local нужно ввести команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно и даёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на клиенте ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2216</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2216"/>
		<updated>2025-06-28T19:02:30Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление групп и пользователей==&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление пользователей==&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация сервера Kerberos ===&lt;br /&gt;
Запишите в файл /etc/krb5.conf следующее. &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
includedir /etc/krb5.conf.d/&lt;br /&gt;
&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = server.sch179.ru&lt;br /&gt;
  admin_server = server.sch179.ru&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация базы данных Kerberos===&lt;br /&gt;
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Включение и запуск служб===&lt;br /&gt;
Выполните команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципала kadmin/admin===&lt;br /&gt;
В базе Kerberos хранятся &amp;quot;принципалы&amp;quot; (principals) - идентификаторы пользователей, сервисов, хостов.&lt;br /&gt;
&lt;br /&gt;
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда &amp;quot;listprincs&amp;quot; выводит список всех принципалов. Команда &amp;quot;quit&amp;quot; завершает работу kdamin.local.&lt;br /&gt;
&lt;br /&gt;
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local listprincs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.&lt;br /&gt;
&lt;br /&gt;
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.&lt;br /&gt;
&lt;br /&gt;
=== Создание принципалов для пользователей ===&lt;br /&gt;
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.&lt;br /&gt;
&lt;br /&gt;
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
addprinc teacher1&lt;br /&gt;
addprinc student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Для каждого принципала необходимо будет два раза ввести пароль.&lt;br /&gt;
&lt;br /&gt;
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw qwerty456 teacher1&lt;br /&gt;
kadmin.local addprinc -pw qwerty789 student1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Файл: /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://localhost&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = localhost&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Права:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSS и PAM===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Сделайте такие же правки в файле /etc/pam.d/pasword-auth&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка возможности входа===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
su - dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка клиента ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://192.168.1.82&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = 192.168.1.82&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите права доступа на этот файл&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файле /etc/nsswitch.conf замените три строки на такие:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 192.168.1.82&lt;br /&gt;
  admin_server = 192.168.1.82&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.&lt;br /&gt;
&lt;br /&gt;
Запустите службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь проверьте работу всех сервисов.&lt;br /&gt;
&lt;br /&gt;
Проверка ldap. Должна вывести информацию о пользователе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение тикета керберос. Нужно ввести пароль пользователя dk.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на сервере ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим ключи Kerberos на сервере.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В приложении kadmin.local нужно ввести команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно и даёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на клиенте ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2215</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2215"/>
		<updated>2025-06-28T16:52:42Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При установке на реальное железо нужно проверить, что SELINUX отключён.  &lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление групп и пользователей==&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление пользователей==&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /etc/krb5.conf ===&lt;br /&gt;
Этот файл должен выглядеть так &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 127.0.0.1&lt;br /&gt;
  admin_server = 127.0.0.1&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте мастер-пароль, например: `3yomdiYp`&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /var/kerberos/krb5kdc/kdc.conf===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ACL файл===&lt;br /&gt;
Файл: /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципалов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однострочная команда для создания пароля для заданного пользователя.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw xWnp7NoX dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Файл: /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://localhost&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = localhost&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Права:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSS и PAM===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Сделайте такие же правки в файле /etc/pam.d/pasword-auth&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка возможности входа===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
su - dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка клиента ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://192.168.1.82&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = 192.168.1.82&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите права доступа на этот файл&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файле /etc/nsswitch.conf замените три строки на такие:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 192.168.1.82&lt;br /&gt;
  admin_server = 192.168.1.82&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.&lt;br /&gt;
&lt;br /&gt;
Запустите службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь проверьте работу всех сервисов.&lt;br /&gt;
&lt;br /&gt;
Проверка ldap. Должна вывести информацию о пользователе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение тикета керберос. Нужно ввести пароль пользователя dk.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на сервере ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим ключи Kerberos на сервере.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В приложении kadmin.local нужно ввести команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно и даёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на клиенте ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2212</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2212"/>
		<updated>2025-06-26T20:02:40Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При установке на реальное железо нужно проверить, что SELINUX отключён.  &lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R ldap:ldap /etc/openldap/slapd.d&lt;br /&gt;
chown -R ldap:ldap /var/lib/ldap&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы и записи администратора LDAP===&lt;br /&gt;
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе &amp;quot;qwerty123&amp;quot; программа может выдать такой хеш:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.&lt;br /&gt;
&lt;br /&gt;
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
Теперь создадим базу LDAP и запись администратора LDAP.&lt;br /&gt;
&lt;br /&gt;
Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавьте содержимое этого файла в базу LDAP.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка созданной базы запросом.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
Далее в базу нужно добавить &amp;quot;схемы&amp;quot; - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Она должна вывести текст, в котором есть строки:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn={0}core,cn=schema,cn=config&lt;br /&gt;
dn: cn={1}cosine,cn=schema,cn=config&lt;br /&gt;
dn: cn={2}nis,cn=schema,cn=config&lt;br /&gt;
dn: cn={3}inetorgperson,cn=schema,cn=config&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание базовой структуры организации ===&lt;br /&gt;
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания. &lt;br /&gt;
&lt;br /&gt;
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: School No 179&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP (не забудьте заменить sch179 на своё название):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.&lt;br /&gt;
&lt;br /&gt;
Для проверки введите команду  (не забудьте заменить sch179 на своё название):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;dc=sch179,dc=local&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление групп и пользователей==&lt;br /&gt;
&lt;br /&gt;
Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление пользователей==&lt;br /&gt;
Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.&lt;br /&gt;
&lt;br /&gt;
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
dn: cn=teacher1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teacher1&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
description: Primary group for user teacher1&lt;br /&gt;
&lt;br /&gt;
dn: uid=teacher1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: teacher1&lt;br /&gt;
sn: Иванов&lt;br /&gt;
givenName: Сергей&lt;br /&gt;
cn: Сергей Иванов&lt;br /&gt;
uidNumber: 2001&lt;br /&gt;
gidNumber: 2001&lt;br /&gt;
homeDirectory: /home/teacher1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User teacher1 (Сергей Иванов)&lt;br /&gt;
&lt;br /&gt;
dn: cn=student1,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: student1&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
description: Primary group for user student1&lt;br /&gt;
&lt;br /&gt;
dn: uid=student1,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: student1&lt;br /&gt;
sn: Васильева&lt;br /&gt;
givenName: Мария&lt;br /&gt;
cn: Мария Васильева&lt;br /&gt;
uidNumber: 4001&lt;br /&gt;
gidNumber: 4001&lt;br /&gt;
homeDirectory: /home/student1&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
description: User student1 (Мария Васильева)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f users.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=teacher1)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=teacher1)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /etc/krb5.conf ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 127.0.0.1&lt;br /&gt;
  admin_server = 127.0.0.1&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте мастер-пароль, например: `3yomdiYp`&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /var/kerberos/krb5kdc/kdc.conf===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ACL файл===&lt;br /&gt;
Файл: /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципалов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однострочная команда для создания пароля для заданного пользователя.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw xWnp7NoX dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Файл: /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://localhost&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = localhost&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Права:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSS и PAM===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Сделайте такие же правки в файле /etc/pam.d/pasword-auth&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка возможности входа===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
su - dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка клиента ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://192.168.1.82&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = 192.168.1.82&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите права доступа на этот файл&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файле /etc/nsswitch.conf замените три строки на такие:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 192.168.1.82&lt;br /&gt;
  admin_server = 192.168.1.82&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.&lt;br /&gt;
&lt;br /&gt;
Запустите службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь проверьте работу всех сервисов.&lt;br /&gt;
&lt;br /&gt;
Проверка ldap. Должна вывести информацию о пользователе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение тикета керберос. Нужно ввести пароль пользователя dk.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на сервере ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим ключи Kerberos на сервере.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В приложении kadmin.local нужно ввести команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно и даёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на клиенте ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2211</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2211"/>
		<updated>2025-06-26T18:24:46Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При установке на реальное железо нужно проверить, что SELINUX отключён.  &lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку (команда от root).&lt;br /&gt;
 dnf install -y task-lxqt&lt;br /&gt;
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).&lt;br /&gt;
 dnf install -y virtualbox-guest-additions&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск LDAP ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому (workaround пока) удалите пакет openldap-servers  и поставьте его снова.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf remove openldap-servers&lt;br /&gt;
dnf install -y openldap-servers&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка базы данных LDAP===&lt;br /&gt;
&lt;br /&gt;
====Создание хеша пароля администратора ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример результата:&lt;br /&gt;
&amp;lt;pre&amp;gt;{SSHA}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Файл create-db.ldif====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Применение изменений:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Проверка созданной базы====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базовой структуры LDAP ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: Sch179 School&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка схем:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление групп пользователей==&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление пользователя (например, dk)==&lt;br /&gt;
&lt;br /&gt;
===Создание пароля===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd -s t9cdw3qR -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===user-dk.ldif ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=dk,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: dk&lt;br /&gt;
gidNumber: 1001&lt;br /&gt;
description: Primary group for user dk&lt;br /&gt;
&lt;br /&gt;
dn: uid=dk,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: dk&lt;br /&gt;
sn: Кириенко&lt;br /&gt;
givenName: Денис&lt;br /&gt;
cn: Денис Кириенко&lt;br /&gt;
uidNumber: 1001&lt;br /&gt;
gidNumber: 1001&lt;br /&gt;
homeDirectory: /home/dk&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
userPassword: {SSHA}rKkuYpM736DjDANzimaJOW0vV8bO8dN9&lt;br /&gt;
description: User Denis Kirienko&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f user-dk.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=dk)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=dk)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /etc/krb5.conf ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 127.0.0.1&lt;br /&gt;
  admin_server = 127.0.0.1&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте мастер-пароль, например: `3yomdiYp`&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /var/kerberos/krb5kdc/kdc.conf===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ACL файл===&lt;br /&gt;
Файл: /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципалов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однострочная команда для создания пароля для заданного пользователя.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw xWnp7NoX dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Файл: /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://localhost&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = localhost&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Права:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSS и PAM===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Сделайте такие же правки в файле /etc/pam.d/pasword-auth&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка возможности входа===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
su - dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка клиента ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://192.168.1.82&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = 192.168.1.82&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите права доступа на этот файл&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файле /etc/nsswitch.conf замените три строки на такие:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 192.168.1.82&lt;br /&gt;
  admin_server = 192.168.1.82&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.&lt;br /&gt;
&lt;br /&gt;
Запустите службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь проверьте работу всех сервисов.&lt;br /&gt;
&lt;br /&gt;
Проверка ldap. Должна вывести информацию о пользователе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение тикета керберос. Нужно ввести пароль пользователя dk.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на сервере ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим ключи Kerberos на сервере.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В приложении kadmin.local нужно ввести команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно и даёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на клиенте ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2210</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2210"/>
		<updated>2025-06-26T18:10:13Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При установке на реальное железо нужно проверить, что SELINUX отключён.  &lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Пусть логин администратора системы - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /usr/local/home&lt;br /&gt;
mv /home/admin /usr/local/home/&lt;br /&gt;
usermod -d /usr/local/home/admin admin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск LDAP ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому (workaround пока) удалите пакет openldap-servers  и поставьте его снова.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf remove openldap-servers&lt;br /&gt;
dnf install -y openldap-servers&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка базы данных LDAP===&lt;br /&gt;
&lt;br /&gt;
====Создание хеша пароля администратора ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример результата:&lt;br /&gt;
&amp;lt;pre&amp;gt;{SSHA}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Файл create-db.ldif====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Применение изменений:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Проверка созданной базы====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базовой структуры LDAP ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: Sch179 School&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка схем:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление групп пользователей==&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление пользователя (например, dk)==&lt;br /&gt;
&lt;br /&gt;
===Создание пароля===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd -s t9cdw3qR -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===user-dk.ldif ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=dk,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: dk&lt;br /&gt;
gidNumber: 1001&lt;br /&gt;
description: Primary group for user dk&lt;br /&gt;
&lt;br /&gt;
dn: uid=dk,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: dk&lt;br /&gt;
sn: Кириенко&lt;br /&gt;
givenName: Денис&lt;br /&gt;
cn: Денис Кириенко&lt;br /&gt;
uidNumber: 1001&lt;br /&gt;
gidNumber: 1001&lt;br /&gt;
homeDirectory: /home/dk&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
userPassword: {SSHA}rKkuYpM736DjDANzimaJOW0vV8bO8dN9&lt;br /&gt;
description: User Denis Kirienko&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f user-dk.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=dk)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=dk)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /etc/krb5.conf ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 127.0.0.1&lt;br /&gt;
  admin_server = 127.0.0.1&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте мастер-пароль, например: `3yomdiYp`&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /var/kerberos/krb5kdc/kdc.conf===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ACL файл===&lt;br /&gt;
Файл: /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципалов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однострочная команда для создания пароля для заданного пользователя.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw xWnp7NoX dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Файл: /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://localhost&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = localhost&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Права:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSS и PAM===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Сделайте такие же правки в файле /etc/pam.d/pasword-auth&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка возможности входа===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
su - dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка клиента ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://192.168.1.82&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = 192.168.1.82&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите права доступа на этот файл&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файле /etc/nsswitch.conf замените три строки на такие:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 192.168.1.82&lt;br /&gt;
  admin_server = 192.168.1.82&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.&lt;br /&gt;
&lt;br /&gt;
Запустите службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь проверьте работу всех сервисов.&lt;br /&gt;
&lt;br /&gt;
Проверка ldap. Должна вывести информацию о пользователе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение тикета керберос. Нужно ввести пароль пользователя dk.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на сервере ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим ключи Kerberos на сервере.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В приложении kadmin.local нужно ввести команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно и даёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на клиенте ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
	<entry>
		<id>https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2209</id>
		<title>Школьный сервер LDAP + Kerberos + NFS</title>
		<link rel="alternate" type="text/html" href="https://it-help-school.ru/index.php?title=%D0%A8%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_LDAP_%2B_Kerberos_%2B_NFS&amp;diff=2209"/>
		<updated>2025-06-26T17:37:17Z</updated>

		<summary type="html">&lt;p&gt;Dkirienko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Это черновик статьи, он может содержать ошибки!&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При установке на реальное железо нужно проверить, что SELINUX отключён.  &lt;br /&gt;
&lt;br /&gt;
==Функционал системы==&lt;br /&gt;
&lt;br /&gt;
Целью является создание школьного сервера со следующим функционалом:&lt;br /&gt;
&lt;br /&gt;
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в &amp;quot;школьный домен&amp;quot;. &lt;br /&gt;
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.&lt;br /&gt;
&lt;br /&gt;
Предлагаемые технологии для этого: &lt;br /&gt;
&lt;br /&gt;
#LDAP для хранения базы пользователей.&lt;br /&gt;
#Kerberos для хранения паролей и авторизации.&lt;br /&gt;
#SSSD для подключения к LDAP и Kerberos.&lt;br /&gt;
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.&lt;br /&gt;
&lt;br /&gt;
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:&lt;br /&gt;
&lt;br /&gt;
#Роса &amp;quot;Фреш&amp;quot; 13, версия  Server для сервера.&lt;br /&gt;
# Роса &amp;quot;Фреш&amp;quot; 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.&lt;br /&gt;
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.&lt;br /&gt;
&lt;br /&gt;
== Установка дистрибутивов и общие идеи конфигурации ==&lt;br /&gt;
Дистрибутивы Роса &amp;quot;Фреш&amp;quot; 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса &amp;quot;Фреш&amp;quot; доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа &amp;quot;user&amp;quot; или &amp;quot;student&amp;quot;, функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя &#039;&#039;&#039;НЕ ДОЛЖЕН&#039;&#039;&#039; находиться в /home, т.к. при проблемах использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы &#039;&#039;[уточнить, как это сделать]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
На сервере необходимо вынести /home в отдельный раздел, чтобы при отсутствии свободного места на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее быстрой. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе.&lt;br /&gt;
&lt;br /&gt;
Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.&lt;br /&gt;
&lt;br /&gt;
== Настройка доменных имён ==&lt;br /&gt;
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.&lt;br /&gt;
&lt;br /&gt;
Мы предположим, что наша сеть имеет следующий вид.&lt;br /&gt;
&lt;br /&gt;
Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.&lt;br /&gt;
&lt;br /&gt;
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local&lt;br /&gt;
&lt;br /&gt;
Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local&lt;br /&gt;
&lt;br /&gt;
Вы можете поднять DNS для разрешения имён &#039;&#039;[поможет ли в этом Avahi?]&#039;&#039;. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.&lt;br /&gt;
&lt;br /&gt;
На сервере выполните команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname server.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;На клиенте выполните аналогичную команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hostnamectl set-hostname ws01.sch179.local&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.1.1 ws01.sch179.local ws01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.&lt;br /&gt;
&lt;br /&gt;
На клиентском компьютере запишите в этот файл адрес и имя сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.1 server.sch179.local server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Установка и настройка OpenLDAP на сервере==&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск LDAP ===&lt;br /&gt;
Установите на сервере пакеты  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y openldap-servers openldap-clients&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом в скриптах пакета openldap-servers есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому (workaround пока) удалите пакет openldap-servers  и поставьте его снова.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf remove openldap-servers&lt;br /&gt;
dnf install -y openldap-servers&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включите и запустите службу LDAP  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now slapd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status slapd.service&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Настройка базы данных LDAP===&lt;br /&gt;
&lt;br /&gt;
====Создание хеша пароля администратора ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример результата:&lt;br /&gt;
&amp;lt;pre&amp;gt;{SSHA}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Файл create-db.ldif====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: olcDatabase={2}mdb,cn=config&lt;br /&gt;
changetype: add&lt;br /&gt;
objectClass: olcDatabaseConfig&lt;br /&gt;
objectClass: olcMdbConfig&lt;br /&gt;
olcDatabase: {2}mdb&lt;br /&gt;
olcDbDirectory: /var/lib/ldap&lt;br /&gt;
olcSuffix: dc=sch179,dc=local&lt;br /&gt;
olcRootDN: cn=admin,dc=sch179,dc=local&lt;br /&gt;
olcRootPW: {SSHA}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Применение изменений:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Проверка созданной базы====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=config&amp;quot; &amp;quot;(olcDatabase=*)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базовой структуры LDAP ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: organization&lt;br /&gt;
objectClass: dcObject&lt;br /&gt;
o: Sch179 School&lt;br /&gt;
dc: sch179&lt;br /&gt;
&lt;br /&gt;
dn: ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: people&lt;br /&gt;
&lt;br /&gt;
dn: ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalUnit&lt;br /&gt;
ou: groups&lt;br /&gt;
&lt;br /&gt;
dn: cn=admin,dc=sch179,dc=local&lt;br /&gt;
objectClass: organizationalRole&lt;br /&gt;
cn: admin&lt;br /&gt;
description: LDAP Administrator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление в LDAP:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f base.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Добавление схем===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif&lt;br /&gt;
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка схем:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -Y EXTERNAL -H ldapi:/// -b &amp;quot;cn=schema,cn=config&amp;quot; dn&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление групп пользователей==&lt;br /&gt;
&lt;br /&gt;
Создайте файл groups.ldif:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=admins,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: admins&lt;br /&gt;
gidNumber: 1000&lt;br /&gt;
description: System administrators&lt;br /&gt;
&lt;br /&gt;
dn: cn=teachers,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: teachers&lt;br /&gt;
gidNumber: 2000&lt;br /&gt;
description: School teachers&lt;br /&gt;
&lt;br /&gt;
dn: cn=misc,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: misc&lt;br /&gt;
gidNumber: 3000&lt;br /&gt;
description: Miscellaneous people&lt;br /&gt;
&lt;br /&gt;
dn: cn=students,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: top&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: students&lt;br /&gt;
gidNumber: 4000&lt;br /&gt;
description: Students&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f groups.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(objectClass=posixGroup)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Добавление пользователя (например, dk)==&lt;br /&gt;
&lt;br /&gt;
===Создание пароля===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
slappasswd -s t9cdw3qR -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===user-dk.ldif ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ldif&amp;quot;&amp;gt;&lt;br /&gt;
dn: cn=dk,ou=groups,dc=sch179,dc=local&lt;br /&gt;
objectClass: posixGroup&lt;br /&gt;
cn: dk&lt;br /&gt;
gidNumber: 1001&lt;br /&gt;
description: Primary group for user dk&lt;br /&gt;
&lt;br /&gt;
dn: uid=dk,ou=people,dc=sch179,dc=local&lt;br /&gt;
objectClass: inetOrgPerson&lt;br /&gt;
objectClass: posixAccount&lt;br /&gt;
objectClass: shadowAccount&lt;br /&gt;
uid: dk&lt;br /&gt;
sn: Кириенко&lt;br /&gt;
givenName: Денис&lt;br /&gt;
cn: Денис Кириенко&lt;br /&gt;
uidNumber: 1001&lt;br /&gt;
gidNumber: 1001&lt;br /&gt;
homeDirectory: /home/dk&lt;br /&gt;
loginShell: /bin/bash&lt;br /&gt;
userPassword: {SSHA}rKkuYpM736DjDANzimaJOW0vV8bO8dN9&lt;br /&gt;
description: User Denis Kirienko&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавление:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapadd -c -x -D &amp;quot;cn=admin,dc=sch179,dc=local&amp;quot; -W -f user-dk.ldif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=people,dc=sch179,dc=local&amp;quot; &amp;quot;(uid=dk)&amp;quot;&lt;br /&gt;
ldapsearch -x -b &amp;quot;ou=groups,dc=sch179,dc=local&amp;quot; &amp;quot;(cn=dk)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка Kerberos==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y krb5-server krb5-libs krb5-workstation&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /etc/krb5.conf ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 127.0.0.1&lt;br /&gt;
  admin_server = 127.0.0.1&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание базы данных===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Задайте мастер-пароль, например: `3yomdiYp`&lt;br /&gt;
&lt;br /&gt;
===Конфигурация /var/kerberos/krb5kdc/kdc.conf===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL&lt;br /&gt;
  kdc_ports = 88&lt;br /&gt;
  kdc_tcp_ports = 88&lt;br /&gt;
  max_life = 24h&lt;br /&gt;
  max_renewable_life = 7d&lt;br /&gt;
  default_principal_flags = +forwardable&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ACL файл===&lt;br /&gt;
Файл: /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
*/admin@SCH179.LOCAL *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now krb5kdc&lt;br /&gt;
systemctl enable --now kadmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Создание принципалов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
addprinc kadmin/admin&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Однострочная команда для создания пароля для заданного пользователя.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local addprinc -pw xWnp7NoX dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Интеграция LDAP и Kerberos через SSSD==&lt;br /&gt;
&lt;br /&gt;
===Установка пакетов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурация SSSD===&lt;br /&gt;
Файл: /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://localhost&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = localhost&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Права:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NSS и PAM===&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
auth        sufficient    pam_sss.so use_first_pass&lt;br /&gt;
account     [default=bad success=ok user_unknown=ignore] pam_sss.so&lt;br /&gt;
password    sufficient    pam_sss.so use_authtok&lt;br /&gt;
session     optional      pam_sss.so&lt;br /&gt;
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Сделайте такие же правки в файле /etc/pam.d/pasword-auth&lt;br /&gt;
&lt;br /&gt;
===Запуск служб===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Проверка возможности входа===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
su - dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка клиента ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[sssd]&lt;br /&gt;
domains = sch179.local&lt;br /&gt;
services = nss, pam&lt;br /&gt;
&lt;br /&gt;
[domain/sch179.local]&lt;br /&gt;
id_provider = ldap&lt;br /&gt;
auth_provider = krb5&lt;br /&gt;
&lt;br /&gt;
ldap_uri = ldap://192.168.1.82&lt;br /&gt;
ldap_search_base = dc=sch179,dc=local&lt;br /&gt;
ldap_id_use_start_tls = false&lt;br /&gt;
ldap_tls_reqcert = never&lt;br /&gt;
&lt;br /&gt;
krb5_realm = SCH179.LOCAL&lt;br /&gt;
krb5_server = 192.168.1.82&lt;br /&gt;
&lt;br /&gt;
cache_credentials = true&lt;br /&gt;
enumerate = true&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Установите права доступа на этот файл&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown root:root /etc/sssd/sssd.conf&lt;br /&gt;
chmod 600 /etc/sssd/sssd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В файле /etc/nsswitch.conf замените три строки на такие:&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
passwd:     files sss&lt;br /&gt;
shadow:     files sss&lt;br /&gt;
group:      files sss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 default_realm = SCH179.LOCAL&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 dns_lookup_kdc = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 SCH179.LOCAL = {&lt;br /&gt;
  kdc = 192.168.1.82&lt;br /&gt;
  admin_server = 192.168.1.82&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .sch179.local = SCH179.LOCAL&lt;br /&gt;
 sch179.local = SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.&lt;br /&gt;
&lt;br /&gt;
Запустите службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now sssd&lt;br /&gt;
systemctl enable --now oddjobd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь проверьте работу всех сервисов.&lt;br /&gt;
&lt;br /&gt;
Проверка ldap. Должна вывести информацию о пользователе.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
getent passwd dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Получение тикета керберос. Нужно ввести пароль пользователя dk.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;После этого введите команду вывода информации о полученном тикете.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Удалите полученный тикет командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kdestroy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Попробуйте переключиться в пользователя.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - dk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на сервере ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y nfs-utils krb5-server krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включите и запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-server &lt;br /&gt;
systemctl enable --now rpcbind&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим ключи Kerberos на сервере.&lt;br /&gt;
&lt;br /&gt;
От имени пользователя root нужно запустить команду&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;В приложении kadmin.local нужно ввести команды.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
addprinc -randkey nfs/server.sch179.local&lt;br /&gt;
ktadd -k /etc/krb5.keytab nfs/server.sch179.local&lt;br /&gt;
quit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверим, что ключи были созданы, для этого введите команду от root&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist -k /etc/krb5.keytab&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод будет таким.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Keytab name: FILE:/etc/krb5.keytab&lt;br /&gt;
KVNO Principal&lt;br /&gt;
---- --------------------------------------------------------------------------&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
   2 nfs/server.sch179.local@SCH179.LOCAL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)&lt;br /&gt;
&lt;br /&gt;
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно и даёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация) или krb5i (проверка контрольных сумм данных для защиты от подмены).&lt;br /&gt;
&lt;br /&gt;
Примените изменения командой&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -ra&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверьте, что система экспортируется, выполнив команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exportfs -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Установка NFS на клиенте ==&lt;br /&gt;
Установите нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install nfs-utils krb5-workstation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Запустите нужные службы.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now nfs-client.target&lt;br /&gt;
systemctl enable --now gssproxy&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.&lt;br /&gt;
&lt;br /&gt;
Выполняйте все последующие действия под пользователем root.&lt;br /&gt;
&lt;br /&gt;
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kinit dk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.&lt;br /&gt;
&lt;br /&gt;
== Автомонтирование домашних каталогов при помощи autofs ==&lt;br /&gt;
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.&lt;br /&gt;
&lt;br /&gt;
Установим нужные пакеты.&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
/home /etc/auto.home --timeout=60&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Создадим файл /etc/auto.home и запишем в него&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
* -sec=krb5p,rw server.sch179.local:/home/&amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Включим и запустим службу autofs&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable --now autofs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dkirienko</name></author>
	</entry>
</feed>