ECryptfs та шифрування домашнього каталогу в Linux
Багато хто звертав увагу на пропозицію Ubuntu під час встановлення зашифрувати домашній каталог користувача. Я донедавна завжди його ігнорував з міркувань «хрін знає, що вони там вигадали, розбиратися небажання», але одного разу цікавість пересилила і знайшлася вільна для пізнання цієї таємниці час. Усіх, кому цікаво, запрошую під кат.

Кращий спосіб навчитися чогось - це зробити самостійно. Як піддослідний кролик було вирішено взяти Debian 6.0.3, що опинилася під рукою і не шифрувала домашні каталоги користувачів. На ній весь процес і проводився. Якщо у вас як ОС використовується щось зовсім далеке, гарантій, що процес налаштування буде таким самим - ніяких.
Як це працює
Для організації захисту ваших персональних даних в Ubuntu розробники віддали перевагу eCryptfs — файловій системі, яка працює «поверх» будь-якої іншої звичайної ФС і прозоро шифрує/дешифрує вміст файлів. Криптографічні метадані eCryptfs зберігають у заголовках кожного файлу, таким чином ви можете без проблем переносити будь-який файл між різними системами. Усе це щастя реалізовано лише на рівні ядра Linux, забезпечуючи хороший рівень продуктивності проти FUSE-шифруванням (наприклад, EncFS).
Все, що потрібно для роботи eCryptfs, у всіх сучасних Linux-дистрибутивах є за замовчуванням "з коробки". Якщо ж ядро Linux ви збирали самостійно, переконайтеся, що у вашій збірці присутній необхідний модуль:
Для роботи з eCryptfs нам знадобляться userspace-інструменти, які в Debain/Ubuntu легко встановлюються з пакета:
Монтування eCryptfs
Щоб краще зрозуміти та побачити на практиці, як працює eCryptfs, змонтуємо який-небудькаталог і подивимося, що відбувається насправді. Для початку створимо порожній каталог, який шифруватимемо:
Тепер змонтуємо створений каталог, використовуючи eCryptfs:
Зверніть увагу, що вихідним і цільовим каталогом командіmount вказано той самий каталог. Це дещо «нетрадиційно» для операції монтування, проте цілком допустимо та зручно. Якщо вас це заплутує, ви можете використовувати різні точки з більш осмисленими іменами, як:
Після введення команди вам необхідно ввести пароль для ключа шифрування:
Введіть пароль, не забуваючи про те, щовтрата означатиме неможливість отримання даних! Після введення пароля вам буде запропоновано вибрати алгоритм шифрування, за замовчуванням вибраним AES:
Далі вам необхідно вибрати розмір ключа:
Значення наступної опції дозволяє або забороняє доступ до файлів, які не були зашифровані за допомогою eCrypfs:
Шифрувати чи ні імена файлів:
Далі ви побачите зведення вибраних опцій (їх можна використовувати в опціях монтування в майбутньому):
Якщо ви вперше монтуєте та/або сигнатура цього монтування не збережена в кеші, вас ввічливо попередять про те, що ви могли ввести пароль невірно:
Якщо все ок, можна підтверджувати монтування:
Щоб уникнути у майбутньому появи вищезазначеного попередження, ви можете додати сигнатуру монтування eCryptfs у файл:
Якщо все пройшло успішно, ви отримаєте відповідне повідомлення:
Тепер скопіюємо щось у змонтований каталог:
Подивимося його вміст та розмір:
Тепер відмонтуємо eCryptfs та подивися, як змінився наш файл:
Заглянувши всередину файлу, ви побачите там лише двійкові дані.
pam_ecryptfs
Ще однієюДосить цікавою та корисною штукою, що йде у поставці eCryptfs, є PAM-модульpam_ecryptfs. Викликається цей модуль під час логіна користувача та працює наступним чином. Якщо у домашньому каталозі виявляється файл
/.ecryptfs/wrapped-passphrase, а також файл
/.ecryptfs/auto-mount модуль pam_ecryptfs розшифровує вміст файлу
/.ecryptfs/wrapped-passphrase, використовуючи пароль користувача. Далі розшифрований вміст використовується як пароль при монтуванні каталогу
/Private. Таким чином, користувачеві не потрібно додатково монтувати каталог із особистими зашифрованими даними, все відбувається автоматично. Для того, щоб модуль працював, він повинен бути відповідним чином оголошений у/etc/pam.d/common-auth :
та в /etc/pam.d/common-session:
Зашифрований персональний каталог Private
Щоб користувачам було сухо та комфортно при самостійному створенні Private-каталогів, розробники включили у поставку eCryptfs спеціальний shell-скриптecryptfs-setup-private, який робить всю роботу з підготовки персонального шифрованого сховища:
/Private; шифрує пароль монтування і зберігає його в
/.ecryptfs/wrapped-passphrase;
Працює сценарій дуже просто і при запуску в режимі «за замовчуванням» не потребує додаткових параметрів:
На наступний запит введіть пароль, який використовуєте при аутентифікації в системі:
Після цього вам буде запропоновано ввести пароль, який буде використовуватися при монтуванні. Якщо не заповнювати це поле, пароль буде згенерований автоматично:
Чергове нагадування для забудькуватих:
створенняфайлів, каталогів та тестування:
І, нарешті, повідомлення про те, що тепер достатньо перейти до системи, щоб почати користуватися благами цивілізації:
Все добре, саме час перевірити працездатність нашого нового сховища:
Тепер, коли ви вийдете із системи, модуль pam_ecryptfs автоматично розмонтує точку.
/Private, таким чином залишивши ваші дані у зашифрованому каталозі
/.Private. Якщо ви не хочете, щоб каталог
/Private монтувався та/або розмонтувався автоматично, видаліть відповідно файл
Також майте на увазі, що сценарійecryptfs-setup-private приймає ряд опцій, за допомогою яких ви можете керувати його поведінкою:
Повне шифрування домашнього каталогу
Ідея зберігання критично-важливих даних в окремому каталозі дуже непогана собою, але не позбавлена очевидного недоліку. А саме: ви повинні постійно вибирати, що потрібно шифрувати, а що не потрібно. Ну, або зберігати взагалі все в Private-каталозі, що, м'яко кажучи, не дуже зручно. Замість виділення окремого каталогу, чи не краще зашифрувати взагалі весь домашній каталог? Саме це і пропонує вам Ubuntu під час встановлення, і саме eCryptfs вона для цього використовує!
Якщо ви під час встановлення вибрали опцію, показану на скріншоті на початку статті, то ви вже є щасливим захищеним від ворога користувачем. Якщо ж це не так, але вам дуже хочеться сховати від чужих очей свої дані, у разі чого і ви вже зрозуміли, що eCryptfs — це саме те, що вам потрібно для цього, то немає проблем!
Основна проблема при повному шифруванні домашнього каталогу полягає в тому, що необхідно «винести» каталог із зашифрованими даними за межі точки монтування. Розробники Ubuntu вирішили проблему дуже просто:
/.ecryptfs/Private.mnt і вказує на домашній каталог користувача, тобто в даному випадку на/home/ashep. Геніально та просто!
Щоб позбавити вас необхідності переміщувати файли і налаштовувати вручну всі шляхи та символічні посилання, розробники пропонують shell-сценарійecryptfs-migrate-home, який проробить всю «брудну» роботу за вас. Також розробники попереджають про те, що цей сценарій може зробити ваші дані недоступними, якщо раптом щось піде не так, тому обов'язково зробіть резервну копію перед тим, як запускатимете скрипт! Також перед запуском переконайтеся, що в системі встановлені утилітиrsync таlsof, а також у тому, що на розділі, де знаходиться/home, є достатньо вільного місця.
Сценарій необхідно запускати від root, передавши як параметр логін користувача, який мігрує. Користувач не повинен перебувати в системі, а також від його імені не повинно бути запущено жодного процесу.
Якщо все пройде успішно, то, як вимагає сценарій, користувач, що мігрував, повинен увійти в систему до перезавантаження . Також зверніть увагу, що скрипт залишає копію незашифрованих даних в окремому каталозі (у наведеному прикладі/home/ashep.81yFQbNJ ), який необхідно видалити після того, як користувач визначить, що все пройшло успішно.
Тепер, коли користувач, що мігрував, увійде в систему, його домашній каталог буде змонтований наступним чином:
/.Private є символічним посиланням на каталог за межами домашньої папки: