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

Материал из IT в школе
Перейти к навигацииПерейти к поиску
(Настройка LDAP + Kerberos клиентского компьютера.)
Строка 1: Строка 1:




Строка 228: Строка 229:
[realms]
[realms]
  SCH179.LOCAL = {
  SCH179.LOCAL = {
   kdc = 10.82.193.112
   kdc = 127.0.0.1
   admin_server = 10.82.193.112
   admin_server = 127.0.0.1
  }
  }


Строка 322: Строка 323:
===NSS и PAM===
===NSS и PAM===


Измените `/etc/nsswitch.conf`:
Измените `/etc/nsswitch.conf, заменив в нём три строки на следующие:
<syntaxhighlight>
<syntaxhighlight lang="ini">
passwd:    files sss
passwd:    files sss
shadow:    files sss
shadow:    files sss
Строка 350: Строка 351:
su - dk
su - dk
</syntaxhighlight>
</syntaxhighlight>
== Настройка клиента ==
Установите нужные пакеты.<syntaxhighlight lang="bash">
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients
</syntaxhighlight>Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.<syntaxhighlight lang="ini">
[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
</syntaxhighlight>Установите права доступа на этот файл<syntaxhighlight lang="bash">
chown root:root /etc/sssd/sssd.conf
chmod 600 /etc/sssd/sssd.conf
</syntaxhighlight>В файле /etc/nsswitch.conf замените три строки на такие:<syntaxhighlight lang="ini">
passwd:    files sss
shadow:    files sss
group:      files sss
</syntaxhighlight>Исправьте файл /etc/krb5.conf, указав в двух местах адрес сервера.<syntaxhighlight lang="ini">
[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
</syntaxhighlight>Добавьте в файлы /etc/pam.d/system-auth и /etc/pam-d/password-auth строки, как в настройках сервера.
Запустите службы.<syntaxhighlight lang="bash">
systemctl enable --now sssd
systemctl enable --now oddjobd
</syntaxhighlight>Теперь проверьте работу всех сервисов.
Проверка ldap. Должна вывести информацию о пользователе.<syntaxhighlight lang="bash">
getent passwd dk
</syntaxhighlight>Получение тикета керберос. Нужно ввести пароль пользователя dk.<syntaxhighlight>
kinit dk
</syntaxhighlight>После этого введите команду вывода информации о полученном тикете.<syntaxhighlight lang="bash">
klist
</syntaxhighlight>Удалите полученный тикет командой<syntaxhighlight lang="bash">
kdestroy
</syntaxhighlight>Попробуйте переключиться в пользователя.<syntaxhighlight lang="bash">
su - dk
</syntaxhighlight>Наконец. попробуйте войти в систему в консоли и в десктоп-менеджере.

Версия 11:47, 25 июня 2025



Это черновик статьи, он используется для хранения рабочих заметок, а не для использования!

Введение

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

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

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

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

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

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

Подготовка сервера

Установите серверный дистрибутив.

Обновите систему (команда от 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

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