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

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




Строка 179: Строка 178:
</syntaxhighlight>
</syntaxhighlight>


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


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


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


Строка 378: Строка 377:


</syntaxhighlight>Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.
</syntaxhighlight>Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerrty456 и принципал student1 с паролем qwerty789.
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.<syntaxhighlight lang="bash">
kadmin.local -q list_principals
</syntaxhighlight>


==Интеграция LDAP и Kerberos через SSSD==
==Интеграция LDAP и Kerberos через SSSD==
Эти шаги нужно сделать и на сервере, и на клиенте.
'''На клиенте также нужно настроить файл /etc/krb5.conf так же, как и на сервере (пример выше).'''


===Установка пакетов===
===Установка пакетов===
Строка 387: Строка 393:


===Конфигурация SSSD===
===Конфигурация SSSD===
Файл: /etc/sssd/sssd.conf
Служба sssd получает информацию о пользователях и их паролях через ldap и kerberos.
 
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.
<syntaxhighlight lang="ini">
<syntaxhighlight lang="ini">
[sssd]
[sssd]
Строка 397: Строка 405:
auth_provider = krb5
auth_provider = krb5


ldap_uri = ldap://localhost
ldap_uri = ldap://server.sch179.local
ldap_search_base = dc=sch179,dc=local
ldap_search_base = dc=sch179,dc=local
ldap_id_use_start_tls = false
ldap_id_use_start_tls = false
Строка 403: Строка 411:


krb5_realm = SCH179.LOCAL
krb5_realm = SCH179.LOCAL
krb5_server = localhost
krb5_server = server.sch179.local


cache_credentials = true
cache_credentials = true
Строка 409: Строка 417:
</syntaxhighlight>
</syntaxhighlight>


Права:
Установите на этот файл права.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
chmod 600 /etc/sssd/sssd.conf
chmod 600 /etc/sssd/sssd.conf
Строка 415: Строка 423:
</syntaxhighlight>
</syntaxhighlight>


===NSS и PAM===
===Настройка NSS===


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


Измените `/etc/pam.d/system-auth`, добавив строки (НУЖЕН ПРИМЕР, КУДА ДОБАВЛЯТЬ):
=== Настройка PAM ===
Измените файл /etc/pam.d/system-auth, добавив несколько строк.
 
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса (она присутствует в интерфейсах auth и password).
<syntaxhighlight>
<syntaxhighlight>
auth        sufficient    pam_sss.so use_first_pass
auth        sufficient    pam_sss.so use_first_pass
Строка 432: Строка 443:
session    required      pam_mkhomedir.so skel=/etc/skel umask=0077
session    required      pam_mkhomedir.so skel=/etc/skel umask=0077
</syntaxhighlight>
</syntaxhighlight>
Сделайте такие же правки в файле /etc/pam.d/pasword-auth
Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. Строка pam_mkhomedir.so создаёт домашний каталог пользователя, если он не существует.


===Запуск служб===
Скорее всего у вас получится такой файл.<syntaxhighlight>
<syntaxhighlight lang="bash">
#%PAM-1.0
systemctl enable --now sssd
auth        required      pam_env.so
systemctl enable --now oddjobd
auth        sufficient    pam_unix.so try_first_pass likeauth nullok
</syntaxhighlight>
auth        sufficient    pam_sss.so use_first_pass
auth        required      pam_deny.so


===Проверка возможности входа===
account    required      pam_unix.so
<syntaxhighlight lang="bash">
account    [default=bad success=ok user_unknown=ignore] pam_sss.so
getent passwd dk
su - dk
</syntaxhighlight>


== Настройка клиента ==
password    sufficient    pam_unix.so try_first_pass nullok sha512 shadow
Установите нужные пакеты.<syntaxhighlight lang="bash">
password    sufficient    pam_sss.so use_authtok
dnf install -y sssd sssd-ldap sssd-krb5 sssd-common oddjob-mkhomedir krb5-workstation openldap-clients
password    required      pam_deny.so


</syntaxhighlight>Создайте файл /etc/sssd/sssd.conf следующего содержания. В строках ldap_uri и krb5_server укажите адрес вашего сервера.<syntaxhighlight lang="ini">
session    optional      pam_keyinit.so revoke
[sssd]
session    required      pam_limits.so
domains = sch179.local
session    optional      pam_env.so
services = nss, pam
session    optional      pam_umask.so
session    optional      pam_systemd.so
session    [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session    required      pam_unix.so
session    optional      pam_sss.so
session    required      pam_mkhomedir.so skel=/etc/skel umask=0077


[domain/sch179.local]
</syntaxhighlight>'''Сделайте такие же правки в файле /etc/pam.d/pasword-auth'''
id_provider = ldap
auth_provider = krb5


ldap_uri = ldap://192.168.1.82
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере - вряд ли вы хотите давать пользователям такую возможность, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности использовать LDAP + Kerberos для авторизации. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. ''(проверить информацию).''
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
Служба oddjobd нужна для создания домашнего каталога.<syntaxhighlight lang="bash">
 
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 sssd
systemctl enable --now oddjobd
systemctl enable --now oddjobd
</syntaxhighlight>


</syntaxhighlight>Теперь проверьте работу всех сервисов.
===Проверка===
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.<syntaxhighlight lang="bash">
getent passwd teacher1


Проверка ldap. Должна вывести информацию о пользователе.<syntaxhighlight lang="bash">
</syntaxhighlight>Получение билета Kerberos для пользователя. Выполните эту команду на клиенте. Нужно ввести пароль пользователя teacher1.<syntaxhighlight>
getent passwd dk
 
</syntaxhighlight>Получение тикета керберос. Нужно ввести пароль пользователя dk.<syntaxhighlight>
kinit dk
kinit dk


Строка 516: Строка 491:
kdestroy
kdestroy
</syntaxhighlight>Попробуйте переключиться в пользователя.<syntaxhighlight lang="bash">
</syntaxhighlight>Попробуйте переключиться в пользователя.<syntaxhighlight lang="bash">
su - dk
su - teacher1


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


== Установка NFS на сервере ==
== Настройка NFS на сервере ==
 
=== Установка пакетов ===
 
Установите нужные пакеты.<syntaxhighlight lang="bash">
Установите нужные пакеты.<syntaxhighlight lang="bash">
dnf install -y nfs-utils krb5-server krb5-workstation
dnf install -y nfs-utils krb5-server krb5-workstation


</syntaxhighlight>Включите и запустите нужные службы.<syntaxhighlight lang="bash">
</syntaxhighlight>
 
=== Включение и запуск служб ===
Включите и запустите нужные службы.<syntaxhighlight lang="bash">
systemctl enable --now nfs-server  
systemctl enable --now nfs-server  
systemctl enable --now rpcbind
systemctl enable --now rpcbind
systemctl enable --now gssproxy
systemctl enable --now gssproxy


</syntaxhighlight>Создадим ключи Kerberos на сервере.
</syntaxhighlight>


От имени пользователя root нужно запустить команду<syntaxhighlight lang="bash">
=== Создание ключей Kerberos ===
На сервере необходимо создать ключи kerberos, которые будет необходимо скопировать на клиентов.
 
От имени пользователя root нужно запустить на сервере команду<syntaxhighlight lang="bash">
kadmin.local
kadmin.local


</syntaxhighlight>В приложении kadmin.local нужно ввести команды.<syntaxhighlight lang="bash">
</syntaxhighlight>В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера).<syntaxhighlight lang="bash">
addprinc -randkey nfs/server.sch179.local
addprinc -randkey nfs/server.sch179.local
ktadd -k /etc/krb5.keytab nfs/server.sch179.local
ktadd -k /etc/krb5.keytab nfs/server.sch179.local
Строка 551: Строка 535:
</syntaxhighlight>'''Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.'''
</syntaxhighlight>'''Созданный в результате файл /etc/krb5.keytab необходимо будет скопировать на каждый клиентский компьютер - иначе kerberos будет отказываться устанавливать соединение с этим компьютером.'''


=== Экспорт /home на сервере ===
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку<syntaxhighlight>
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку<syntaxhighlight>
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)
/home 192.168.0.0/16(rw,sec=krb5p,sync,no_subtree_check)
Строка 556: Строка 541:
</syntaxhighlight>192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)
</syntaxhighlight>192.168.0.0/16 - сеть, из которой разрешён доступ (можете поменять)


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


Примените изменения командой<syntaxhighlight lang="bash">
Примените изменения командой<syntaxhighlight lang="bash">
Строка 565: Строка 552:
</syntaxhighlight>
</syntaxhighlight>


== Установка NFS на клиенте ==
== Настройка NFS на клиенте ==
 
=== Установка пакетов ===
 
Установите нужные пакеты.<syntaxhighlight lang="bash">
Установите нужные пакеты.<syntaxhighlight lang="bash">
dnf install nfs-utils krb5-workstation
dnf install nfs-utils krb5-workstation


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


=== Копирование ключей Kerberos ===
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл.
Проверьте наличие ключей в этом файле командой<syntaxhighlight lang="bash">
klist -k /etc/krb5.keytab
</syntaxhighlight>
=== Включение и запуск служб ===
Запустите нужные службы.<syntaxhighlight lang="bash">
Запустите нужные службы.<syntaxhighlight lang="bash">
systemctl enable --now nfs-client.target
systemctl enable --now nfs-client.target
systemctl enable --now gssproxy
systemctl enable --now gssproxy


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


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


Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)<syntaxhighlight lang="bash">
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Этот билет нужно получить командой (выполним её от root)<syntaxhighlight lang="bash">
kinit dk
kinit teacher1
</syntaxhighlight>Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду <syntaxhighlight lang="bash">
</syntaxhighlight>Понадобится ввести пароль пользователя dk. Убедитесь, что билет получен, введя команду <syntaxhighlight lang="bash">
klist
klist
Строка 590: Строка 591:


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


Установим нужные пакеты.<syntaxhighlight lang="bash">
Установим нужные пакеты.<syntaxhighlight lang="bash">
Строка 602: Строка 603:


</syntaxhighlight>Включим и запустим службу autofs<syntaxhighlight lang="bash">
</syntaxhighlight>Включим и запустим службу autofs<syntaxhighlight lang="bash">
sudo systemctl enable --now autofs
systemctl enable --now autofs


</syntaxhighlight>
</syntaxhighlight>

Навигация