systemd и crypttab

Knoppix

Модераторы: Warderer, Модераторы разделов

Silender
Сообщения: 23

systemd и crypttab

Сообщение Silender »

В crypttab прописана расшифровка ключем 10ти файлов, находящихся на диске, который монтируется при загрузке с помощью fstab.
В процессе загрузки рандомно запрашивает парольные фразы от некоторых файлов. Некоторые же расшифровывает нормально.

То что генерит юниты для systemd выглядит вменяемо. Юниты создаются одинаковыми и в них прописано ожидать монтирования диска и папки /root с ключом.

Это очередной баг глюченой системд ?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21405
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: systemd и crypttab

Сообщение Bizdelnick »

Показывайте crypttab, fstab и юниты, а то совсем непонятно, о чём речь.

Silender писал(а):
10.05.2015 21:58
ожидать монтирования диска и папки /root

У Вас что, /root отдельно от корня? Так ещё до systemd не рекомендовалось делать. Он для того не в /home находится, чтобы быть всегда доступным.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Silender
Сообщения: 23

Re: systemd и crypttab

Сообщение Silender »

Bizdelnick писал(а):
10.05.2015 23:01
ожидать монтирования диска и папки /root
У Вас что, /root отдельно от корня? Так ещё до systemd не рекомендовалось делать. Он для того не в /home находится, чтобы быть всегда доступным.


/root как обычно, но в юнитах, сгенеренных автоматически (их 10 штук), написано
RequiresMountsFor=/root/keyfile
RequiresMountsFor=/mnt/flash/cryptfile01.img

Вчера решил, что мой баг это именно баг и не лечится. Удалил все из crypttab и попробовал написать юнит с нуля, но ничего вообще не происходит. Никак не узнать, что что то выполняется, какие ошибки и т.д..

Сейчас восстановлю как было, чтобы выложить crypttab и юниты.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21405
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: systemd и crypttab

Сообщение Bizdelnick »

Silender писал(а):
11.05.2015 09:44
RequiresMountsFor=/root/keyfile
RequiresMountsFor=/mnt/flash/cryptfile01.img

Именно так, две отдельных записи? Не уверен, что это правильно (хотя в systemd не силён, так что пусть более сведущие люди меня поправят, если что).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Silender
Сообщения: 23

Re: systemd и crypttab

Сообщение Silender »

Сейчас эксперементирую. Заметил, что нормально отрабатывает, когда в crypttab прописано расшифровать 2 файла (любых из 10ти). Если прописать 3, то рандомно спросит пароль от одного из трех.

Bizdelnick писал(а):
11.05.2015 10:09
Именно так, две отдельных записи?

Да, это копипаста из генеренки. из папки /run/systemd/generator/

Bizdelnick писал(а):
11.05.2015 10:09
Не уверен, что это правильно (хотя в systemd не силён, так что пусть более сведущие люди меня поправят, если что).

Нам послали подставу прямиком из ада)) Учитывая "расторопность" дистрписателей, они эту посылку не разгребут никогда. Все ляжет на пользователей, каждый из которых будет сам заново проходить все грабли.
Спасибо сказали:
Silender
Сообщения: 23

Re: systemd и crypttab

Сообщение Silender »

Bizdelnick писал(а):
10.05.2015 23:01
Показывайте crypttab, fstab и юниты, а то совсем непонятно, о чём речь.


crypttab

Код: Выделить всё

sda2_crypt UUID=405f5371-01c6-439f-9920-645a723fbf0a none luks
cf01 /mnt/flash/cryptedfile01.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf02 /mnt/flash/cryptedfile02.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf03 /mnt/flash/cryptedfile03.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf04 /mnt/flash/cryptedfile04.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf05 /mnt/flash/cryptedfile05.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf06 /mnt/flash/cryptedfile06.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf07 /mnt/flash/cryptedfile07.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf08 /mnt/flash/cryptedfile08.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf09 /mnt/flash/cryptedfile09.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64
cf10 /mnt/flash/cryptedfile10.img /root/keyfile size=512,hash=sha512,cipher=aes-xts-plain64


fstab

Код: Выделить всё

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/sda2_crypt /               btrfs   noatime,nodiratime,compress,noacl,discard,nobarrier,nodatacow,ssd 0       1
# /boot was on /dev/sda3 during installation
UUID=1e538bbf-1871-4bba-a30b-f0083f58462e /boot           ext2    defaults        0       2
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
UUID=21DB-7487 /mnt/flash               vfat   defaults 0       1


Юниты

/run/systemd/generator/cf01.d

