LINUX.ORG.RU

Странности при разблокировке шифрованного тома при загрузке Debian с Systemd

 , ,


0

4

У меня /home зашифрован с помощью luks.

В crypttab:

home_decrypt /dev/local-vg/home none luks
В fstab:
/dev/mapper/home_decrypt /home ext4 defaults,relatime 0 0
При загрузке системы (Debian Jessie, systemd) у меня спрашивается ключ для расшифровки этого тома. Если я его ввожу, загрузка продолжается и всё хорошо. Если я его не ввожу в течение определённого времени (например, отошёл от компа), то происходит следующее: http://i.imgur.com/Iuy1Vgl.png

Т.е. Systemd говорит, что я перехожу в режим восстановления, но вместо этого ещё раз спрашивается ключ разблокировки. Если я его ввожу, то загрузка проходит немного дальше и прекращается. Нет ни возможности залогиниться на TTY, ни DM не запускается, т.е. всё заканчивается на отображённом этапе.

Если же я подожду ещё одного таймаута, то меня ещё раз спросят о ключе, и, если я его введу, то уже попадаю в emergency mode: http://i.imgur.com/Tgy1ccS.png

Это всё очень огорчает, потому что если я отойду от компа во время загрузки - то придётся ребутать ещё раз, либо ждать таймаутов. Пожалуйста, подскажите - что можно сделать, чтобы всё это как-то более адекватно работало? Ввёл ключ - загружаемся, не ввёл - emergency или же загрузка просто продолжается без всяких плясок (/home не критичен).

Я попробовал в crypttab после luks добавить ",nofail", но это не помогло.

Заранее большое спасибо.

[cast] intelfx[/cast]

★★

Последнее исправление: Norong (всего исправлений: 1)
Ответ на: комментарий от DeadEye

Мне кажется, что это - не выход. Таймаут должен быть, конечно, но мне хотелось бы, чтобы система корректно выпадала в emergency (или грузилась дальше).

Norong ★★
() автор топика
Ответ на: комментарий от DeadEye

Ну тут смотри как выходит - в emergency я выпаду, если один таймаут пропущу, второй пропущу и введу пароль на третий.

Иначе - не попадаю (в случае, если emergency вызван таймаутом).

Norong ★★
() автор топика
Ответ на: комментарий от DeadEye

Я его нормально ввожу, и если я его неправильно ввожу, то проблемы не возникает — я просто ввожу его ещё раз. А так, я не могу даже тыкнуть кнопку на компе и оставить его включаться, приходится разгребать косяки либо ребутом, либо ожиданием таймаутов. Хотелось бы вместо костылей использовать изящные подпорки с барельефами.

Norong ★★
() автор топика

Все благородные доны используют ключи.

anonymous
()

Я не умею в дебиан, к сожалению (и в cryptsetup тоже не умею). Они там используют штатный systemd-шный ask-password или какой-то свой самописный костыль?

intelfx ★★★★★
()
Ответ на: комментарий от intelfx
● systemd-cryptsetup@home_decrypt.service - Cryptography Setup for home_decrypt
   Loaded: loaded (/etc/crypttab)
   Active: active (exited) since Пт 2015-10-23 08:47:30 MSK; 9h ago
     Docs: man:crypttab(5)
           man:systemd-cryptsetup-generator(8)
           man:systemd-cryptsetup@.service(8)
  Process: 401 ExecStart=/lib/systemd/systemd-cryptsetup attach home_decrypt /dev/local-vg/home none luks (code=exited, status=0/SUCCESS)
 Main PID: 401 (code=exited, status=0/SUCCESS)

Вот что я выцепил. Тут содержится ответ на то, что необходимо для решения задачи?

Norong ★★
() автор топика
Ответ на: комментарий от intelfx

Написал багрепорт, но в дебиане, как известно, _не торопятся_.

Сейчас установлю Ubu 15.10 в Виртуалку и протестирую.

Norong ★★
() автор топика
Ответ на: комментарий от intelfx

Всё окей.

Видать, проблема в том, что Дебиан традиционно _не_торопится_.

Norong ★★
() автор топика
Ответ на: комментарий от intelfx

Кажется, я решил проблему, дописав в /etc/crypttab

timeout=1min

Дописал-то дописал, но не совсем понял происходящего. Получается, что через 1 минуту cryptsetup скажет - не, пароль мне не дали. Юнит падает, systemd говорит - опасность, emergency mode.

