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

Материал из IT в школе
Перейти к навигацииПерейти к поиску
нет описания правки
(Создание страницы.)
 
Строка 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>

Навигация