Школьный сервер LDAP + Kerberos + NFS: различия между версиями

Материал из IT в школе
Перейти к навигацииПерейти к поиску
нет описания правки
Строка 1: Строка 1:
==Краткое описание==
==Краткое описание==


Целью является создание школьного сервера со следующим функционалом:
Целью является создание школьного сервера со следующим функционалом.


#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в "школьный домен".  
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в "школьный домен".  
#Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.
#У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере.


Предлагаемые технологии для этого:  
Предлагаемые технологии для этого:  
Строка 15: Строка 12:
#SSSD для подключения к LDAP и Kerberos.
#SSSD для подключения к LDAP и Kerberos.
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении.


Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:


#Роса "Фреш" 13, версия  Server для сервера.
#Роса "Фреш" 13, версия  Server для сервера.
# Роса "Фреш" 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.
#МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса "Фреш" 13).
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений.


== Установка дистрибутивов и общие идеи конфигурации ==
== Установка дистрибутивов и общие идеи конфигурации ==
Дистрибутивы Роса "Фреш" 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса "Фреш" доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).
Дистрибутивы Роса "Фреш" 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса "Фреш" доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).


'''Важно! Поскольку будут настраиваться механизмы авторизации и доступа в домашние каталоги, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к домашним каталогам /home.'''
'''Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.'''


На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа "user" или "student", функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя '''НЕ ДОЛЖЕН''' находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы.
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа "user" или "student", функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя '''НЕ ДОЛЖЕН''' находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку "Дополнительно".


Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя - admin. Войдите под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.<syntaxhighlight lang="bash">
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.<syntaxhighlight lang="bash">
mkdir /usr/local/home
mkdir /usr/local/home
mv /home/admin /usr/local/home/
mv /home/admin /usr/local/home/
usermod -d /usr/local/home/admin admin
usermod -d /usr/local/home/admin admin
</syntaxhighlight>


</syntaxhighlight>На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime.


Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 2-3 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства.


Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку.


В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo.
dnf install -y task-lxqt
<syntaxhighlight lang="bash">
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).
dnf install -y task-lxqt
dnf install -y virtualbox-guest-additions
</syntaxhighlight>
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).<syntaxhighlight lang="bash">
 
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).
 
<syntaxhighlight lang="bash">
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
</syntaxhighlight>
</syntaxhighlight>


== Настройка доменных имён ==
== Настройка доменных имён ==
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN.  


Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local.
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие "домен" дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch719.local) и везде используем именно его.


Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local
Строка 59: Строка 61:
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена.


Вы можете поднять DNS для разрешения имён ''[поможет ли в этом Avahi?]''. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.
Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети.


На сервере выполните команду (от root).<syntaxhighlight lang="bash">
На сервере выполните команду (от root).
<syntaxhighlight lang="bash">
hostnamectl set-hostname server.sch179.local
hostnamectl set-hostname server.sch179.local
</syntaxhighlight>На клиенте выполните аналогичную команду (от root).<syntaxhighlight lang="bash">
</syntaxhighlight>
На клиенте выполните аналогичную команду (от root).
<syntaxhighlight lang="bash">
hostnamectl set-hostname ws01.sch179.local
hostnamectl set-hostname ws01.sch179.local
</syntaxhighlight>В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида<syntaxhighlight>
</syntaxhighlight>
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида
<syntaxhighlight>
192.168.1.1 ws01.sch179.local ws01
192.168.1.1 ws01.sch179.local ws01
</syntaxhighlight>
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.


</syntaxhighlight>Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя.
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку
 
<syntaxhighlight>
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку вида.<syntaxhighlight>
192.168.0.1 server.sch179.local server
192.168.0.1 server.sch179.local server
</syntaxhighlight>


</syntaxhighlight>
==Настройка OpenLDAP на сервере==
==Настройка OpenLDAP на сервере==
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP.


=== Установка и запуск ===
=== Установка и запуск ===
Установите на сервере пакеты  (команда от root).<syntaxhighlight lang="bash">
Установите на сервере пакеты  (команда от root).
<syntaxhighlight lang="bash">
dnf install -y openldap-servers openldap-clients
dnf install -y openldap-servers openldap-clients
</syntaxhighlight>
</syntaxhighlight>