Если же я ставлю timeout=2min, то повторяется ситуация из заголовка. Выходит, что есть некий таймаут, который лежит между 1min и 2min, и при превышении которого systemd начинает вести себя неадекватно.

Что бы это могло быть, и почему так происходит?

Norong ★★
() автор топика
Ответ на: комментарий от Norong

90 секунд; это может быть либо таймаут ожидания .device-юнита (JobTimeout= на dev-mapper-home_decrypt.device), либо таймаут запуска какого-либо другого юнита (TimeoutStartSec= на systemd-cryptsetup@home_decrypt.service). Скорее всего, первое, т. к. timeout= из crypttab должен по идее отображаться напрямую на второе.

В теперешнем апстриме у .device-юнита таймаут принудительно отключен, но я словил ещё одну багу: если указать в cryptsetup параметр nofail, то оно не будет ждать, пока ты введёшь пароль, а тупо продолжит грузиться дальше поверх строки запроса пароля. Видимо, куда-то After=-зависимость недовоткнута.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Сейчас, с timeout=1min, меня всё устраивает, вроде, но не покидает ощущение корявости решения. Что бы ты посоветовал сделать? Если .device-юниты генерируются динамически, то где необходимо изменить timeout, чтобы получить апстримное поведение? Правильно ли я понимаю, что один из тих таймаутов, которые ты описал, можно изменить с помощью x-systemd.device-timeout=, и если я установлю этот параметр равным нулю, то получу близкое к апстриму поведение?

Norong ★★
() автор топика
Ответ на: комментарий от Norong

Убери таймаут и сделай у себя вот это:

cd /tmp
mkdir dump/{fstab,cryptsetup}
/usr/lib/systemd/system-generators/systemd-fstab-generator dump/fstab{,,}
sudo /usr/lib/systemd/system-generators/systemd-fstab-generator dump/cryptsetup{,,}
tar -c dump | base64 | curl -F 'f:1=<-' ix.io
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от Norong

Команды, блин.

Тестовый запуск двух генераторов юнитов (из fstab и crypttab), потом архив того, что нагенерилось, и аплоад этого архива (закодированного base64) на pastebin-подобный ix.io.

intelfx ★★★★★
()
Ответ на: комментарий от Norong

Ага.

В systemd твоей версии бага: неправильно задаётся отсутствие таймаута ожидания зашифрованного устройства. Вместо файла dev-mapper-home_decrypt.device.d/90-device-timeout.conf создаётся файл home_decrypt.device.d/90-device-timeout.conf.

Ну а юнита с таким именем не существует, потому что имя device-юнитов соответствует полному пути до файла устройства.

Сделать можно примерно следующее:

sudo cp -vrT /run/systemd/generator/home_decrypt.device.d /etc/systemd/system/dev-mapper-home_decrypt.device.d

А ещё стоит зарепортить это в дебиан, указав им на коммит a6fb0dc138d4e7895f8e607493279dbe4df117a1 и багрепорт #84409 (ещё в старой багзилле).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Большое спасибо. Я напишу багрепорт и сделаю так, как ты советуешь.

Norong ★★
() автор топика
Ответ на: комментарий от Norong

Почему не починят? Там всего-то однострочный патч наложить нужно. Если это не починят — то в дебиане реально какие-то тормоза сидят.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Лично моё мнение, как человека сидящего на стейбл ветке. У нас быстро только security фиксы прилетают. Если бага висит в апстриме стабильной ветки - она там провисит оооочень долго. Но как правило подобные баги не критичны из-за особенностей подготовки релиза (неоднократное тестирование, замарозка, закрывание всех багов, етс).

Jefail ★★★★
()
Последнее исправление: Jefail (всего исправлений: 1)
Ответ на: комментарий от Norong

Нет, не починили, а торжественно объявили версию, в которой это уже починено апстримом :)

Дебиан такой дебиан. Там, блин, однострочный тривиальный патч на исходник генератора, причём явно без побочных эффектов, чего там обсуждать-то?..

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Для начала, следует убедиться в том, что он однострочный. Затем - в том, что он тривиальный. Потом - что он является патчем, причём именно на то, на что нужно. И, наконец, надо убедиться, что он явно без побочных эффектов.

Да, эти ребята не торопятся, но мне Debian чем-то близок.

Norong ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.