Код: Выделить всё

# Automatically generated by systemd-cryptsetup-generator

[Unit]
JobTimeoutSec=0

/run/systemd/generator/cryptsetup.target.requires/@systemd-cryptsetup@cf01.service

Код: Выделить всё

# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)
SourcePath=/etc/crypttab
DefaultDependencies=no
Conflicts=umount.target
BindsTo=dev-mapper-%i.device
IgnoreOnIsolate=true
After=systemd-readahead-collect.service systemd-readahead-replay.service cryptsetup-pre.target
Before=cryptsetup.target
RequiresMountsFor=/root/keyfile
RequiresMountsFor=/mnt/flash/cryptedfile01.img

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/lib/systemd/systemd-cryptsetup attach 'cf01' '/mnt/flash/cryptedfile01.img' '/root/keyfile' 'size=512,hash=sha512,cipher=aes-xts-plain64'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'cf01'


/run/systemd/generator/dev-mapper-cf01.device.requires/@systemd-cryptsetup@service

Код: Выделить всё

# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)
SourcePath=/etc/crypttab
DefaultDependencies=no
Conflicts=umount.target
BindsTo=dev-mapper-%i.device
IgnoreOnIsolate=true
After=systemd-readahead-collect.service systemd-readahead-replay.service cryptsetup-pre.target
Before=cryptsetup.target
RequiresMountsFor=/root/keyfile
RequiresMountsFor=/mnt/flash/cryptedfile01.img

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/lib/systemd/systemd-cryptsetup attach 'cf01' '/mnt/flash/cryptedfile01.img' '/root/keyfile' 'size=512,hash=sha512,cipher=aes-xts-plain64'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'cf01'


/run/systemd/generator/local-fs.target.requires/@mnt-flash.mount

Код: Выделить всё

# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
Before=local-fs.target
RequiresOverridable=systemd-fsck@dev-disk-by\x2duuid-21DB\x2d11FA.service
After=systemd-fsck@dev-disk-by\x2duuid-21DB\x2d11FA.service

[Mount]
What=/dev/disk/by-uuid/21DB-7487
Where=/mnt/flash
Type=vfat


/run/systemd/generator/mnt-flash-cryptedfile01.img.device.wants/@systemd-cryptsetup@cf01.service

Код: Выделить всё

# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)
SourcePath=/etc/crypttab
DefaultDependencies=no
Conflicts=umount.target
BindsTo=dev-mapper-%i.device
IgnoreOnIsolate=true
After=systemd-readahead-collect.service systemd-readahead-replay.service cryptsetup-pre.target
Before=cryptsetup.target
RequiresMountsFor=/root/keyfile
RequiresMountsFor=/mnt/flash/cryptedfile01.img

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/lib/systemd/systemd-cryptsetup attach 'cf01' '/mnt/flash/cryptedfile01.img' '/root/keyfile' 'size=512,hash=sha512,cipher=aes-xts-plain64'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'cf01'


/run/systemd/generator/mnt-flash.mount

Код: Выделить всё

# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
Before=local-fs.target
RequiresOverridable=systemd-fsck@dev-disk-by\x2duuid-21DB\x2d11FA.service
After=systemd-fsck@dev-disk-by\x2duuid-21DB\x2d11FA.service

[Mount]
What=/dev/disk/by-uuid/21DB-7487
Where=/mnt/flash
Type=vfat


/run/systemd/generator/systemd-cryptsetup@cf01.service

Код: Выделить всё

# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)
SourcePath=/etc/crypttab
DefaultDependencies=no
Conflicts=umount.target
BindsTo=dev-mapper-%i.device
IgnoreOnIsolate=true
After=systemd-readahead-collect.service systemd-readahead-replay.service cryptsetup-pre.target
Before=cryptsetup.target
RequiresMountsFor=/root/keyfile
RequiresMountsFor=/mnt/flash/cryptedfile01.img

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/lib/systemd/systemd-cryptsetup attach 'cf01' '/mnt/flash/cryptedfile01.img' '/root/keyfile' 'size=512,hash=sha512,cipher=aes-xts-plain64'
ExecStop=/lib/systemd/systemd-cryptsetup detach 'cf01'
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21405
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: systemd и crypttab

Сообщение Bizdelnick »

А если попробовать прописать в одну строчку?

Код: Выделить всё

RequiresMountsFor=/root/keyfile /mnt/flash/cryptedfile01.img
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Silender
Сообщения: 23

Re: systemd и crypttab

Сообщение Silender »

