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

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




<big>'''Это черновик статьи, он может содержать ошибки!'''</big>
<big>'''Это черновик статьи, он может содержать ошибки!'''</big>
При установке на реальное железо нужно проверить, что SELINUX отключён. 


==Функционал системы==
==Функционал системы==
Строка 290: Строка 287:
</syntaxhighlight>
</syntaxhighlight>


===Конфигурация /etc/krb5.conf ===
===Конфигурация сервера Kerberos ===
Этот файл должен выглядеть так <syntaxhighlight lang="ini">
Запишите в файл /etc/krb5.conf следующее. <syntaxhighlight lang="ini">
includedir /etc/krb5.conf.d/
 
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
 
[libdefaults]
[libdefaults]
  default_realm = SCH179.LOCAL
  default_realm = SCH179.LOCAL
Строка 302: Строка 306:
[realms]
[realms]
  SCH179.LOCAL = {
  SCH179.LOCAL = {
   kdc = 127.0.0.1
   kdc = server.sch179.ru
   admin_server = 127.0.0.1
   admin_server = server.sch179.ru
  }
  }


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


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


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


===Запуск служб===
===Включение и запуск служб===
<syntaxhighlight lang="bash">
Выполните команду.<syntaxhighlight lang="bash">
systemctl enable --now krb5kdc
systemctl enable --now krb5kdc
systemctl enable --now kadmin
systemctl enable --now kadmin
</syntaxhighlight>
</syntaxhighlight>


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


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


==Интеграция LDAP и Kerberos через SSSD==
==Интеграция LDAP и Kerberos через SSSD==

Версия 22:02, 28 июня 2025


Это черновик статьи, он может содержать ошибки!

Функционал системы

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

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

Предлагаемые технологии для этого:

  1. LDAP для хранения базы пользователей.
  2. Kerberos для хранения паролей и авторизации.
  3. SSSD для подключения к LDAP и Kerberos.
  4. NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера.

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

  1. Роса "Фреш" 13, версия Server для сервера.
  2. Роса "Фреш" 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.

Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений.

Установка дистрибутивов и общие идеи конфигурации

Дистрибутивы Роса "Фреш" 13 можно скачать по ссылке. Дистрибутивы Роса "Фреш" доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке).

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

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

mkdir /usr/local/home
mv /home/admin /usr/local/home/
usermod -d /usr/local/home/admin admin

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

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

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

dnf install -y task-lxqt

Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).

dnf install -y virtualbox-guest-additions

Настройка доменных имён

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

Мы предположим, что наша сеть имеет следующий вид.

Локальный домен называется sch179.local. Далее в инструкциях измените название этого домена на своё.

Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local

Клиентский компьютер в дальнейших инструкциях имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local

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

На сервере выполните команду

hostnamectl set-hostname server.sch179.local

На клиенте выполните аналогичную команду

hostnamectl set-hostname ws01.sch179.local

В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида

192.168.1.1 ws01.sch179.local ws01

Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя. На клиентском компьютере запишите в этот файл адрес и имя сервера.

192.168.0.1 server.sch179.local server

Установка и настройка OpenLDAP на сервере

Установка и запуск

Установите на сервере пакеты (команда от root).

dnf install -y openldap-servers openldap-clients

При этом в скриптах пакета openldap-servers (версии openldap-servers-2.6.9-1) есть ошибка, поэтому если вы видите такие ошибки при установке пакета, выполните команды.

chown -R ldap:ldap /etc/openldap/slapd.d
chown -R ldap:ldap /var/lib/ldap

Включите и запустите службу LDAP (команда от root).

systemctl enable --now slapd

Проверьте, что LDAP запущен и отвечает на запросы (команда от root).

systemctl status slapd.service
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn

Создание базы и записи администратора LDAP

Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду

slappasswd

и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе "qwerty123" программа может выдать такой хеш:

{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX

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

Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости.

Теперь создадим базу LDAP и запись администратора LDAP.

Создайте файл create-db.ldif и вставим в него такой текст. Замените хеш пароля в последней строке на тот, который вы получили.

dn: olcDatabase={2}mdb,cn=config
changetype: add
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=sch179,dc=local
olcRootDN: cn=admin,dc=sch179,dc=local
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX

Добавьте содержимое этого файла в базу LDAP.

ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif

Проверка созданной базы запросом.

ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcDatabase=*)"

Добавление схем

Далее в базу нужно добавить "схемы" - описание разных видов объектов (например, групп и учётных записей). Просто выполните команды:

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/inetorgperson.ldif

Для проверки введите команду:

ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" dn

Она должна вывести текст, в котором есть строки:

dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config

Создание базовой структуры организации

Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания.

Замените в нём везде sch179 и параметр o: School No 179 на описание вашей школы.

dn: dc=sch179,dc=local
objectClass: top
objectClass: organization
objectClass: dcObject
o: School No 179
dc: sch179

dn: ou=people,dc=sch179,dc=local
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=sch179,dc=local
objectClass: organizationalUnit
ou: groups

dn: cn=admin,dc=sch179,dc=local
objectClass: organizationalRole
cn: admin
description: LDAP Administrator

Добавление в LDAP (не забудьте заменить sch179 на своё название):

ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f base.ldif

При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее. Для проверки введите команду (не забудьте заменить sch179 на своё название):

ldapsearch -x -b "dc=sch179,dc=local"

Добавление групп и пользователей

Пусть мы ходим создать группы пользователей admins (администраторы), teachers (учителя), misc (другие сотрудники) и students (учащиеся).

Создайте файл groups.ldif. Замените в нём sch179 на своё название. Можете поменять названия и описания групп, их gidNumber.

dn: cn=admins,ou=groups,dc=sch179,dc=local
objectClass: top
objectClass: posixGroup
cn: admins
gidNumber: 1000
description: System administrators

dn: cn=teachers,ou=groups,dc=sch179,dc=local
objectClass: top
objectClass: posixGroup
cn: teachers
gidNumber: 2000
description: School teachers

dn: cn=misc,ou=groups,dc=sch179,dc=local
objectClass: top
objectClass: posixGroup
cn: misc
gidNumber: 3000
description: Miscellaneous people

dn: cn=students,ou=groups,dc=sch179,dc=local
objectClass: top
objectClass: posixGroup
cn: students
gidNumber: 4000
description: Students

Добавление:

ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f groups.ldif

Проверка:

ldapsearch -x -b "ou=groups,dc=sch179,dc=local" "(objectClass=posixGroup)"

Добавление пользователей

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

Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости.

dn: cn=teacher1,ou=groups,dc=sch179,dc=local
objectClass: posixGroup
cn: teacher1
gidNumber: 2001
description: Primary group for user teacher1

dn: uid=teacher1,ou=people,dc=sch179,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: teacher1
sn: Иванов
givenName: Сергей
cn: Сергей Иванов
uidNumber: 2001
gidNumber: 2001
homeDirectory: /home/teacher1
loginShell: /bin/bash
description: User teacher1 (Сергей Иванов)

dn: cn=student1,ou=groups,dc=sch179,dc=local
objectClass: posixGroup
cn: student1
gidNumber: 4001
description: Primary group for user student1

dn: uid=student1,ou=people,dc=sch179,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: student1
sn: Васильева
givenName: Мария
cn: Мария Васильева
uidNumber: 4001
gidNumber: 4001
homeDirectory: /home/student1
loginShell: /bin/bash
description: User student1 (Мария Васильева)

Добавление:

ldapadd -c -x -D "cn=admin,dc=sch179,dc=local" -W -f users.ldif

Проверка:

ldapsearch -x -b "ou=people,dc=sch179,dc=local" "(uid=teacher1)"
ldapsearch -x -b "ou=groups,dc=sch179,dc=local" "(cn=teacher1)"

Настройка Kerberos

Установка пакетов

dnf install -y krb5-server krb5-libs krb5-workstation

Конфигурация сервера Kerberos

Запишите в файл /etc/krb5.conf следующее.

includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = SCH179.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 SCH179.LOCAL = {
  kdc = server.sch179.ru
  admin_server = server.sch179.ru
 }

[domain_realm]
 .sch179.local = SCH179.LOCAL
 sch179.local = SCH179.LOCAL

Создание базы данных

Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos, сохраните этот пароль.

kdb5_util create -s

Конфигурация базы данных Kerberos

Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.

[realms]
 SCH179.LOCAL = {
  database_name = /var/kerberos/krb5kdc/principal
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  key_stash_file = /var/kerberos/krb5kdc/.k5.SCH179.LOCAL
  kdc_ports = 88
  kdc_tcp_ports = 88
  max_life = 24h
  max_renewable_life = 7d
  default_principal_flags = +forwardable
 }

Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст.

*/admin@SCH179.LOCAL *

Включение и запуск служб

Выполните команду.

systemctl enable --now krb5kdc
systemctl enable --now kadmin

Создание принципала kadmin/admin

В базе Kerberos хранятся "принципалы" (principals) - идентификаторы пользователей, сервисов, хостов.

Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда "listprincs" выводит список всех принципалов. Команда "quit" завершает работу kdamin.local.

Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой

kadmin.local listprincs

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

addprinc kadmin/admin

Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit.

Создание принципалов для пользователей

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

Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,

