241
правка
Dkirienko (обсуждение | вклад) |
Dkirienko (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
==Краткое описание== | ==Краткое описание== | ||
Целью является создание школьного сервера со следующим функционалом | Целью является создание школьного сервера со следующим функционалом. | ||
#Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, | #Сервер является сервером авторизации для учащихся школы. Каждому учащемуся выдаётся логин и пароль, при помощи которого он может авторизоваться на любом компьютере, включённым в "школьный домен". | ||
# | #У каждого учащегося на сервере есть свой домашний каталог, который монтируется по сети по протоколу NFS при входе в систему. Тем самым файлы учащегося и его настройки будут идентичны на любом компьютере. | ||
Предлагаемые технологии для этого: | Предлагаемые технологии для этого: | ||
| Строка 15: | Строка 12: | ||
#SSSD для подключения к LDAP и Kerberos. | #SSSD для подключения к LDAP и Kerberos. | ||
#NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера. | #NFS для доступа к домашним каталогам - /home на клиентах является сетевым разделом, монтируемым с сервера. | ||
#Autofs для автоматического монтирования домашнего каталога пользователя при обращении. | |||
Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать: | Для реализации будет использоваться платформа РОСА 13, как более современная. В настоящий момент для реализации такой конфигурации можно использовать: | ||
#Роса "Фреш" 13, версия Server для сервера. | #Роса "Фреш" 13, версия Server для сервера. | ||
# | #МОС-13 (альфа-версия) для клиентских компьютеров (можно использовать Роса "Фреш" 13). | ||
Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без изменений. | Скорее всего эти инструкции можно применить для дистрибутивов на базе РОСА-2021.1 (МОС-12) без больших изменений. | ||
== Установка дистрибутивов и общие идеи конфигурации == | == Установка дистрибутивов и общие идеи конфигурации == | ||
Дистрибутивы Роса "Фреш" 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса "Фреш" доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке). | Дистрибутивы Роса "Фреш" 13 можно скачать [https://rosa.ru/rosa-linux-download-links/ по ссылке]. Дистрибутивы Роса "Фреш" доступны для бесплатного использования без каких-либо ограничений (см. лицензионное соглашение при установке). | ||
''' | '''Поскольку будут настраиваться механизмы авторизации и монтирования /home по сети, необходимо при установке как сервера, так и клиентов разрешить вход пользователю root. Это упростит починку системы, если будет что-то сломано в механизмах авторизации или доступа к /home.''' | ||
На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа "user" или "student", функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя '''НЕ ДОЛЖЕН''' находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы. | На клиентских компьютерах удобно помимо сетевых пользователей завести общий логин типа "user" или "student", функционирование которого не было бы привязано к работе сервера. Это позволит использовать компьютерные классы при проблемах с сетью или сервером. При этом домашний каталог такого пользователя '''НЕ ДОЛЖЕН''' находиться в /home, т.к. при проблемах с доступом /home по сети использование этого каталога будет невозможно. Предлагается разместить домашний каталог такого пользователя в /usr/local/home. Туда же следует перенести и домашний каталог локального администратора системы. Расположение домашнего каталога можно задать сразу при установке системы, нажав на кнопку "Дополнительно". | ||
Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя | Можно перенести домашний каталог пользователя в другое место после установки. Пусть логин пользователя admin и мы хотим переместить домашний каталог пользователя из /home/admin в /usr/local/home/admin. Войдите в систему под пользователем root (не используйте sudo, не используйте su - в системе не должно быть открытых сеансов пользователя admin). Выполните команды.<syntaxhighlight lang="bash"> | ||
mkdir /usr/local/home | mkdir /usr/local/home | ||
mv /home/admin /usr/local/home/ | mv /home/admin /usr/local/home/ | ||
usermod -d /usr/local/home/admin admin | usermod -d /usr/local/home/admin admin | ||
</syntaxhighlight> | |||
На сервере необходимо вынести /home в отдельный раздел, чтобы при заполнении всего раздела на нём это не повлияло на работу сервера. Рекомендуется использование файловой системы XFS на этом разделе, она считается наиболее производительной. Наоборот, BTRFS не рекомендуется, т.к. нет смысла создавать снимки на этом разделе, также BTRFS не поддерживает пользовательские квоты. Для уменьшения числа записей на диск, эту файловую систему нужно монтировать с параметром noatime. | |||
Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - | Для пользователей необходимо квотировать размер дискового пространства. Желательный размер квоты на одного пользователя - 3-4 гигабайта, поэтому в масштабах одного школьного здания на хранение файлов пользователей следует выделять порядка 1 террабайта дискового пространства. | ||
Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку. | Если вам нужна графическая оболочка на сервере, установите lxqt - лёгкую и нетребовательную к ресурсам оболочку. | ||
В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo. | В дальнейшем все команды предполагается вводить от имени пользователя root или с использованием sudo. | ||
<syntaxhighlight lang="bash"> | |||
dnf install -y task-lxqt | |||
</syntaxhighlight> | |||
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root).<syntaxhighlight lang="bash"> | |||
Для отключения всех ждущих-спящих режимов на компьютере выполните команду (от root). | |||
<syntaxhighlight lang="bash"> | |||
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target | systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Настройка доменных имён == | == Настройка доменных имён == | ||
Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. | Для работы Kerberos необходимо, чтобы все компьютеры имели имена (FQDN) и взаимодействовали друг с другом с использованием FQDN. | ||
Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. | Предположим, что наша сеть имеет следующий вид. Локальный домен называется sch179.local. Понятие "домен" дальше будет возникать в разных смыслах - DNS-имён, домена LDAP, домена Kerberos. Некоторые из этих доменов должны совпадать, поэтому лучше выбрать один домен для своей школы (мы выбрали sch719.local) и везде используем именно его. | ||
Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local | Сервер имеет IP-адрес 192.168.0.1 и имя server.sch179.local | ||
| Строка 59: | Строка 61: | ||
В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена. | В дальнейших инструкциях везде замените sch179.local на свой домен, IP-адреса и доменные имена компьютеров - на свои адреса и имена. | ||
Вы можете поднять DNS для разрешения имён | Вы можете поднять DNS для разрешения имён. Но для надёжности и независимости от службы DNS можно создать статические записи для всех компьютеров - на каждом компьютере будут прописаны доменные имена других компьютеров. На клиенте достаточно прописать имя и адрес сервера, на сервере необходимо прописать имена всех подключённых к нему компьютеров в локальной сети. | ||
На сервере выполните команду (от root).<syntaxhighlight lang="bash"> | На сервере выполните команду (от root). | ||
<syntaxhighlight lang="bash"> | |||
hostnamectl set-hostname server.sch179.local | hostnamectl set-hostname server.sch179.local | ||
</syntaxhighlight>На клиенте выполните аналогичную команду (от root).<syntaxhighlight lang="bash"> | </syntaxhighlight> | ||
На клиенте выполните аналогичную команду (от root). | |||
<syntaxhighlight lang="bash"> | |||
hostnamectl set-hostname ws01.sch179.local | hostnamectl set-hostname ws01.sch179.local | ||
</syntaxhighlight>В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида<syntaxhighlight> | </syntaxhighlight> | ||
В файл /etc/hosts на сервере добавьте адреса и имена всех клиентских компьютеров - строки вида | |||
<syntaxhighlight> | |||
192.168.1.1 ws01.sch179.local ws01 | 192.168.1.1 ws01.sch179.local ws01 | ||
</syntaxhighlight> | |||
Одна строка соответствует одному компьютеру. Замените в этой строке IP-адрес компьютера, его полное и короткое имя. | |||
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку | |||
<syntaxhighlight> | |||
На клиентском компьютере запишите в этот файл адрес и имя сервера - строку | |||
192.168.0.1 server.sch179.local server | 192.168.0.1 server.sch179.local server | ||
</syntaxhighlight> | |||
==Настройка OpenLDAP на сервере== | ==Настройка OpenLDAP на сервере== | ||
LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP. | LDAP (Lightweight Directory Access Protocol) - это сетевая база данных для хранения информации о пользователях, группах, может также использоваться для хранения сведений о компьютерах, сервисах и т.д. Мы будем хранить в LDAP учётные записи пользователей и групп пользователей. При этом на компьютере могут быть как локальные учётные записи (root, admin, student) - информация о них хранится в /etc/passwd, так и сетевые учётные записи, информация о которых будет загружаться из LDAP. | ||
=== Установка и запуск === | === Установка и запуск === | ||
Установите на сервере пакеты (команда от root).<syntaxhighlight lang="bash"> | Установите на сервере пакеты (команда от root). | ||
<syntaxhighlight lang="bash"> | |||
dnf install -y openldap-servers openldap-clients | dnf install -y openldap-servers openldap-clients | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Включите и запустите службу LDAP (команда от root). | |||
<syntaxhighlight lang="bash"> | |||
systemctl enable --now slapd | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Проверьте, что LDAP запущен и отвечает на запросы (команда от root). | |||
<syntaxhighlight lang="bash"> | |||
systemctl status slapd.service | systemctl status slapd.service | ||
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn | ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config dn | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Создание базы и записи администратора LDAP=== | ===Создание базы и записи администратора LDAP=== | ||
Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду<syntaxhighlight lang="bash"> | Сначала нужно создать хеш пароля администратора LDAP. Для этого запустите команду | ||
<syntaxhighlight lang="bash"> | |||
slappasswd | slappasswd | ||
</syntaxhighlight> | </syntaxhighlight> | ||
и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе "qwerty123" программа может выдать такой хеш:<syntaxhighlight> | и введите пароль два раза. Команда выведет хеш пароля. Например, при вводе "qwerty123" программа может выдать такой хеш: | ||
<syntaxhighlight> | |||
{SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX | {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX | ||
</syntaxhighlight> | |||
При повторном запуске и вводе такого же пароля хеш будет другим, это нормально. | |||
Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости. | Пароль администратора лучше делать уникальным и длинным (например, в 15-20 символов), чтобы его невозможно было подобрать. Надёжно сохраните этот пароль, и вставляйте через буфер обмена по мере необходимости. | ||
| Строка 124: | Строка 131: | ||
olcRootDN: cn=admin,dc=sch179,dc=local | olcRootDN: cn=admin,dc=sch179,dc=local | ||
olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX | olcRootPW: {SSHA}51OzQC2m1HfQMEzuV8B7qY0TfSkNq+rX | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 130: | Строка 136: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif | ldapmodify -Y EXTERNAL -H ldapi:/// -f create-db.ldif | ||
</syntaxhighlight>Проверка созданной базы командой.<syntaxhighlight lang="bash"> | </syntaxhighlight> | ||
Проверка созданной базы командой. | |||
<syntaxhighlight lang="bash"> | |||
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcDatabase=*)" | ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcDatabase=*)" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Добавление схем=== | ===Добавление схем=== | ||
Далее в базу нужно добавить "схемы" - описание разных видов объектов (например, групп и учётных записей). | Далее в базу нужно добавить "схемы" - описание разных видов объектов (например, групп и учётных записей). Выполните команды: | ||
<syntaxhighlight lang="bash"> | |||
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.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/nis.ldif | ||
| Строка 144: | Строка 154: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" dn | ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" dn | ||
</syntaxhighlight>Она должна вывести текст, в котором есть строки:<syntaxhighlight> | </syntaxhighlight> | ||
Она должна вывести текст, в котором есть строки: | |||
<syntaxhighlight> | |||
dn: cn={0}core,cn=schema,cn=config | dn: cn={0}core,cn=schema,cn=config | ||
dn: cn={1}cosine,cn=schema,cn=config | dn: cn={1}cosine,cn=schema,cn=config | ||
dn: cn={2}nis,cn=schema,cn=config | dn: cn={2}nis,cn=schema,cn=config | ||
dn: cn={3}inetorgperson,cn=schema,cn=config | dn: cn={3}inetorgperson,cn=schema,cn=config | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Создание базовой структуры организации === | === Создание базовой структуры организации === | ||
Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания | Далее в базу LDAP нужно добавить разделы для хранения учетных записей и групп. Создайте файл base.ldif следующего содержания, заменив везде sch179 и параметр o: School No 179 на описание вашей школы. | ||
<syntaxhighlight> | |||
dn: dc=sch179,dc=local | dn: dc=sch179,dc=local | ||
objectClass: top | objectClass: top | ||
| Строка 180: | Строка 190: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f base.ldif | ldapadd -x -D "cn=admin,dc=sch179,dc=local" -W -f base.ldif | ||
</syntaxhighlight>При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее. | </syntaxhighlight> | ||
При добавлении вам нужно будет ввести пароль администратора LDAP, который был задан ранее. | |||
Для проверки введите команду (не забудьте заменить sch179 на своё название):<syntaxhighlight lang="bash"> | Для проверки введите команду (не забудьте заменить sch179 на своё название): | ||
<syntaxhighlight lang="bash"> | |||
ldapsearch -x -b "dc=sch179,dc=local" | ldapsearch -x -b "dc=sch179,dc=local" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 197: | Строка 208: | ||
objectClass: posixGroup | objectClass: posixGroup | ||
cn: admins | cn: admins | ||
gidNumber: | gidNumber: 2000 | ||
description: System administrators | description: System administrators | ||
| Строка 204: | Строка 215: | ||
objectClass: posixGroup | objectClass: posixGroup | ||
cn: teachers | cn: teachers | ||
gidNumber: | gidNumber: 3000 | ||
description: School teachers | description: School teachers | ||
| Строка 211: | Строка 222: | ||
objectClass: posixGroup | objectClass: posixGroup | ||
cn: misc | cn: misc | ||
gidNumber: | gidNumber: 4000 | ||
description: Miscellaneous people | description: Miscellaneous people | ||
| Строка 218: | Строка 229: | ||
objectClass: posixGroup | objectClass: posixGroup | ||
cn: students | cn: students | ||
gidNumber: | gidNumber: 5000 | ||
description: Students | description: Students | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 235: | Строка 246: | ||
Попробуем добавить тестовых пользователей. | Попробуем добавить тестовых пользователей. | ||
Пусть мы ходим создать пользователя teacher1 c uid= | Пусть мы ходим создать пользователя teacher1 c uid=3001 и пользователя student1 с uid=5001. При этом для каждого пользователя будет создана группа с таким же именем. | ||
Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. <syntaxhighlight> | Создайте файл users.ldif следующего содержания. Не забудьте поменять sch179 на своё название, остальное - по мере необходимости. <syntaxhighlight> | ||
| Строка 241: | Строка 252: | ||
objectClass: posixGroup | objectClass: posixGroup | ||
cn: teacher1 | cn: teacher1 | ||
gidNumber: | gidNumber: 3001 | ||
description: Primary group for user teacher1 | description: Primary group for user teacher1 | ||
| Строка 252: | Строка 263: | ||
givenName: Сергей | givenName: Сергей | ||
cn: Сергей Иванов | cn: Сергей Иванов | ||
uidNumber: | uidNumber: 3001 | ||
gidNumber: | gidNumber: 3001 | ||
homeDirectory: /home/teacher1 | homeDirectory: /home/teacher1 | ||
loginShell: /bin/bash | loginShell: /bin/bash | ||
| Строка 261: | Строка 272: | ||
objectClass: posixGroup | objectClass: posixGroup | ||
cn: student1 | cn: student1 | ||
gidNumber: | gidNumber: 5001 | ||
description: Primary group for user student1 | description: Primary group for user student1 | ||
| Строка 272: | Строка 283: | ||
givenName: Мария | givenName: Мария | ||
cn: Мария Васильева | cn: Мария Васильева | ||
uidNumber: | uidNumber: 5001 | ||
gidNumber: | gidNumber: 5001 | ||
homeDirectory: /home/student1 | homeDirectory: /home/student1 | ||
loginShell: /bin/bash | loginShell: /bin/bash | ||
description: User student1 (Мария Васильева) | description: User student1 (Мария Васильева) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 302: | Строка 312: | ||
Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). | Измените файл /etc/krb5.conf, записав в него следующий текст (нужно записать параметр default_realm и заполнить разделы [realms] и [domain_realm]). | ||
Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). <syntaxhighlight lang="ini"> | Обратите внимание, на клиентах также будет необходимо настроить этот файл (см. ниже). | ||
<syntaxhighlight lang="ini"> | |||
includedir /etc/krb5.conf.d/ | includedir /etc/krb5.conf.d/ | ||
| Строка 327: | Строка 339: | ||
.sch179.local = SCH179.LOCAL | .sch179.local = SCH179.LOCAL | ||
sch179.local = SCH179.LOCAL | sch179.local = SCH179.LOCAL | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Создание базы данных=== | ===Создание базы данных=== | ||
Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root.<syntaxhighlight lang="bash"> | Выполните команду. Нужно будет установить мастер-пароль для базы Kerberos,. Выполните команду от root. | ||
<syntaxhighlight lang="bash"> | |||
kdb5_util create -s | kdb5_util create -s | ||
</syntaxhighlight>Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль. | </syntaxhighlight> | ||
Введите два раза KDC database master key (пароль администратора базы данных Kerberos), надёжно сохраните этот пароль. | |||
===Конфигурация базы данных Kerberos=== | ===Конфигурация базы данных Kerberos=== | ||
Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст.<syntaxhighlight lang="ini"> | Запишите в файл /var/kerberos/krb5kdc/kdc.conf следующий текст. | ||
<syntaxhighlight lang="ini"> | |||
[realms] | [realms] | ||
SCH179.LOCAL = { | SCH179.LOCAL = { | ||
| Строка 349: | Строка 364: | ||
default_principal_flags = +forwardable | default_principal_flags = +forwardable | ||
} | } | ||
</syntaxhighlight>Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст. | </syntaxhighlight> | ||
Запишите в файл /var/kerberos/krb5kdc/kadm5.acl следующий текст. | |||
<syntaxhighlight> | <syntaxhighlight> | ||
*/admin@SCH179.LOCAL * | */admin@SCH179.LOCAL * | ||
| Строка 355: | Строка 371: | ||
===Включение и запуск служб=== | ===Включение и запуск служб=== | ||
Выполните | Выполните команды. | ||
<syntaxhighlight lang="bash"> | |||
systemctl enable --now krb5kdc | systemctl enable --now krb5kdc | ||
systemctl enable --now kadmin | systemctl enable --now kadmin | ||
| Строка 365: | Строка 382: | ||
Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда "listprincs" выводит список всех принципалов. Команда "quit" завершает работу kdamin.local. | Утилита kdamin.local используется для управления базой Kerberos непосредственно на сервере Kerberos. Если запустить эту команду без параметров, то запустится оболочка, в которую можно вводить команды Kerberos. Например, команда "listprincs" выводит список всех принципалов. Команда "quit" завершает работу kdamin.local. | ||
Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой<syntaxhighlight lang="bash"> | Другой способ использования kadmin.local - это указать команду непосредственно в виде параметров при запуске kdamin.local. Например, вывести список всех принципалов можно командой | ||
<syntaxhighlight lang="bash"> | |||
kadmin.local listprincs | kadmin.local listprincs | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Для создания этого принципала запустите kadmin.local и в его консоли введите команду.<syntaxhighlight lang="bash"> | Специальным принципалом является принципал с именем kadmin/admin. Этот принципал необходимо создать, если вы будете управлять базой Kerberos с другого компьютера. Если все команды администрирования Kerberos будут вводиться через kadmin.local, то принципал kadmin/admin можно не создавать. | ||
Для создания этого принципала запустите kadmin.local и в его консоли введите команду. | |||
<syntaxhighlight lang="bash"> | |||
addprinc kadmin/admin | addprinc kadmin/admin | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit. | Задайте пароль для этого принципала. Завершите работу kadmin.local командой quit. | ||
Если такой принципал уже существует в системе, создать его не получится. В этом случае нужно сначала удалить принципал kadmin/admin, затем создать его заново. | |||
=== Создание принципалов для пользователей === | === Создание принципалов для пользователей === | ||
Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1. | Для каждого пользователя системы, необходимо создать принципал, например, принципалы teacher1, student1. | ||
Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например,<syntaxhighlight> | Это можно сделать разными способами. Можно запустить kadmin.local и ввести команду addprinc для создания принципала каждого пользователя, например, | ||
<syntaxhighlight> | |||
addprinc teacher1 | addprinc teacher1 | ||
addprinc student1 | addprinc student1 | ||
</syntaxhighlight> | |||
Для каждого принципала необходимо будет два раза ввести его пароль. | |||
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Такие команды можно использовать в скриптах создания пользователей. Примеры таких команд: | |||
Если вы создаёте много принципалов, удобно это делать не вводя пароль, сразу одной командой. Примеры таких команд: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
kadmin.local addprinc -pw qwerty456 teacher1 | kadmin.local addprinc -pw qwerty456 teacher1 | ||
kadmin.local addprinc -pw qwerty789 student1 | kadmin.local addprinc -pw qwerty789 student1 | ||
</syntaxhighlight> | |||
Параметр -pw задаёт пароль принципала, то есть эти команды создадут принципал teacher1 с паролем qwerty456 и принципал student1 с паролем qwerty789. | |||
Вывести список всех принципалов, хранящихся в Kerberos, можно командой.<syntaxhighlight lang="bash"> | Вывести список всех принципалов, хранящихся в Kerberos, можно командой. | ||
<syntaxhighlight lang="bash"> | |||
kadmin.local -q list_principals | kadmin.local -q list_principals | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Доступ к LDAP и Kerberos через SSSD== | ==Доступ к LDAP и Kerberos через SSSD== | ||
sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а | sssd (System Security Services Daemon) - это служба, которая запускается на компьютере для аутентификации пользователей. Она будет взаимодействовать с удалёнными серверами LDAP и Kerberos. Когда пользователей входит в систему, система обращается к sssd для проверки информации о пользователе и пароля, а та обращается к удалённым серверам LDAP и Kerberos. | ||
Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home. | Эту настройку нужно сделать как на клиенте, так и на сервере, т.к. на сервере также должна быть информация об имеющихся пользователях для хранения их домашних каталогов /home. | ||
| Строка 407: | Строка 432: | ||
===Настройка sssd=== | ===Настройка sssd=== | ||
Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки.<syntaxhighlight lang="ini"> | Создайте файл /etc/sssd/sssd.conf и запишите в него следующий текст, внеся нужные правки. | ||
<syntaxhighlight lang="ini"> | |||
[sssd] | [sssd] | ||
domains = sch179.local | domains = sch179.local | ||
| Строка 442: | Строка 468: | ||
В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd. | В файле /etc/nsswitch.conf хранится информация о том, как система получает информацию о пользователях. Нам нужно сделать так, чтобы информация о пользователях бралась из локальных файлов (/etc/passwd, /etc/group), а затем из sssd. | ||
Измените /etc/nsswitch.conf, заменив в нём три строки на следующие: | Измените /etc/nsswitch.conf, заменив в нём три строки, начинающиеся с passwd:, shadow: и group: на следующие: | ||
<syntaxhighlight lang="ini"> | <syntaxhighlight lang="ini"> | ||
passwd: files sss | passwd: files sss | ||
| Строка 456: | Строка 482: | ||
Измените файл /etc/pam.d/system-auth, добавив несколько строк. | Измените файл /etc/pam.d/system-auth, добавив несколько строк. | ||
Первое слово каждой строки (auth, account, password, session) - это интерфейс (тип взаимодействия): аутентификация, проверка учетной записи, управление паролями, управление сеансами. Добавляйте указанные строки после всех строк такого же интерфейса, но перед строкой pam_deny.so, если она есть для данного интерфейса ( | Первое слово каждой строки (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 | ||
| Строка 465: | Строка 492: | ||
session optional pam_sss.so | session optional pam_sss.so | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Скорее всего у вас получится такой файл.<syntaxhighlight> | Четыре строки с pam_sss.so получают информацию об учётной записи через модуль pam_sss. | ||
Скорее всего у вас получится такой файл. | |||
<syntaxhighlight> | |||
#%PAM-1.0 | #%PAM-1.0 | ||
auth required pam_env.so | auth required pam_env.so | ||
| Строка 491: | Строка 519: | ||
session required pam_unix.so | session required pam_unix.so | ||
session optional pam_sss.so | session optional pam_sss.so | ||
</syntaxhighlight> | |||
'''Сделайте такие же правки в файле /etc/pam.d/pasword-auth''' | |||
Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. | Возможно, вы не хотите, чтобы пользователи входили в систему на сервере, в том числе и по ssh. Тогда на сервере правки в конфиги pam вносить не нужно - и у пользователей не будет возможности авторизоваться непосредственно на сервере. Но поскольку пользователи должны быть в системе (пусть и без возможности входа), иные настройки (sssd, nsswitch.conf) необходимо сделать. | ||
===Запуск служб=== | ===Запуск служб=== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
systemctl enable --now sssd | systemctl enable --now sssd | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Проверка аутентификации=== | ===Проверка аутентификации=== | ||
Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1.<syntaxhighlight lang="bash"> | Проверка ldap. Эта команда должна вывести информацию о пользователе teacher1. | ||
<syntaxhighlight lang="bash"> | |||
getent passwd teacher1 | getent passwd teacher1 | ||
</syntaxhighlight> | |||
Следующая команда должна вывести информацию о пользователе, включая группы, в состав которых он входит. | |||
<syntaxhighlight lang="bash"> | |||
id teacher1 | id teacher1 | ||
</syntaxhighlight> | |||
Получение билета Kerberos для пользователя. Выполните эту команду на клиенте (должен быть настроен файл /etc/krb5.conf). Нужно ввести пароль пользователя teacher1. | |||
<syntaxhighlight lang="bash"> | |||
kinit teacher1 | kinit teacher1 | ||
</syntaxhighlight> | |||
</syntaxhighlight>Выведите информацию о полученных билетах.<syntaxhighlight lang="bash"> | Выведите информацию о полученных билетах. | ||
<syntaxhighlight lang="bash"> | |||
klist | klist | ||
</syntaxhighlight>Удалите полученный билет командой<syntaxhighlight lang="bash"> | </syntaxhighlight> | ||
Удалите полученный билет командой | |||
<syntaxhighlight lang="bash"> | |||
kdestroy | kdestroy | ||
</syntaxhighlight>Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте.<syntaxhighlight lang="bash"> | </syntaxhighlight> | ||
Попробуйте переключиться в пользователя teacher1, находясь под пользователем root на клиенте. | |||
<syntaxhighlight lang="bash"> | |||
su - teacher1 | su - teacher1 | ||
</syntaxhighlight> | |||
Затем попробуйте переключиться в пользователя teacher1 из другой учётной записи (не root), со вводом пароля. | |||
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в графической оболочке. | |||
Наконец. попробуйте войти в систему под пользователем teacher1 в текстовой консоли и в | |||
Если это получилось, переходите к настройке хранения домашних каталогов в сети. | Если это получилось, переходите к настройке хранения домашних каталогов в сети. | ||
| Строка 530: | Строка 567: | ||
=== Установка пакетов === | === Установка пакетов === | ||
Установите нужные пакеты. | |||
Установите нужные пакеты.<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> | ||
=== Включение и запуск служб === | === Включение и запуск служб === | ||
Включите и запустите нужные службы.<syntaxhighlight lang="bash"> | Включите и запустите нужные службы. | ||
<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> | </syntaxhighlight> | ||
=== Настройка idmapd === | === Настройка idmapd === | ||
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена.<syntaxhighlight> | Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain, указав имя сетевого домена. | ||
<syntaxhighlight lang="ini"> | |||
[General] | [General] | ||
Domain = sch179.local | Domain = sch179.local | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Создание ключей Kerberos === | === Создание ключей Kerberos === | ||
На сервере необходимо создать ключи kerberos, которые | На сервере необходимо создать ключи kerberos, которые будут использоваться в протоколе NFS. Эти ключи необходимо скопировать на компьютеры клиентов. | ||
От имени пользователя root нужно запустить на сервере команду <syntaxhighlight lang="bash"> | От имени пользователя root нужно запустить на сервере команду | ||
<syntaxhighlight lang="bash"> | |||
kadmin.local | kadmin.local | ||
</syntaxhighlight> | |||
</syntaxhighlight>В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера). | В консоли kadmin.local нужно ввести команды (не забудьте заменить server.sch179.local на имя своего сервера). | ||
Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab. | Первая команда создаёт на сервере принципал для службы nfs сервера server.sch179.local, без пароля, со случайным ключом. Вторая команда экспортирует ключ этого принципала в файл /etc/krb5.keytab. | ||
<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 | ||
quit | quit | ||
</syntaxhighlight> | |||
</syntaxhighlight>Проверим, что ключи были созданы и экспортированы, для этого введите команду от root<syntaxhighlight lang="bash"> | Проверим, что ключи были созданы и экспортированы, для этого введите команду от root | ||
<syntaxhighlight lang="bash"> | |||
klist -k /etc/krb5.keytab | klist -k /etc/krb5.keytab | ||
</syntaxhighlight> | |||
</syntaxhighlight>Вывод будет таким.<syntaxhighlight> | Вывод будет таким. | ||
<syntaxhighlight> | |||
Keytab name: FILE:/etc/krb5.keytab | Keytab name: FILE:/etc/krb5.keytab | ||
KVNO Principal | KVNO Principal | ||
| Строка 575: | Строка 614: | ||
2 nfs/server.sch179.local@SCH179.LOCAL | 2 nfs/server.sch179.local@SCH179.LOCAL | ||
2 nfs/server.sch179.local@SCH179.LOCAL | 2 nfs/server.sch179.local@SCH179.LOCAL | ||
</syntaxhighlight> | |||
'''Файл с ключами /etc/krb5.keytab необходимо будет скопировать на все клиенты для шифрования протокола nfs. Без этого ключа, подключение клиента к серверу будет невозможным.''' | |||
=== Экспорт /home на сервере === | === Экспорт /home на сервере === | ||
Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку<syntaxhighlight> | Теперь настроим экспорт файловой системы /home сервера по сети. Для этого в файле /etc/exports напишем строку | ||
<syntaxhighlight> | |||
/home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check) | /home 192.168.0.0/16(rw,sec=krb5p,async,no_subtree_check) | ||
</syntaxhighlight> | |||
</syntaxhighlight>192.168.0.0/16 - сеть, из которой разрешён доступ | Здесь 192.168.0.0/16 - сеть, из которой разрешён доступ. Замените его на адрес своей локальной сети. | ||
krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены). | krb5p - уровень безопасности Kerberos, означающий полное шифрование всех передаваемых данных. Это наиболее безопасно, но создаёт дополнительную нагрузку на процессор. Для уменьшения нагрузки можно использовать варианты без шифрования (но тогда возможен перехват данных): krb5 (только авторизация, без шифрования передаваемых данных) или krb5i (авторизация и проверка контрольных сумм данных для защиты от подмены). | ||
| Строка 589: | Строка 631: | ||
Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён. | Обратите внимание на параметр asynс, без него сеть будет работать медленно. Он должен быть обязательно включён. | ||
Примените изменения командой<syntaxhighlight lang="bash"> | Примените изменения командой | ||
<syntaxhighlight lang="bash"> | |||
exportfs -ra | exportfs -ra | ||
</syntaxhighlight> | |||
</syntaxhighlight>Проверьте, что система экспортируется, выполнив команду <syntaxhighlight lang="bash"> | Проверьте, что система экспортируется, выполнив команду | ||
<syntaxhighlight lang="bash"> | |||
exportfs -v | exportfs -v | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 600: | Строка 644: | ||
=== Установка пакетов === | === Установка пакетов === | ||
Установите нужные пакеты.<syntaxhighlight lang="bash"> | Установите нужные пакеты. | ||
<syntaxhighlight lang="bash"> | |||
dnf install nfs-utils krb5-workstation | dnf install nfs-utils krb5-workstation | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 608: | Строка 652: | ||
Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл. | Скопируйте файл с ключами /etc/krb5.keytab с сервера на клиентскую машину. Установите владельца root:root и права доступа 600 на этот файл. | ||
Проверьте наличие ключей в этом файле командой<syntaxhighlight lang="bash"> | Проверьте наличие ключей в этом файле командой | ||
<syntaxhighlight lang="bash"> | |||
klist -k /etc/krb5.keytab | klist -k /etc/krb5.keytab | ||
</syntaxhighlight> | </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> | </syntaxhighlight> | ||
=== Настройка idmapd === | === Настройка idmapd === | ||
Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. <syntaxhighlight lang="ini"> | Откройте файл /etc/idmapd.conf и в секцию [General] добавьте параметр Domain. | ||
<syntaxhighlight lang="ini"> | |||
[General] | [General] | ||
Domain = sch179.local | Domain = sch179.local | ||
</syntaxhighlight> | |||
Также нужно убедиться, что служба nfs-idmapd запущена и на сервере, и на клиенте. Для этого после перезагрузки выполните команду. | |||
<syntaxhighlight lang="bash"> | |||
systemctl status nfs-idmapd | systemctl status nfs-idmapd | ||
</syntaxhighlight> | |||
</syntaxhighlight>На сервере скорее всего вы увидите, что служба работает - в выводе будет строка "<code>Active: active (running)</code>". А на клиенте - не работает ("<code>Active: inactive (dead)</code>"). | На сервере скорее всего вы увидите, что служба работает - в выводе будет строка "<code>Active: active (running)</code>". А на клиенте - не работает ("<code>Active: inactive (dead)</code>"). | ||
Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd. | Это связано с тем, что на сервере запущена служба nfs-server, а на клиенте - только nfs-client, которая не включает по умолчанию nfs-ifmapd. | ||
| Строка 633: | Строка 681: | ||
Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте). | Нам нужно добавить автозапуск nfs-idmapd на клиенте при достижении цели nfs-client в настройках systemd. Но это нельзя сделать при помощи systemctl enable nfs-idmapd (попробуйте). | ||
Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст.<syntaxhighlight lang="ini"> | Для этого нужно создать на клиенте каталог /etc/systemd/system/nfs-client.target.d и записать в файл /etc/systemd/system/nfs-client.target.d/override.conf следующий текст. | ||
<syntaxhighlight lang="ini"> | |||
[Unit] | [Unit] | ||
Wants=nfs-idmapd.service | Wants=nfs-idmapd.service | ||
After=nfs-idmapd.service | After=nfs-idmapd.service | ||
</syntaxhighlight> | |||
Перезагрузите клиентский компьютер и проверьте, что служба nfs-idmapd запустилась после перезагрузки. | |||
Отсутствие работающей службы nfs-idmapd приводит к медленной работе сетевых дисков (длительный вход в систему, длительное открытие домашнего каталога) при сохранении общей работоспособности. | |||
Отсутствие работающей службы nfs-idmapd приводит к медленной работе | |||
=== Проверка монтирования файловой системы === | === Проверка монтирования файловой системы === | ||
| Строка 647: | Строка 696: | ||
Выполняйте все последующие действия под пользователем root на клиенте. | Выполняйте все последующие действия под пользователем root на клиенте. | ||
Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя. Этот билет нужно получить командой (выполним её от root).<syntaxhighlight lang="bash"> | Монтирование разделов при помощи NFS+Kerberos требует, чтобы у пользователя был действующий билет Kerberos. Поскольку мы вошли в систему как root, нам нужно получить сначала билет kerberos для какого-нибудь пользователя (например, teacher1). Этот билет нужно получить командой (выполним её от root). | ||
<syntaxhighlight lang="bash"> | |||
kinit teacher1 | kinit teacher1 | ||
</syntaxhighlight>Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду <syntaxhighlight lang="bash"> | </syntaxhighlight> | ||
Понадобится ввести пароль пользователя teacher1. Убедитесь, что билет получен, введя команду | |||
<syntaxhighlight lang="bash"> | |||
klist | klist | ||
</syntaxhighlight> | |||
</syntaxhighlight>Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду.<syntaxhighlight lang="bash"> | Имея билет, можно выполнить команду монтирования. Создайте на компьютере точку для монтирования, например, /root/home. Затем дайте команду. | ||
<syntaxhighlight lang="bash"> | |||
mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home | mount -t nfs -o sec=krb5p server.sch179.local:/home /root/home | ||
</syntaxhighlight> | |||
Эта команда подмонтирует раздел /home с сервера в каталог /root/home на клиенте. При доступе к файлам в этом каталоге ваши права будут соответствовать тому билету, который у вас был, то есть у вас должен быть доступ к каталогу home/teacher1, но не должно быть доступа к каталогам других пользователей. | |||
==Автомонтирование домашних каталогов при помощи autofs== | |||
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. При этом после входа пользователя (например, student1) в систему будет монтироваться только его домашний каталог (/home/student1), но не домашние каталоги других пользователей. | |||
== Автомонтирование домашних каталогов при помощи autofs == | |||
Поскольку монтирование раздела через NFS+Kerberos требует получение билета, а получение билета происходит при авторизации в системе, домашние каталоги пользователей могут монтироваться только после авторизации в системе. Настроим на клиенте autofs, чтобы домашний каталог пользователя монтировался автоматически после входа. | |||
Настройка выполняется на клиенте. | Настройка выполняется на клиенте. | ||
Установим | Установим пакет autofs. | ||
<syntaxhighlight lang="bash"> | |||
sudo dnf install autofs | sudo dnf install autofs | ||
</syntaxhighlight> | |||
</syntaxhighlight>Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку<syntaxhighlight> | Создадим файл /etc/autofs/auto.master.d/home.autofs и запишем в него строку | ||
<syntaxhighlight> | |||
/home /etc/auto.home --timeout=60 | /home /etc/auto.home --timeout=60 | ||
</syntaxhighlight> | |||
</syntaxhighlight>Создадим файл /etc/auto.home и запишем в него строку.<syntaxhighlight> | Создадим файл /etc/auto.home и запишем в него строку. | ||
<syntaxhighlight> | |||
* -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/& | * -sec=krb5p,rsize=1048576,wsize=1048576,hard,noatime,nosuid,timeo=600,retrans=2 server.sch179.local:/home/& | ||
</syntaxhighlight> | |||
</syntaxhighlight>Включим и запустим службу autofs<syntaxhighlight lang="bash"> | Включим и запустим службу autofs | ||
<syntaxhighlight lang="bash"> | |||
systemctl enable --now autofs | systemctl enable --now autofs | ||
</syntaxhighlight> | |||
==Включение дисковых квот== | |||
На сервере необходимо включить дисковые квоты для пользователей на разделе /home. | |||
Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках. | Пусть раздел, на котором хранится /home, находится на устройстве /dev/sda4. Измените это имя в дальнейших настройках. | ||
=== Файловая система ext4 === | === Файловая система ext4 === | ||
Установите пакет quota<syntaxhighlight lang="bash"> | Установите пакет quota | ||
<syntaxhighlight lang="bash"> | |||
dnf install quota | dnf install quota | ||
</syntaxhighlight> | |||
</syntaxhighlight>Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так.<syntaxhighlight> | Добавьте в файл /etc/fstab опцию usrquota для монтирования нужного раздела. Должно получиться примерно так. | ||
<syntaxhighlight> | |||
/dev/sda4 /home ext4 noatime,usrquota 0 2 | /dev/sda4 /home ext4 noatime,usrquota 0 2 | ||
</syntaxhighlight> | |||
</syntaxhighlight>В вашем файле /etc/fstab вместо /dev/... может быть | В вашем файле /etc/fstab вместо /dev/... может быть указано UUID=... | ||
Отмонтируйте раздел. | |||
Отмонтируйте раздел.<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
umount /home | umount /home | ||
</syntaxhighlight> | |||
</syntaxhighlight>Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.<syntaxhighlight lang="bash"> | Современные ядра Linux поддерживают квоты на уровне файловой системы ext4. Нужно добавить эту возможность в вашу файловую систему. Если у вас старое ядро - квоты будут храниться в специальном файле в корне файловой системы.<syntaxhighlight lang="bash"> | ||
tune2fs -O quota /dev/sda4 | tune2fs -O quota /dev/sda4 | ||
</syntaxhighlight> | |||
</syntaxhighlight>Подмонтируйте раздел<syntaxhighlight lang="bash"> | Подмонтируйте раздел | ||
<syntaxhighlight lang="bash"> | |||
mount /home | mount /home | ||
</syntaxhighlight> | |||
</syntaxhighlight>Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра).<syntaxhighlight lang="bash"> | Создайте записи для хранения квот (в файле или внутри файловой системы, в зависимости от ядра). | ||
<syntaxhighlight lang="bash"> | |||
quotacheck -cum /home | quotacheck -cum /home | ||
</syntaxhighlight> | |||
</syntaxhighlight>Включите квоты на файловой системе.<syntaxhighlight lang="bash"> | Включите квоты на файловой системе.<syntaxhighlight lang="bash"> | ||
quotaon /home | quotaon /home | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Файловая система xfs === | === Файловая система xfs === | ||
В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы.<syntaxhighlight> | В файловой системе xfs поддержка квот уже присутствует. Достаточно только указать опцию в /etc/fstab при монтировании файловой системы. | ||
<syntaxhighlight> | |||
/dev/sda4 /home xfs noatime,usrquota 0 2 | /dev/sda4 /home xfs noatime,usrquota 0 2 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Строка 716: | Строка 777: | ||
# Добавить информацию о пользователе в LDAP. | # Добавить информацию о пользователе в LDAP. | ||
# Создать билет Kerberos. | # Создать билет Kerberos. | ||
# Создать домашний каталог и скопировать туда содержимое /etc/skel. | # Создать домашний каталог и скопировать туда содержимое /etc/skel или аналогичного каталога. | ||
# Установить квоты. | # Установить квоты. | ||
Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin | Для автоматизации этих действий можно использовать [https://github.com/dkirienko/useradmin этот скрипт]. Скрипт находится в разработке. | ||
Этот скрипт позволяет выполнять массовые операции с пользователями. Его лучше запускать под администратором, т.к. создание домашнего каталога пользователя и установка квот требует прав администратора. | |||
Сначала нужно разработать системы назначения логинов и идентификаторов пользователей. Например, в 179 школе действует такая схема. | |||
Каждому учащемуся назначается логин вида s29a_ivanov. Здесь s - первая буква слова student, 29 - год окончания школы, a - буква класса, ivanov - фамилия учащегося. То есть это логин пользователя ivanov из А-класса 2029 года выпуска. Если в классе сть однофамильцы, к фамилии можно добавлять имя или одну букву имени. | |||
Всем пользователям назначаются уникальные идентификаторы. Например, для класса s29a можно выдавать идентификаторы, начинающиеся с 291: 29101, 29102, 29103 и т.д. То есть идентификаторы - пятизначные числа, где первые две цифры означают год выпуска, следующая цифры - буква класса (можно отвести и две цифры, если одной недостаточно), следующие две цифры - номер учащегося в класса. Учащимся класса s29b будут выдаваться идентификаторы 29201, 29202 и т.д. | |||
Также каждому учащемуся нужно сделать пароль. Много случайных паролей можно сгенерировать утилитой pwgen. | |||
Подготовьте текстовый файл с новыми пользователями. Удобно создавать отдельный файл на каждый класс. Файл будет выглядеть таким образом: | |||
<syntaxhighlight> | |||
29101 students s29a_bezukhov Безухов Пётр t8Fi5A77 | |||
29102 students s29a_rostova Ростова Наталья LRhevK2O | |||
</syntaxhighlight> | |||
Здесь первое поле - идентификатор пользователя, второе поле - группа, в которую будет добавлен пользователь (мы добавляем всех пользователей в группу students, но можно, например, создавать и отдельную группу для каждого класса), третье поле - логин пользователя, затем - фамилия, имя и пароль пользователя. Поля разделяются пробелами, поэтому в фамилии и имени не должно быть пробелов. Сохраните этот файл, пусть он называется users.txt. | |||
Для работы утилиты useradmin.py необходим конфигурационный файл .useradmin.conf, который должен находиться в домашнем каталоге (например, /root/.useradmin.conf). Запуск утилиты создаст этот файл, если он не существует. Отредактируйте этот файл, задав актуальный адрес вашего сервера, суффикс ваших записей в LDAP, пароли доступа к LDAP и Kerberos (для доступа к Kerberos можно использовать kadmin.local). Установите значения дисковой квоты и путь к каталогу skel, где хранятся файлы, которые будут копироваться в домашний каталог по умолчанию. | |||