При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть [https://forum.rosa.ru/viewtopic.php?p=121370 ошибка], поэтому если вы видите такие ошибки при установке пакета, выполните после установки команды.<syntaxhighlight lang="bash">
Включите и запустите службу LDAP  (команда от root).
chown -R ldap:ldap /etc/openldap/slapd.d
<syntaxhighlight lang="bash">
chown -R ldap:ldap /var/lib/ldap
systemctl enable --now slapd
 
</syntaxhighlight>
</syntaxhighlight>
 
Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).
Включите и запустите службу LDAP  (команда от root).<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
systemctl enable --now slapd
 
</syntaxhighlight>Проверьте, что LDAP запущен и отвечает на запросы  (команда от root).<syntaxhighlight lang="bash">
systemctl status slapd.service
systemctl status slapd.service
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn
</syntaxhighlight>
</syntaxhighlight>


===Создание базы и записи администратора LDAP===
===Создание базы и записи администратора LDAP===
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду<syntaxhighlight lang="bash">
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду
<syntaxhighlight lang="bash">
slappasswd
slappasswd
</syntaxhighlight>
</syntaxhighlight>


и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе "qwerty123" программа может выдать такой хеш:<syntaxhighlight>
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе "qwerty123" программа может выдать такой хеш:
<syntaxhighlight>
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX
</syntaxhighlight>


</syntaxhighlight>При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально.


Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.
Строка 124: Строка 131:
olcRootDN: cn=admin,dc=sch179,dc=local
olcRootDN: cn=admin,dc=sch179,dc=local
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX
</syntaxhighlight>
</syntaxhighlight>


Строка 130: Строка 136:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif
</syntaxhighlight>Проверка созданной базы командой.<syntaxhighlight lang="bash">
</syntaxhighlight>
 
Проверка созданной базы командой.
<syntaxhighlight lang="bash">
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcDatabase=*)"
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcDatabase=*)"
</syntaxhighlight>
</syntaxhighlight>


===Добавление схем===
===Добавление схем===
Далее в базу нужно добавить "схемы" - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:<syntaxhighlight lang="bash">
Далее в базу нужно добавить "схемы" - описание разных видов объектов (например, групп и учётных записей). Выполните команды:
<syntaxhighlight lang="bash">
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
Строка 144: Строка 154:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" dn
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" dn
</syntaxhighlight>Она должна вывести текст, в котором есть строки:<syntaxhighlight>
</syntaxhighlight>
Она должна вывести текст, в котором есть строки:
<syntaxhighlight>
dn: cn={0}core,cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
</syntaxhighlight>
</syntaxhighlight>


=== Создание базовой структуры организации ===
=== Создание базовой структуры организации ===
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания.
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы.
 
<syntaxhighlight>
Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.<syntaxhighlight>
dn: dc=sch179,dc=local
dn: dc=sch179,dc=local
objectClass: top
objectClass: top
Строка 180: Строка 190:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f base.ldif
ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f base.ldif
</syntaxhighlight>При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.
</syntaxhighlight>
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее.


Для проверки введите команду  (не забудьте заменить sch179 на своё название):<syntaxhighlight lang="bash">
Для проверки введите команду  (не забудьте заменить sch179 на своё название):
<syntaxhighlight lang="bash">
ldapsearch -x -b "dc=sch179,dc=local"
ldapsearch -x -b "dc=sch179,dc=local"
</syntaxhighlight>
</syntaxhighlight>


Строка 197: Строка 208:
objectClass: posixGroup
objectClass: posixGroup
cn: admins
cn: admins
gidNumber: 1000
gidNumber: 2000
description: System administrators
description: System administrators


Строка 204: Строка 215:
objectClass: posixGroup
objectClass: posixGroup
cn: teachers
cn: teachers
gidNumber: 2000
gidNumber: 3000
description: School teachers
description: School teachers


Строка 211: Строка 222:
objectClass: posixGroup
objectClass: posixGroup
cn: misc
cn: misc
gidNumber: 3000
gidNumber: 4000
description: Miscellaneous people
description: Miscellaneous people


Строка 218: Строка 229:
objectClass: posixGroup
objectClass: posixGroup
cn: students
cn: students
gidNumber: 4000
gidNumber: 5000
description: Students
description: Students
</syntaxhighlight>
</syntaxhighlight>
Строка 235: Строка 246:
Попробуем добавить тестовых пользователей.
Попробуем добавить тестовых пользователей.


Пусть мы ходим создать пользователя teacher1 c uid=2001 и пользователя student1 с uid=4001. При этом для каждого пользователя будет создана группа с таким же именем.
Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем.


Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. <syntaxhighlight>
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. <syntaxhighlight>
Строка 241: Строка 252:
objectClass: posixGroup
objectClass: posixGroup
cn: teacher1
cn: teacher1
gidNumber: 2001
gidNumber: 3001
description: Primary group for user teacher1
description: Primary group for user teacher1


Строка 252: Строка 263:
givenName: Сергей
givenName: Сергей
cn: Сергей Иванов
cn: Сергей Иванов
uidNumber: 2001
uidNumber: 3001
gidNumber: 2001
gidNumber: 3001
homeDirectory: /home/teacher1
homeDirectory: /home/teacher1
loginShell: /bin/bash
loginShell: /bin/bash
Строка 261: Строка 272:
objectClass: posixGroup
objectClass: posixGroup
cn: student1
cn: student1
gidNumber: 4001
gidNumber: 5001
description: Primary group for user student1
description: Primary group for user student1


Строка 272: Строка 283:
givenName: Мария
givenName: Мария
cn: Мария Васильева
cn: Мария Васильева
uidNumber: 4001
uidNumber: 5001
gidNumber: 4001
gidNumber: 5001
homeDirectory: /home/student1
homeDirectory: /home/student1
loginShell: /bin/bash
loginShell: /bin/bash
description: User student1 (Мария Васильева)
description: User student1 (Мария Васильева)
</syntaxhighlight>
</syntaxhighlight>


Строка 302: Строка 312:
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]).  
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]).  


Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). <syntaxhighlight lang="ini">
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже).
 
<syntaxhighlight lang="ini">
includedir /etc/krb5.conf.d/
includedir /etc/krb5.conf.d/


Строка 327: Строка 339:
  .sch179.local = SCH179.LOCAL
  .sch179.local = SCH179.LOCAL
  sch179.local = SCH179.LOCAL
  sch179.local = SCH179.LOCAL
</syntaxhighlight>
</syntaxhighlight>


===Создание базы данных===
===Создание базы данных===
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.<syntaxhighlight lang="bash">
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.
<syntaxhighlight lang="bash">
kdb5_util create -s
kdb5_util create -s
</syntaxhighlight>Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.
</syntaxhighlight>
 
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль.


===Конфигурация базы данных Kerberos===
===Конфигурация базы данных Kerberos===
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.<syntaxhighlight lang="ini">
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.
<syntaxhighlight lang="ini">
[realms]
[realms]
  SCH179.LOCAL = {
  SCH179.LOCAL = {
Строка 349: Строка 364:
   default_principal_flags = +forwardable
   default_principal_flags = +forwardable
  }
  }
</syntaxhighlight>Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.
</syntaxhighlight>
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.
<syntaxhighlight>
<syntaxhighlight>
*/admin@SCH179.LOCAL *
*/admin@SCH179.LOCAL *
Строка 355: Строка 371:


===Включение и запуск служб===
===Включение и запуск служб===
Выполните команду.<syntaxhighlight lang="bash">
Выполните команды.
<syntaxhighlight lang="bash">
systemctl enable --now krb5kdc
systemctl enable --now krb5kdc
systemctl enable --now kadmin
systemctl enable --now kadmin
Строка 365: Строка 382:
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда "listprincs" выводит список всех принципалов. Команда "quit" завершает работу kdamin.local.
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда "listprincs" выводит список всех принципалов. Команда "quit" завершает работу kdamin.local.


Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой<syntaxhighlight lang="bash">
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой
<syntaxhighlight lang="bash">
kadmin.local listprincs
kadmin.local listprincs
</syntaxhighlight>Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут выводиться через kadmin.local, то, кажется, принципал kadmin/admin можно не создавать.
</syntaxhighlight>


Для создания этого принципала запустите kadmin.local и в его консоли введите команду.<syntaxhighlight lang="bash">
Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать.
 
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.
<syntaxhighlight lang="bash">
addprinc kadmin/admin
addprinc kadmin/admin
</syntaxhighlight>
</syntaxhighlight>


Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново.


=== Создание принципалов для пользователей ===
=== Создание принципалов для пользователей ===
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1.


Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,<syntaxhighlight>
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,
<syntaxhighlight>
addprinc teacher1
addprinc teacher1
addprinc student1
addprinc student1
</syntaxhighlight>
Для каждого принципала необходимо будет два раза ввести его пароль.


</syntaxhighlight>Для каждого принципала необходимо будет два раза ввести пароль.
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд:
 
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
kadmin.local addprinc -pw qwerty456 teacher1
kadmin.local addprinc -pw qwerty456 teacher1
kadmin.local addprinc -pw qwerty789 student1
kadmin.local addprinc -pw qwerty789 student1
</syntaxhighlight>


</syntaxhighlight>Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789.


Вывести список всех принципалов, хранящихся в Kerberos, можно командой.<syntaxhighlight lang="bash">
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.
<syntaxhighlight lang="bash">
kadmin.local -q list_principals
kadmin.local -q list_principals
</syntaxhighlight>
</syntaxhighlight>


==Доступ к LDAP и Kerberos через SSSD==
==Доступ к LDAP и Kerberos через SSSD==
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а она в свою очередь обращается к LDAP и Kerberos.
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos.


Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home.
Строка 407: Строка 432:


===Настройка sssd===
===Настройка sssd===
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.<syntaxhighlight lang="ini">
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.
<syntaxhighlight lang="ini">
[sssd]
[sssd]
domains = sch179.local
domains = sch179.local
Строка 442: Строка 468:
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd.


Измените /etc/nsswitch.conf, заменив в нём три строки на следующие:
Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие:
<syntaxhighlight lang="ini">
<syntaxhighlight lang="ini">
passwd:    files sss
passwd:    files sss
Строка 456: Строка 482:
Измените файл /etc/pam.d/system-auth, добавив несколько строк.
Измените файл /etc/pam.d/system-auth, добавив несколько строк.


Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (в интерфейсах auth и password).
 
<syntaxhighlight>
<syntaxhighlight>
auth        sufficient    pam_sss.so use_first_pass
auth        sufficient    pam_sss.so use_first_pass
Строка 465: Строка 492:


session    optional      pam_sss.so
session    optional      pam_sss.so
session    required      pam_mkhomedir.so skel=/etc/skel umask=0077
</syntaxhighlight>
</syntaxhighlight>
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.


Скорее всего у вас получится такой файл.<syntaxhighlight>
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss.
 
Скорее всего у вас получится такой файл.
<syntaxhighlight>
#%PAM-1.0
#%PAM-1.0
auth        required      pam_env.so
auth        required      pam_env.so
Строка 491: Строка 519:
session    required      pam_unix.so
session    required      pam_unix.so
session    optional      pam_sss.so
session    optional      pam_sss.so
session    required      pam_mkhomedir.so skel=/etc/skel umask=0077
</syntaxhighlight>


</syntaxhighlight>'''Сделайте такие же правки в файле /etc/pam.d/pasword-auth'''
'''Сделайте такие же правки в файле /etc/pam.d/pasword-auth'''


Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. ''(проверить информацию).''
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать.


===Запуск служб===
===Запуск служб===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
systemctl enable --now sssd
systemctl enable --now sssd
</syntaxhighlight>
</syntaxhighlight>


===Проверка аутентификации===
===Проверка аутентификации===
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.<syntaxhighlight lang="bash">
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.
<syntaxhighlight lang="bash">
getent passwd teacher1
getent passwd teacher1
</syntaxhighlight>


</syntaxhighlight>Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.<syntaxhighlight lang="bash">
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит.
<syntaxhighlight lang="bash">
id teacher1
id teacher1
</syntaxhighlight>


</syntaxhighlight>Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.<syntaxhighlight lang="bash">
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1.
<syntaxhighlight lang="bash">
kinit teacher1
kinit teacher1
 
</syntaxhighlight>
</syntaxhighlight>Выведите информацию о полученных билетах.<syntaxhighlight lang="bash">
Выведите информацию о полученных билетах.
<syntaxhighlight lang="bash">
klist
klist
</syntaxhighlight>Удалите полученный билет командой<syntaxhighlight lang="bash">
</syntaxhighlight>
Удалите полученный билет командой
<syntaxhighlight lang="bash">
kdestroy
kdestroy
</syntaxhighlight>Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.<syntaxhighlight lang="bash">
</syntaxhighlight>
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.
<syntaxhighlight lang="bash">
su - teacher1
su - teacher1
</syntaxhighlight>
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля.


</syntaxhighlight>Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root).
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке.
 
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в десктоп-менеджере.


Если это получилось, переходите к настройке хранения домашних каталогов в сети.
Если это получилось, переходите к настройке хранения домашних каталогов в сети.
Строка 530: Строка 567:


=== Установка пакетов ===
=== Установка пакетов ===
 
Установите нужные пакеты.
Установите нужные пакеты.<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
dnf install -y nfs-utils krb5-server krb5-workstation
dnf install -y nfs-utils krb5-server krb5-workstation
</syntaxhighlight>
</syntaxhighlight>


=== Включение и запуск служб ===
=== Включение и запуск служб ===
Включите и запустите нужные службы.<syntaxhighlight lang="bash">
Включите и запустите нужные службы.
<syntaxhighlight lang="bash">
systemctl enable --now nfs-server  
systemctl enable --now nfs-server  
systemctl enable --now rpcbind
systemctl enable --now rpcbind
systemctl enable --now gssproxy
systemctl enable --now gssproxy
</syntaxhighlight>
</syntaxhighlight>


=== Настройка idmapd ===
=== Настройка idmapd ===
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.<syntaxhighlight>
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.
<syntaxhighlight lang="ini">
[General]
[General]
Domain = sch179.local
Domain = sch179.local
</syntaxhighlight>
</syntaxhighlight>


=== Создание ключей Kerberos ===
=== Создание ключей Kerberos ===
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.
На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов.


От имени пользователя root нужно запустить на сервере команду <syntaxhighlight lang="bash">
От имени пользователя root нужно запустить на сервере команду
<syntaxhighlight lang="bash">
kadmin.local
kadmin.local
 
</syntaxhighlight>
</syntaxhighlight>В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).
В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).


Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab.


'''Этот ключ необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.'''<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
addprinc -randkey nfs/server.sch179.local
addprinc -randkey nfs/server.sch179.local
ktadd -k /etc/krb5.keytab nfs/server.sch179.local
ktadd -k /etc/krb5.keytab nfs/server.sch179.local
quit
quit
 
</syntaxhighlight>
</syntaxhighlight>Проверим, что ключи были созданы и экспортированы, для этого введите команду от root<syntaxhighlight lang="bash">
Проверим, что ключи были созданы и экспортированы, для этого введите команду от root
<syntaxhighlight lang="bash">
klist -k /etc/krb5.keytab
klist -k /etc/krb5.keytab
 
</syntaxhighlight>
</syntaxhighlight>Вывод будет таким.<syntaxhighlight>
Вывод будет таким.
<syntaxhighlight>
Keytab name: FILE:/etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
KVNO Principal
Строка 575: Строка 614:
   2 nfs/server.sch179.local@SCH179.LOCAL
   2 nfs/server.sch179.local@SCH179.LOCAL
   2 nfs/server.sch179.local@SCH179.LOCAL
   2 nfs/server.sch179.local@SCH179.LOCAL
</syntaxhighlight>
'''Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.'''


</syntaxhighlight>
=== Экспорт /home на сервере ===
=== Экспорт /home на сервере ===
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку<syntaxhighlight>
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку
<syntaxhighlight>
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check)
 
</syntaxhighlight>
</syntaxhighlight>192.168.0.0/16 - сеть, из которой разрешён доступ (поменяйте, как вам нужно)
Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети.


krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены).
Строка 589: Строка 631:
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён.


Примените изменения командой<syntaxhighlight lang="bash">
Примените изменения командой
<syntaxhighlight lang="bash">
exportfs -ra
exportfs -ra
 
</syntaxhighlight>
</syntaxhighlight>Проверьте, что система экспортируется, выполнив команду <syntaxhighlight lang="bash">
Проверьте, что система экспортируется, выполнив команду
<syntaxhighlight lang="bash">
exportfs -v
exportfs -v
</syntaxhighlight>
</syntaxhighlight>
Строка 600: Строка 644:
=== Установка пакетов ===
=== Установка пакетов ===


Установите нужные пакеты.<syntaxhighlight lang="bash">
Установите нужные пакеты.
<syntaxhighlight lang="bash">
dnf install nfs-utils krb5-workstation
dnf install nfs-utils krb5-workstation
</syntaxhighlight>
</syntaxhighlight>


Строка 608: Строка 652:
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.


Проверьте наличие ключей в этом файле командой<syntaxhighlight lang="bash">
Проверьте наличие ключей в этом файле командой
<syntaxhighlight lang="bash">
klist -k /etc/krb5.keytab
klist -k /etc/krb5.keytab
</syntaxhighlight>
</syntaxhighlight>


=== Включение и запуск служб ===
=== Включение и запуск служб ===
Запустите нужные службы.<syntaxhighlight lang="bash">
Запустите нужные службы.
<syntaxhighlight lang="bash">
systemctl enable --now nfs-client.target
systemctl enable --now nfs-client.target
systemctl enable --now gssproxy
systemctl enable --now gssproxy
</syntaxhighlight>
</syntaxhighlight>


=== Настройка idmapd ===
=== Настройка idmapd ===
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. <syntaxhighlight lang="ini">
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain.
<syntaxhighlight lang="ini">
[General]
[General]
Domain = sch179.local
Domain = sch179.local
</syntaxhighlight>


</syntaxhighlight>Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.<syntaxhighlight lang="bash">
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду.
<syntaxhighlight lang="bash">
systemctl status nfs-idmapd
systemctl status nfs-idmapd
 
</syntaxhighlight>
</syntaxhighlight>На сервере скорее всего вы увидите, что служба работает - в выводе будет строка "<code>Active: active (running)</code>". А на клиенте - не работает ("<code>Active: inactive (dead)</code>").
На сервере скорее всего вы увидите, что служба работает - в выводе будет строка "<code>Active: active (running)</code>". А на клиенте - не работает ("<code>Active: inactive (dead)</code>").


Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd.
Строка 633: Строка 681:
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте).


Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.<syntaxhighlight lang="ini">
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.
<syntaxhighlight lang="ini">
[Unit]
[Unit]
Wants=nfs-idmapd.service
Wants=nfs-idmapd.service
After=nfs-idmapd.service
After=nfs-idmapd.service
</syntaxhighlight>
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки.


</syntaxhighlight>Перезагрузите клиент и проверьте, что служба nfs-idmapd успешно запущена.
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.
 
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сети (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности.


=== Проверка монтирования файловой системы ===
=== Проверка монтирования файловой системы ===
Строка 647: Строка 696:
Выполняйте все последующие действия под пользователем root на клиенте.
Выполняйте все последующие действия под пользователем root на клиенте.


Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).<syntaxhighlight lang="bash">
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root).
<syntaxhighlight lang="bash">
kinit teacher1
kinit teacher1
</syntaxhighlight>Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду <syntaxhighlight lang="bash">
</syntaxhighlight>
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду
<syntaxhighlight lang="bash">
klist
klist
 
</syntaxhighlight>
</syntaxhighlight>Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.<syntaxhighlight lang="bash">
Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.
<syntaxhighlight lang="bash">
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home
</syntaxhighlight>
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.


