Systemd змінить роботу вашого домашнього каталогу Linux

Розробники системи systemd пропонують новий підхід до управління домашніми каталогами користувачів. Це не просто невелика зміна, а значна трансформація парадигми для Linux. Розглянемо детальніше, що таке systemd-homed і чого варто очікувати від його впровадження.

Неоднозначна історія

Поява systemd у 2010 році викликала гострі дискусії в Linux-спільноті, розділивши її на кілька таборів. Одні вважали це прогресом, інші — відходом від принципів філософії Unix. Частина користувачів зайняла нейтральну позицію.

Критика була жорсткою, іноді навіть агресивною. Леннарт Поттерінг, інженер-програміст з Red Hat та один із розробників systemd, навіть отримував погрози. З’являлися відео на YouTube та сайти, що закликали до бойкоту systemd.

Співрозробник Поттерінґа, Кей Сіверс, також зазнавав критики, але основний удар прийшовся саме на Поттерінґа.

Попри це, вже через вісім місяців Fedora перейшла на використання systemd. До кінця 2013 року Arch, Debian, Manjaro та Ubuntu також перейшли на цю систему. Відкритий код дає змогу створювати власні відгалуження (форки), якщо щось не подобається. Так виник Devuan, як форк Debian, який відмовився від використання systemd.

Структура домашнього каталогу

У Linux все, що робить користувач, зберігається в каталозі “/home”. Тут розміщені файли даних, зображення, музика та інші особисті каталоги, названі за іменем облікового запису.

Налаштування програм зберігаються у прихованих “точкових” каталогах у домашній папці. Такі файли та каталоги мають назви, що починаються з крапки (.). Зберігаючи налаштування локально, а не в центральному реєстрі, резервна копія домашнього каталогу забезпечує збереження усіх персональних конфігурацій.

При відновленні резервної копії програми, такі як LibreOffice або Thunderbird, шукають свої приховані каталоги і автоматично відновлюють параметри документів, налаштування панелі інструментів та іншу інформацію. Наприклад, Thunderbird знаходить налаштування електронної пошти та повідомлення, усуваючи необхідність налаштовувати все з нуля.

Щоб побачити приховані файли, можна використовувати команду `ls -a`. Команда `ls` покаже звичайні файли та папки, а `ls -a` — всі, включно з прихованими.

Каталог “/home” часто монтують на окремий розділ або жорсткий диск, оскільки він містить найціннішу частину встановленої системи. У разі збою операційної системи, можна перевстановити дистрибутив Linux або перейти на інший, просто перемонтувавши наявний домашній розділ.

Персональні дані

У домашньому каталозі зберігається не лише інформація про файли, а й дані про користувача, включно з деякими атрибутами його цифрової ідентичності. Наприклад, каталог “.ssh” містить інформацію про віддалені з’єднання та згенеровані SSH-ключі.

Інші системні атрибути, такі як ім’я облікового запису, пароль та унікальний ідентифікатор користувача (UID), зберігаються у файлах “/etc/passwd” та “/etc/shadow”. Частину цієї інформації може читати будь-хто, а частину – лише користувачі з правами root.

Ось приклад вмісту файлу “/etc/passwd”:

cat /etc/passwd

Зміни від systemd

Основна мета systemd-homed – створення повністю переносного домашнього каталогу, що зберігає всі дані та цифрові ідентифікатори користувача. UID та інші ідентифікаційні дані зберігатимуться лише у домашньому каталозі.

Домашні каталоги шифруються, забезпечуючи безпеку даних. Вони автоматично розшифровуються при вході в систему та шифруються при виході. Основний метод шифрування — Linux Unified Key Setup (LUKS), але також можливе використання fscrypt.

Вся ідентифікаційна інформація зберігається у файлі JSON у каталозі “~/.identity”, який криптографічно підписано ключем, недоступним для користувача.

Домашні каталоги кожного користувача монтуються на loopback-пристрої, подібно до того, як монтуються образи дисків. Це означає, що домашній каталог відображається як частина загальної файлової системи. За замовчуванням точка монтування має вигляд “/home/$USER.homedir”, де “$USER” – ім’я користувача.

Переваги нового підходу

Завдяки тому, що домашній каталог стає безпечним сховищем усіх даних, його можна використовувати навіть на знімних пристроях. Наприклад, можна переносити каталог між робочим і домашнім комп’ютером або будь-яким іншим комп’ютером з systemd. Поттерінг називає це “повністю портативним домашнім каталогом”. Навіть якщо не використовувати портативний пристрій, це спростить оновлення, міграцію та підвищить безпеку.

Systemd-homed усуває “розпорошені бази даних”, де важлива інформація про користувача розкидана по різних файлах, як “/etc/passwd” та “/etc/shadow”. Ці файли містять інформацію про автентифікацію, хешовані паролі, а також іншу метаінформацію, як-от оболонка за замовчуванням, та GECOS.

За задумом Поттерінґа, ці метадані повинні зберігатися в структурованому вигляді в записі JSON в домашньому каталозі користувача.

Керування новим $HOME

Служба systemd-homed управляється за допомогою нового інструмента командного рядка homectl, доступного за посиланням homectl.

Інструмент дозволяє створювати користувачів та домашні каталоги, встановлювати обмеження на використання дискового простору, встановлювати паролі, блокувати та видаляти облікові записи. Також можна перевіряти користувачів та читати їхні JSON-записи.

Для кожного користувача можна задати часовий пояс та іншу інформацію про місцезнаходження, оболонку за замовчуванням та навіть змінні середовища, які автоматично встановлюються при кожному вході в систему.

У каталозі “/home” можна побачити каталоги, керовані systemd-homed, із суфіксом “.homedir”, наприклад:

/home/dave.homedir

Слід пам’ятати, що це лише точка монтування, а фактичний зашифрований домашній каталог знаходиться в іншому місці.

Обмеження та виклики

Systemd-homed призначений лише для управління обліковими записами з UID, більшим за 1000. Системні облікові записи, як root, daemon, bin, не можуть адмініструватися за допомогою цієї системи. Тому стандартні методи адміністрування користувачів все ще потрібні, а systemd-homed не є універсальним рішенням.

Існує проблема з доступом через SSH. Домашній каталог розшифровується лише після входу в систему. Це означає, що SSH-ключі, що зберігаються в каталозі, недоступні для аутентифікації при віддаленому підключенні. Ця проблема визнана розробниками, але наразі рішення не знайдене.

При перенесенні домашнього каталогу на новий комп’ютер, де UID вже використовується іншим користувачем, новому користувачу автоматично буде призначено новий UID. Звичайно, всі файли доведеться перепризначити на новий UID. Зараз це робиться за допомогою команди chown -R, але розробники працюють над більш елегантним рішенням. Цей підхід не враховує демонів та процесів, що запускаються від імені інших користувачів.

Коли чекати впровадження?

Зміни в коді були затверджені 20 січня 2020 року і включені до збірки systemd 245, що поставлялася з Ubuntu 20.04 у квітні 2020 року.

Щоб перевірити версію systemd, використайте команду:

systemd --version

Проте, команда homectl ще не впроваджена. Ubuntu 20.04 використовує традиційний каталог /home і не використовує systemd-homed.

Рішення про впровадження systemd-homed та homectl приймаються окремими дистрибутивами.

Тож, немає причин для паніки. Оскільки стандартні методи управління користувачами та каталогами залишаються, у нас є вибір.