Школьный сервер LDAP + Kerberos + NFS: различия между версиями
Материал из IT в школе
Перейти к навигацииПерейти к поиску
Dkirienko (обсуждение | вклад) (Создание страницы.) |
Dkirienko (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
Целью является создание школьного сервера со следующим функционалом: | Целью является создание школьного сервера со следующим функционалом: | ||
| Строка 16: | Строка 15: | ||
# Роса "Фреш" 13, версия Server для сервера. | # Роса "Фреш" 13, версия Server для сервера. | ||
# Роса "Фреш" 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров. | # Роса "Фреш" 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров. | ||
== 1. Подготовка системы == | |||
=== Обновление системы === | |||
<syntaxhighlight lang="bash"> | |||
dnf update | |||
</syntaxhighlight> | |||
=== Установка LXQt (графическая оболочка) === | |||
<syntaxhighlight lang="bash"> | |||
dnf install -y task-lxqt | |||
</syntaxhighlight> | |||
=== Установка дополнений для VirtualBox (если используется ВМ) === | |||
<syntaxhighlight lang="bash"> | |||
dnf install -y virtualbox-guest-additions | |||
</syntaxhighlight> | |||
== 2. Установка и настройка OpenLDAP == | |||
=== Установка необходимых пакетов === | |||
<syntaxhighlight lang="bash"> | |||
dnf install openldap-servers openldap-clients | |||
</syntaxhighlight> | |||
Если возникнут ошибки с правами на /etc/openldap/slapd.d, удалите и переустановите пакет openldap-servers. | |||
=== Запуск службы LDAP === | |||
<syntaxhighlight lang="bash"> | |||
systemctl enable --now slapd | |||
systemctl status slapd.service | |||
</syntaxhighlight> | |||
=== Проверка соединения === | |||
<syntaxhighlight lang="bash"> | |||
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn | |||
</syntaxhighlight> | |||
=== Настройка базы данных LDAP === | |||
==== Создание хеша пароля администратора ==== | |||
<syntaxhighlight lang="bash"> | |||
slappasswd | |||
</syntaxhighlight> | |||
Пример результата: | |||
<pre>{SSHA}GmLFgTlVi1ilt4IW0duB4/eCr3tpIuDu</pre> | |||
==== Файл create-db.ldif ==== | |||
<syntaxhighlight lang="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 | |||
</syntaxhighlight> | |||
Применение изменений: | |||
<syntaxhighlight lang="bash"> | |||
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif | |||
</syntaxhighlight> | |||
==== Проверка созданной базы ==== | |||
<syntaxhighlight lang="bash"> | |||
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcDatabase=*)" | |||
</syntaxhighlight> | |||
=== Создание базовой структуры LDAP === | |||
<syntaxhighlight lang="ldif"> | |||
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 | |||
</syntaxhighlight> | |||
Добавление в LDAP: | |||
<syntaxhighlight lang="bash"> | |||
ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f base.ldif | |||
</syntaxhighlight> | |||
=== Добавление схем === | |||
<syntaxhighlight lang="bash"> | |||
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 | |||
</syntaxhighlight> | |||
Проверка схем: | |||
<syntaxhighlight lang="bash"> | |||
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" dn | |||
</syntaxhighlight> | |||
== 3. Добавление групп пользователей == | |||
Создайте файл groups.ldif: | |||
<syntaxhighlight lang="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 | |||
</syntaxhighlight> | |||
Добавление: | |||
<syntaxhighlight lang="bash"> | |||
ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f groups.ldif | |||
</syntaxhighlight> | |||
Проверка: | |||
<syntaxhighlight lang="bash"> | |||
ldapsearch -x -b "ou=groups,dc=sch179,dc=local" "(objectClass=posixGroup)" | |||
</syntaxhighlight> | |||
== 4. Добавление пользователя (например, dk) == | |||
=== Создание пароля === | |||
<syntaxhighlight lang="bash"> | |||
slappasswd -s t9cdw3qR -v | |||
</syntaxhighlight> | |||
=== user-dk.ldif === | |||
<syntaxhighlight lang="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 | |||
</syntaxhighlight> | |||
Добавление: | |||
<syntaxhighlight lang="bash"> | |||
ldapadd -c -x -D "cn=admin,dc=sch179,dc=local" -W -f user-dk.ldif | |||
</syntaxhighlight> | |||
Проверка: | |||
<syntaxhighlight lang="bash"> | |||
ldapsearch -x -b "ou=people,dc=sch179,dc=local" "(uid=dk)" | |||
ldapsearch -x -b "ou=groups,dc=sch179,dc=local" "(cn=dk)" | |||
</syntaxhighlight> | |||
== 5. Настройка Kerberos == | |||
=== Установка пакетов === | |||
<syntaxhighlight lang="bash"> | |||
dnf install -y krb5-server krb5-libs krb5-workstation | |||
</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 = 10.82.193.112 | |||
admin_server = 10.82.193.112 | |||
} | |||
[domain_realm] | |||
.sch179.local = SCH179.LOCAL | |||
sch179.local = SCH179.LOCAL | |||
</syntaxhighlight> | |||
=== Создание базы данных === | |||
<syntaxhighlight lang="bash"> | |||
kdb5_util create -s | |||
</syntaxhighlight> | |||
Задайте мастер-пароль, например: `3yomdiYp` | |||
=== Конфигурация /var/kerberos/krb5kdc/kdc.conf === | |||
<syntaxhighlight lang="ini"> | |||
[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 | |||
} | |||
</syntaxhighlight> | |||
=== ACL файл === | |||
Файл: /var/kerberos/krb5kdc/kadm5.acl | |||
<syntaxhighlight> | |||
*/admin@SCH179.LOCAL * | |||
</syntaxhighlight> | |||
=== Запуск служб === | |||
<syntaxhighlight lang="bash"> | |||
systemctl enable --now krb5kdc | |||
systemctl enable --now kadmin | |||
</syntaxhighlight> | |||
=== Создание принципалов === | |||
<syntaxhighlight lang="bash"> | |||
kadmin.local | |||
addprinc kadmin/admin | |||
quit | |||
</syntaxhighlight> | |||
Однострочная команда: | |||
<syntaxhighlight lang="bash"> | |||
kadmin.local addprinc -pw xWnp7NoX dk | |||
</syntaxhighlight> | |||
== 6. Интеграция LDAP и Kerberos через SSSD == | |||
=== Установка пакетов === | |||
<syntaxhighlight lang="bash"> | |||
dnf install -y sssd sssd-krb5 sssd-ldap oddjob-mkhomedir | |||
</syntaxhighlight> | |||
=== Конфигурация SSSD === | |||
Файл: /etc/sssd/sssd.conf | |||
<syntaxhighlight lang="ini"> | |||
[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 | |||
</syntaxhighlight> | |||
Права: | |||
<syntaxhighlight lang="bash"> | |||
chmod 600 /etc/sssd/sssd.conf | |||
chown root:root /etc/sssd/sssd.conf | |||
</syntaxhighlight> | |||
=== NSS и PAM === | |||
Измените `/etc/nsswitch.conf`: | |||
<syntaxhighlight> | |||
passwd: files sss | |||
shadow: files sss | |||
group: files sss | |||
</syntaxhighlight> | |||
Измените `/etc/pam.d/system-auth`, добавив блок: | |||
<syntaxhighlight> | |||
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 | |||
</syntaxhighlight> | |||
=== Запуск служб === | |||
<syntaxhighlight lang="bash"> | |||
systemctl enable --now sssd | |||
systemctl enable --now oddjobd | |||
</syntaxhighlight> | |||
=== Проверка === | |||
<syntaxhighlight lang="bash"> | |||
getent passwd dk | |||
su - dk | |||
</syntaxhighlight> | |||
Версия 21:40, 24 июня 2025
Целью является создание школьного сервера со следующим функционалом:
- Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включенным в "школьный домен".
- Домашние каталоги учащихся монтируются по NFS, у каждого учащегося домашний каталог (то есть настройки приложений, файлы) будут идентичны на любом компьютере.
Предлагаемые технологии для этого:
- LDAP для хранения базы пользователей.
- Kerberos для хранения паролей и авторизации.
- SSSD для подключения к LDAP и Kerberos.
- NFS для доступа к домашним каталогам.
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать:
- Роса "Фреш" 13, версия Server для сервера.
- Роса "Фреш" 13, версия с Plasma 6 или МОС-13 (альфа-версия) для клиентских компьютеров.
1. Подготовка системы
Обновление системы
dnf update
Установка LXQt (графическая оболочка)
dnf install -y task-lxqt
Установка дополнений для VirtualBox (если используется ВМ)
dnf install -y virtualbox-guest-additions
2. Установка и настройка OpenLDAP
Установка необходимых пакетов
dnf install openldap-servers openldap-clients
Если возникнут ошибки с правами на /etc/openldap/slapd.d, удалите и переустановите пакет openldap-servers.
Запуск службы LDAP
systemctl enable --now slapd
systemctl status slapd.service
Проверка соединения
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn
Настройка базы данных 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
3. Добавление групп пользователей
Создайте файл 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)"
4. Добавление пользователя (например, 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)"
5. Настройка 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 = 10.82.193.112
admin_server = 10.82.193.112
}
[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
6. Интеграция 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Запуск служб
systemctl enable --now sssd
systemctl enable --now oddjobd
Проверка
getent passwd dk
su - dk