</syntaxhighlight>Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей.
==Автомонтирование домашних каталогов при помощи autofs==
 
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.
== Автомонтирование домашних каталогов при помощи autofs ==
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. Также это создаёт дополнительную безопасность, т.к. в результате входа пользователя (например, student1) в систему, будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей.


Настройка выполняется на клиенте.
Настройка выполняется на клиенте.


Установим нужные пакеты.<syntaxhighlight lang="bash">
Установим пакет autofs.
<syntaxhighlight lang="bash">
sudo dnf install autofs
sudo dnf install autofs
 
</syntaxhighlight>
</syntaxhighlight>Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку<syntaxhighlight>
Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку
<syntaxhighlight>
/home /etc/auto.home --timeout=60
/home /etc/auto.home --timeout=60
 
</syntaxhighlight>
</syntaxhighlight>Создадим файл /etc/auto.home и запишем в него строку.<syntaxhighlight>
Создадим файл /etc/auto.home и запишем в него строку.
<syntaxhighlight>
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/&
 
</syntaxhighlight>
</syntaxhighlight>Включим и запустим службу autofs<syntaxhighlight lang="bash">
Включим и запустим службу autofs
<syntaxhighlight lang="bash">
systemctl enable --now autofs
systemctl enable --now autofs
</syntaxhighlight>


</syntaxhighlight>
==Включение дисковых квот==
На сервере необходимо включить дисковые квоты для пользователей на разделе /home.


== Включение дисковых квот ==
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках.


=== Файловая система ext4 ===
=== Файловая система ext4 ===
Установите пакет quota<syntaxhighlight lang="bash">
Установите пакет quota
<syntaxhighlight lang="bash">
dnf install quota
dnf install quota
 
</syntaxhighlight>
</syntaxhighlight>Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.<syntaxhighlight>
Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.
<syntaxhighlight>
/dev/sda4 /home ext4 noatime,usrquota 0 2
/dev/sda4 /home ext4 noatime,usrquota 0 2
 
</syntaxhighlight>
</syntaxhighlight>В вашем файле /etc/fstab вместо /dev/... может быть указан UUID=...
В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=...
 
Отмонтируйте раздел.
Отмонтируйте раздел.<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
umount /home
umount /home
 
</syntaxhighlight>
</syntaxhighlight>Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.<syntaxhighlight lang="bash">
Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.<syntaxhighlight lang="bash">
tune2fs -O quota /dev/sda4
tune2fs -O quota /dev/sda4
 
</syntaxhighlight>
</syntaxhighlight>Подмонтируйте раздел<syntaxhighlight lang="bash">
Подмонтируйте раздел
<syntaxhighlight lang="bash">
mount /home
mount /home
 
</syntaxhighlight>
</syntaxhighlight>Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).<syntaxhighlight lang="bash">
Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).
<syntaxhighlight lang="bash">
quotacheck -cum /home
quotacheck -cum /home
 
</syntaxhighlight>
</syntaxhighlight>Включите квоты на файловой системе.<syntaxhighlight lang="bash">
Включите квоты на файловой системе.<syntaxhighlight lang="bash">
quotaon /home
quotaon /home
</syntaxhighlight>
</syntaxhighlight>


=== Файловая система xfs ===
=== Файловая система xfs ===
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.<syntaxhighlight>
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.
<syntaxhighlight>
/dev/sda4 /home xfs noatime,usrquota 0 2
/dev/sda4 /home xfs noatime,usrquota 0 2
</syntaxhighlight>
</syntaxhighlight>


Строка 716: Строка 777:
# Добавить информацию о пользователе в LDAP.
# Добавить информацию о пользователе в LDAP.
# Создать билет Kerberos.
# Создать билет Kerberos.
# Создать домашний каталог и скопировать туда содержимое /etc/skel.
# Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога.
# Установить квоты.
# Установить квоты.


Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin вот этот скрипт]. Скрипт находится в разработке.
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке.
 
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора.
 
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема.
 
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени.
 
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д.
 
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen.
 
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом:
 
<syntaxhighlight>
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77
29102 students s29a_rostova Ростова Наталья LRhevK2O
</syntaxhighlight>
 
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt.


*
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию.

Навигация