addprinc teacher1
addprinc student1

Для каждого принципала необходимо будет два раза ввести пароль.

Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд:

kadmin.local addprinc -pw qwerty456 teacher1
kadmin.local addprinc -pw qwerty789 student1

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

Интеграция LDAP и Kerberos через SSSD

Установка пакетов

dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir

Конфигурация SSSD

Файл: /etc/sssd/sssd.conf

[sssd]
domains = sch179.local
services = nss, pam

[domain/sch179.local]
id_provider = ldap
auth_provider = krb5

ldap_uri = ldap://localhost
ldap_search_base = dc=sch179,dc=local
ldap_id_use_start_tls = false
ldap_tls_reqcert = never

krb5_realm = SCH179.LOCAL
krb5_server = localhost

cache_credentials = true
enumerate = true

Права:

chmod 600 /etc/sssd/sssd.conf
chown root:root /etc/sssd/sssd.conf

NSS и PAM

Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:

passwd:     files sss
shadow:     files sss
group:      files sss

Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):

auth        sufficient    pam_sss.so use_first_pass
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
password    sufficient    pam_sss.so use_authtok
session     optional      pam_sss.so
session     required      pam_mkhomedir.so skel=/etc/skel umask=0077

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

Запуск служб

systemctl enable --now sssd
systemctl enable --now oddjobd

Проверка возможности входа

getent passwd dk
su - dk

Настройка клиента

Установите нужные пакеты.

dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients

Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.

[sssd]
domains = sch179.local
services = nss, pam

[domain/sch179.local]
id_provider = ldap
auth_provider = krb5

ldap_uri = ldap://192.168.1.82
ldap_search_base = dc=sch179,dc=local
ldap_id_use_start_tls = false
ldap_tls_reqcert = never

krb5_realm = SCH179.LOCAL
krb5_server = 192.168.1.82

cache_credentials = true
enumerate = true

Установите права доступа на этот файл

chown root:root /etc/sssd/sssd.conf
chmod 600 /etc/sssd/sssd.conf

В файле /etc/nsswitch.conf замените три строки на такие:

passwd:     files sss
shadow:     files sss
group:      files sss

Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.

[libdefaults]
 default_realm = SCH179.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 SCH179.LOCAL = {
  kdc = 192.168.1.82
  admin_server = 192.168.1.82
 }

[domain_realm]
 .sch179.local = SCH179.LOCAL
 sch179.local = SCH179.LOCAL

Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера. Запустите службы.

systemctl enable --now sssd
systemctl enable --now oddjobd

Теперь проверьте работу всех сервисов. Проверка ldap. Должна вывести информацию о пользователе.

getent passwd dk

Получение тикета керберос. Нужно ввести пароль пользователя dk.

kinit dk

После этого введите команду вывода информации о полученном тикете.

klist

Удалите полученный тикет командой

kdestroy

Попробуйте переключиться в пользователя.

su - dk

Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.

Установка NFS на сервере

Установите нужные пакеты.

dnf install -y nfs-utils krb5-server krb5-workstation

Включите и запустите нужные службы.

systemctl enable --now nfs-server 
systemctl enable --now rpcbind
systemctl enable --now gssproxy

Создадим ключи Kerberos на сервере. От имени пользователя root нужно запустить команду

kadmin.local

В приложении kadmin.local нужно ввести команды.

addprinc -randkey nfs/server.sch179.local
ktadd -k /etc/krb5.keytab nfs/server.sch179.local
quit

Проверим, что ключи были созданы, для этого введите команду от root

klist -k /etc/krb5.keytab

Вывод будет таким.

Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   2 nfs/server.sch179.local@SCH179.LOCAL
   2 nfs/server.sch179.local@SCH179.LOCAL

Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером. Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку

/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)

192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)

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

Примените изменения командой

exportfs -ra

Проверьте, что система экспортируется, выполнив команду

exportfs -v

Установка NFS на клиенте

Установите нужные пакеты.

dnf install nfs-utils krb5-workstation

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

systemctl enable --now nfs-client.target
systemctl enable --now gssproxy

Теперь попробуем подмонтировать каталог /home с сервера. Это тестовая процедура, чтобы убедиться в том, что связка NFS + Kerberos настроена правильно.

Выполняйте все последующие действия под пользователем root.

Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)

kinit dk

Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду

klist

Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.

mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home

Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте.

Автомонтирование домашних каталогов при помощи autofs

Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа.

Установим нужные пакеты.

sudo dnf install autofs

Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него

/home /etc/auto.home --timeout=60

Создадим файл /etc/auto.home и запишем в него

* -sec=krb5p,rw server.sch179.local:/home/&

Включим и запустим службу autofs

sudo systemctl enable --now autofs