Школьный сервер LDAP + Kerberos + NFS: различия между версиями
Dkirienko (обсуждение | вклад) (Настройка LDAP + Kerberos клиентского компьютера.) |
Dkirienko (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
<big>'''Это черновик статьи, он используется для хранения рабочих заметок, а не для разворачивания полноценного решения!'''</big> | |||
<big>'''Это черновик статьи, он используется для хранения рабочих заметок, а не для | |||
==Введение== | ==Введение== | ||
| Строка 23: | Строка 21: | ||
#Роса "Фреш" 13, версия Server для сервера. | #Роса "Фреш" 13, версия Server для сервера. | ||
# Роса "Фреш" 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров. | # Роса "Фреш" 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров. | ||
== Настройка доменных имён == | |||
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали с использованием FQDN. | |||
Мы предположим, что наша сеть имеет следующий вид. | |||
Локальный домен называется sch179.local | |||
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local | |||
Клиентский компьютер имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local | |||
Вы можете поднять DNS для разрешения имён (поможет ли в этом Avahi?). Но для надёжности давайте создадим статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя сервера, на сервере придётся прописывать имена всех подключённых компьютеров в локальной сети. | |||
На сервере запишите в файл /etc/hostname единственную строку<syntaxhighlight lang="ini"> | |||
server.sch179.local | |||
</syntaxhighlight>На клиенте в аналогичный файл запишите его имя<syntaxhighlight lang="ini"> | |||
ws01.sch179.local | |||
</syntaxhighlight>В файл /etc/hosts на сервере добавьте для всех клиентских компьютеров строки вида | |||
192.168.1.83 ws01.sch179.local ws01<syntaxhighlight lang="ini"> | |||
192.168.1.1 ws01.sch179.local ws01 | |||
</syntaxhighlight>На клиентском компьютере запишите в этот файл адрес и имя сервера.<syntaxhighlight lang="ini"> | |||
192.168.0.1 server.sch179.local server | |||
</syntaxhighlight> | |||
==Подготовка сервера== | ==Подготовка сервера== | ||
| Строка 425: | Строка 450: | ||
</syntaxhighlight>Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере. | </syntaxhighlight>Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере. | ||
== Установка NFS на сервере == | |||
Установите нужные пакеты.<syntaxhighlight lang="bash"> | |||
dnf install -y nfs-utils krb5-server krb5-workstation | |||
</syntaxhighlight>Включите и запустите нужные службы.<syntaxhighlight lang="bash"> | |||
systemctl enable --now nfs-server | |||
systemctl enable --now rpcbind | |||
</syntaxhighlight> | |||
Версия 13:58, 25 июня 2025
Это черновик статьи, он используется для хранения рабочих заметок, а не для разворачивания полноценного решения!
Введение
Целью является создание школьного сервера со следующим функционалом:
- Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в "школьный домен".
- Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.
Предлагаемые технологии для этого:
- LDAP для хранения базы пользователей.
- Kerberos для хранения паролей и авторизации.
- SSSD для подключения к LDAP и Kerberos.
- NFS для доступа к домашним каталогам.
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:
- Роса "Фреш" 13, версия Server для сервера.
- Роса "Фреш" 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.
Настройка доменных имён
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали с использованием FQDN.
Мы предположим, что наша сеть имеет следующий вид.
Локальный домен называется sch179.local
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local
Клиентский компьютер имеет IP-адрес 192.168.1.1 и имя ws01.sch179.local
Вы можете поднять DNS для разрешения имён (поможет ли в этом Avahi?). Но для надёжности давайте создадим статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя сервера, на сервере придётся прописывать имена всех подключённых компьютеров в локальной сети.
На сервере запишите в файл /etc/hostname единственную строку
server.sch179.local
На клиенте в аналогичный файл запишите его имя
ws01.sch179.local
В файл /etc/hosts на сервере добавьте для всех клиентских компьютеров строки вида 192.168.1.83 ws01.sch179.local ws01
192.168.1.1 ws01.sch179.local ws01
На клиентском компьютере запишите в этот файл адрес и имя сервера.
192.168.0.1 server.sch179.local server
Подготовка сервера
Установите серверный дистрибутив.
Обновите систему (команда от root).
dnf update
Если вам нужна графическая оболочка на сервере, установите lxqt (лёгкая и нетребовательная к рекурсам) (команда от root).
dnf install -y task-lxqt
Если вы тестируете установку в VirtualBox, установите гостевые расширения (команда от root).
dnf install -y virtualbox-guest-additions
Установка и настройка OpenLDAP
Установка и запуск LDAP
Установите на сервере пакеты (команда от root).
dnf install -y openldap-servers openldap-clients
После установки наблюдались ошибки с правами на /etc/openldap/slapd.d, помогло удалить и переустановить пакет openldap-servers (уточнить - какие должны быть права? проверить воспроизводимость проблемы).
Запуск службы LDAP (команда от root).
systemctl enable --now slapd
Проверьте, что LDAP запущен и отвечает на запросы (команда от root).
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn
systemctl status slapd.service
Настройка базы данных LDAP
Создание хеша пароля администратора
slappasswd
Пример результата:
{SSHA}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDu
Файл 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}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDuПрименение изменений:
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif
Проверка созданной базы
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcDatabase=*)"
Создание базовой структуры LDAP
dn: dc=sch179,dc=local
objectClass: top
objectClass: organization
objectClass: dcObject
o: Sch179 School
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:
ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f base.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/inetorgperson.ldif
Проверка схем:
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" dn
Добавление групп пользователей
Создайте файл groups.ldif:
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)"
Добавление пользователя (например, dk)
Создание пароля
slappasswd -s t9cdw3qR -v
user-dk.ldif
dn: cn=dk,ou=groups,dc=sch179,dc=local
objectClass: posixGroup
cn: dk
gidNumber: 1001
description: Primary group for user dk
dn: uid=dk,ou=people,dc=sch179,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: dk
sn: Кириенко
givenName: Денис
cn: Денис Кириенко
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/dk
loginShell: /bin/bash
userPassword: {SSHA}rKkuYpM736DjDANzimaJOW0vV8bO8dN9
description: User Denis KirienkoДобавление:
ldapadd -c -x -D "cn=admin,dc=sch179,dc=local" -W -f user-dk.ldif
Проверка:
ldapsearch -x -b "ou=people,dc=sch179,dc=local" "(uid=dk)"
ldapsearch -x -b "ou=groups,dc=sch179,dc=local" "(cn=dk)"
Настройка Kerberos
Установка пакетов
dnf install -y krb5-server krb5-libs krb5-workstation
Конфигурация /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 = 127.0.0.1
admin_server = 127.0.0.1
}
[domain_realm]
.sch179.local = SCH179.LOCAL
sch179.local = SCH179.LOCAL
Создание базы данных
kdb5_util create -s
Задайте мастер-пароль, например: `3yomdiYp`
Конфигурация /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
}
ACL файл
Файл: /var/kerberos/krb5kdc/kadm5.acl
*/admin@SCH179.LOCAL *Запуск служб
systemctl enable --now krb5kdc
systemctl enable --now kadmin
Создание принципалов
kadmin.local
addprinc kadmin/admin
quit
Однострочная команда:
kadmin.local addprinc -pw xWnp7NoX dk
Интеграция 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