А это не так просто сделать. В /run/systemd/generator/ что либо править бесполезно, т.к. там все перезаписывается в процессе загрузки, а если скопировать юниты в /etc/systemd/system, то они не запускаются, непонятно почему.

Я то знаю, что нужно делать. Нужно, чтобы процесс обработки десяти файлов выполнялся последовательно, а не параллельно. И чтобы занимался этим нормальный /sbin/cryptsetup, а не этот /lib/systemd/systemd-cryptsetup.

Для этого нужно написать юнит, который бы выполнял мой баш скрипт, но как это сделать, если самописные юниты не работают ?
Спасибо сказали:
Kopilov
Сообщения: 957
ОС: [K]Ubuntu, Debian

Re: systemd и crypttab

Сообщение Kopilov »

Silender писал(а):
11.05.2015 13:04
Я то знаю, что нужно делать. Нужно, чтобы процесс обработки десяти файлов выполнялся последовательно, а не параллельно.

То есть, надо выкинуть Systemd?! :D
Спасибо сказали:
Silender
Сообщения: 23

Re: systemd и crypttab

Сообщение Silender »

Ампутация, это крайняя мера. Вообще все что требуется от дистра с системд, это иметь возможность в определенные точки загрузки вставлять свои скрипты и ставить системные и не очень сервисы в зависимости от выполнения этих скриптов. Надеяться на дистрописателей глупо, они никогда ничего не сделают.

Вот например мне нужно в определенный момент выполнить присоединение шифрованных файлов (скриптом это элементарно), а после загрузить сервис libvirt. Как это сделать ?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21405
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: systemd и crypttab

Сообщение Bizdelnick »

Silender писал(а):
11.05.2015 14:32
Надеяться на дистрописателей глупо, они никогда ничего не сделают.

Если багрепорт не отправить — точно не сделают, потому что и не узнают, что что-то надо сделать.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: systemd и crypttab

Сообщение Rootlexx »

Bizdelnick писал(а):
11.05.2015 10:09
Silender писал(а):
11.05.2015 09:44
RequiresMountsFor=/root/keyfile
RequiresMountsFor=/mnt/flash/cryptfile01.img

Именно так, две отдельных записи? Не уверен, что это правильно (хотя в systemd не силён, так что пусть более сведущие люди меня поправят, если что).

Это правильно, одинаковые директивы объединяются (за исключением случаев, описанных в документации).

Silender писал(а):
11.05.2015 10:33
Сейчас эксперементирую. Заметил, что нормально отрабатывает, когда в crypttab прописано расшифровать 2 файла (любых из 10ти). Если прописать 3, то рандомно спросит пароль от одного из трех.

Может, проблемы с флешкой, не справляющейся с одновременным доступом нескольких процессов? Есть что-нибудь в dmesg?

Silender писал(а):
11.05.2015 13:04
А это не так просто сделать. В /run/systemd/generator/ что либо править бесполезно, т.к. там все перезаписывается в процессе загрузки, а если скопировать юниты в /etc/systemd/system, то они не запускаются, непонятно почему.

Какие именно юниты вы копируете? Что в systemctl status для этих юнитов?
Silender писал(а):
11.05.2015 13:04
Я то знаю, что нужно делать. Нужно, чтобы процесс обработки десяти файлов выполнялся последовательно, а не параллельно. И чтобы занимался этим нормальный /sbin/cryptsetup, а не этот /lib/systemd/systemd-cryptsetup.

Для этого нужно написать юнит, который бы выполнял мой баш скрипт, но как это сделать, если самописные юниты не работают ?

Рассказывайте, что написали да что делали.

Silender писал(а):
11.05.2015 14:32
Ампутация, это крайняя мера. Вообще все что требуется от дистра с системд, это иметь возможность в определенные точки загрузки вставлять свои скрипты и ставить системные и не очень сервисы в зависимости от выполнения этих скриптов. Надеяться на дистрописателей глупо, они никогда ничего не сделают.

Вот например мне нужно в определенный момент выполнить присоединение шифрованных файлов (скриптом это элементарно), а после загрузить сервис libvirt. Как это сделать ?

Указать, что сервис libvirt должен запускаться после сервиса, выполняющего присоединение шифрованных файлов, директивой After в первом или Before в последнем.
Но давайте сначала попробуем разобраться в причинах происходящего. Покажите вывод # systemctl status systemd-cryptsetup@\* и # journalctl -u systemd-cryptsetup@\*. Если после загрузки выполнить рестарт проблемных юнитов, присоединение происходит нормально?
Спасибо сказали: