ΠΡΡΠΎΡΠΈΡ Π½Π°ΡΠ°Π»Π°ΡΡ Π΄Π°Π²Π½ΠΎ, Π΅ΡΠ΅ ΠΏΡΠΈ Π²ΡΡ
ΠΎΠ΄Π΅ Centos 7 (RHEL 7). ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ°Ρ
Ρ Centos 6, ΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π΄ΠΈΡΠΊΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ USB ΡΠ»Π΅ΡΠΊΠΈ Ρ Π½ΡΠΆΠ½ΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΈ Π²ΡΡ
ΠΎΠ΄Π΅ 7-ΠΊΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π²ΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠ°ΠΊ Π²Ρ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°ΠΉΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅ dracut ΠΊ sysvinit Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅Π·Π°ΠΌΡΡΠ»ΠΎΠ²Π°ΡΠΎΠΉ ΡΡΡΠΎΡΠΊΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅: echo ‘omit_dracutmodules+=" systemd "’ > /etc/dracut.conf.d/luks-workaround.conf
Π§ΡΠΎ ΡΡΠ°Π·Ρ Π»ΠΈΡΠ°Π»ΠΎ Π½Π°Ρ Π²ΡΠ΅ΠΉ ΠΏΡΠ΅Π»Π΅ΡΡΠΈ systemd β Π±ΡΡΡΡΡΠΉ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΡΠ»ΡΠΆΠ±, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠΎΠ· ΠΈ Π½ΡΠ½Π΅ ΡΠ°ΠΌ:
ΠΠ΅ Π΄ΠΎΠΆΠ΄Π°Π²ΡΠΈΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Ρ ΡΠ΄Π΅Π»Π°Π» Π΅Π³ΠΎ Π΄Π»Ρ ΡΠ΅Π±Ρ ΡΠ°ΠΌ, Π° ΡΠ΅ΠΏΠ΅ΡΡ Π΄Π΅Π»ΡΡΡ ΠΈ Ρ ΠΎΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΡΡΡΡ, ΠΊΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠΈΡΠ°ΠΉΡΠ΅ Π΄Π°Π»ΡΡΠ΅.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Systemd, ΠΊΠΎΠ³Π΄Π° Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠ°Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Centos 7 Π½Π΅ Π²ΡΠ·Π²Π°Π» Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΡΠΌΠΎΡΠΈΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΡΠΎΠΌΠ΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ, Ρ Π½Π΅ ΠΏΠΎΡΡΠ²ΡΡΠ²ΠΎΠ²Π°Π» Π²Π½Π°ΡΠ°Π»Π΅ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΡ. ΠΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ systemd ΠΌΠ½Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΡΡ, Π½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΏΠΎΡΡΠ΅Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ dracut Π½Π΅ ΠΎΡΠΎΠ±ΠΎ ΡΠ΄Π΅Π»ΡΠ»ΠΈ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ systemd ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΈΡΠΊΠΎΠ². Π ΡΠ΅Π»ΠΎΠΌ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ ΠΎΡ Π΄ΠΈΡΠΊΠ° ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΡΡΠΊΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° β Π½Π΅ ΡΠ°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π½ΡΡΠΈΠ΅.
ΠΠΏΡΠΎΠ±ΠΎΠ²Π°Π² ΠΊΡΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ ΠΈ ΡΡΠΈΡΠ°Π²ΡΠΈΡΡ ΠΌΠ°Π½ΡΠ°Π»ΠΎΠΌ Ρ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ systemd Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Ρ USB, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΡΡΠ½ΠΎΠΉ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ° Ρ ΠΊΠ»ΡΡΠ΅ΠΌ Π½Π° USB Π΄ΠΈΡΠΊΠ΅, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠ°ΠΌ USB Π΄ΠΈΡΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π΅Π³ΠΎ UUID, LABEL Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π». ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠ΅ Ρ ΡΠ΅Π±Ρ Π±ΡΠ»ΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΈΡΠΎΠ³Π΅ Ρ ΠΏΠΎΠ³ΡΡΠ·ΠΈΠ»ΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ, ΠΏΡΠΎΠΆΠ΄Π°Π² Π±Π΅Π· ΠΌΠ°Π»ΠΎΠ³ΠΎ 7 Π»Π΅Ρ, Ρ ΠΏΠΎΠ½ΡΠ» β Π½ΠΈΠΊΡΠΎ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΊ dracut ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ, Π½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠΈΠΌ ΡΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ. ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ Π·Π° ΡΡΠ΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Ρ Π·Π°ΠΏΡΡΠΊΠ° systemd ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ Ρ ΠΎΠ΄ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π΅ ΡΠ°ΠΊ ΠΈ Π»Π΅Π³ΠΊΠΎ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ dracut ΠΏΠΎΡΡΠ½ΡΠ»Π° Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΊΡΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½ΡΠΎΠ² Ρ ΡΠΌΠΎΠ³ ΡΠ΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ.
ΠΠ°ΠΊ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Π ΠΎΡΠ½ΠΎΠ²Π΅ Π»Π΅ΠΆΠΈΡ ΡΡΠΈ ΡΠ½ΠΈΡΠ°:
- luks-auto-key.service β ΠΈΡΠ΅Ρ Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»ΠΈ Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ Π΄Π»Ρ LUKS
- luks-auto.target β Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠ½ΠΈΡΠΎΠ² systemd-cryptsetup
- luks-auto-clean.service β ΠΎΡΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ luks-auto-key.service
Π luks-auto-generator.sh β ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ systemd ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ½ΠΈΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΄ΡΠ°. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ½ΠΈΡΡ fstab ΠΈ Ρ.ΠΏ.
luks-auto-generator.sh
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ drop-in.conf ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ systemd-cryptsetup, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΈΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ luks-auto.target.
luks-auto-key.service ΠΈ luks-auto-key.sh
ΠΡΠΎΡ ΡΠ½ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΊΡΠΈΠΏΡ luks-auto-key.sh, ΠΊΠΎΡΠΎΡΡΠΉ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΊΠ»ΡΡΠ°Ρ rd.luks.*, Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π½ΠΎΡΠΈΡΠ΅Π»ΠΈ Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΊΠ»ΡΡΠΈ ΠΈΠ· Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ΄Π°Π»ΡΠ΅Ρ luks-auto-clean.service.
ΠΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ:
/usr/lib/dracut/modules.d/99luks-auto/module-setup.sh
#!/bin/bash
check () {
if ! dracut_module_included "systemd"; then
"luks-auto needs systemd in the initramfs"
return 1
fi
return 255
}
depends () {
echo "systemd"
return 0
}
install () {
inst "$systemdutildir/systemd-cryptsetup"
inst_script "$moddir/luks-auto-generator.sh" "$systemdutildir/system-generators/luks-auto-generator.sh"
inst_script "$moddir/luks-auto-key.sh" "/etc/systemd/system/luks-auto-key.sh"
inst_script "$moddir/luks-auto.sh" "/etc/systemd/system/luks-auto.sh"
inst "$moddir/luks-auto.target" "${systemdsystemunitdir}/luks-auto.target"
inst "$moddir/luks-auto-key.service" "${systemdsystemunitdir}/luks-auto-key.service"
inst "$moddir/luks-auto-clean.service" "${systemdsystemunitdir}/luks-auto-clean.service"
ln_r "${systemdsystemunitdir}/luks-auto.target" "${systemdsystemunitdir}/initrd.target.wants/luks-auto.target"
ln_r "${systemdsystemunitdir}/luks-auto-key.service" "${systemdsystemunitdir}/initrd.target.wants/luks-auto-key.service"
ln_r "${systemdsystemunitdir}/luks-auto-clean.service" "${systemdsystemunitdir}/initrd.target.wants/luks-auto-clean.service"
}
/usr/lib/dracut/modules.d/99luks-auto/luks-auto-generator.sh
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
. /lib/dracut-lib.sh
SYSTEMD_RUN='/run/systemd/system'
CRYPTSETUP='/usr/lib/systemd/systemd-cryptsetup'
TOUT=$(getargs rd.luks.key.tout)
if [ ! -z "$TOUT" ]; then
mkdir -p "${SYSTEMD_RUN}/luks-auto-key.service.d"
cat > "${SYSTEMD_RUN}/luks-auto-key.service.d/drop-in.conf" <<EOF
[Service]
Type=oneshot
ExecStartPre=/usr/bin/sleep $TOUT
EOF
fi
mkdir -p "$SYSTEMD_RUN/luks-auto.target.wants"
for argv in $(getargs rd.luks.uuid -d rd_LUKS_UUID); do
_UUID=${argv#luks-}
_UUID_ESC=$(systemd-escape -p $_UUID)
mkdir -p "${SYSTEMD_RUN}/systemd-cryptsetup@luksx2d${_UUID_ESC}.service.d"
cat > "${SYSTEMD_RUN}/systemd-cryptsetup@luksx2d${_UUID_ESC}.service.d/drop-in.conf" <<EOF
[Unit]
After=luks-auto.target
ConditionPathExists=!/dev/mapper/luks-${_UUID}
EOF
cat > "${SYSTEMD_RUN}/luks-auto@${_UUID_ESC}.service" <<EOF
[Unit]
Description=luks-auto Cryptography Setup for %I
DefaultDependencies=no
Conflicts=umount.target
IgnoreOnIsolate=true
Before=luks-auto.target
BindsTo=dev-disk-byx2duuid-${_UUID_ESC}.device
After=dev-disk-byx2duuid-${_UUID_ESC}.device luks-auto-key.service
Before=umount.target
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/etc/systemd/system/luks-auto.sh ${_UUID}
ExecStop=$CRYPTSETUP detach 'luks-${_UUID}'
Environment=DRACUT_SYSTEMD=1
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
EOF
ln -fs ${SYSTEMD_RUN}/luks-auto@${_UUID_ESC}.service $SYSTEMD_RUN/luks-auto.target.wants/luks-auto@${_UUID_ESC}.service
done
/usr/lib/dracut/modules.d/99luks-auto/luks-auto-key.service
[Unit]
Description=LUKS AUTO key searcher
After=cryptsetup-pre.target
Before=luks-auto.target
DefaultDependencies=no
[Service]
Environment=DRACUT_SYSTEMD=1
Type=oneshot
ExecStartPre=/usr/bin/sleep 1
ExecStart=/etc/systemd/system/luks-auto-key.sh
RemainAfterExit=true
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console
/usr/lib/dracut/modules.d/99luks-auto/luks-auto-key.sh
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
export DRACUT_SYSTEMD=1
. /lib/dracut-lib.sh
MNT_B="/tmp/luks-auto"
ARG=$(getargs rd.luks.key)
IFS=$':' _t=(${ARG})
KEY=${_t[0]}
F_FIELD=''
F_VALUE=''
if [ ! -z $KEY ] && [ ! -z ${_t[1]} ];then
IFS=$'=' _t=(${_t[1]})
F_FIELD=${_t[0]}
F_VALUE=${_t[1]}
F_VALUE="${F_VALUE%"}"
F_VALUE="${F_VALUE#"}"
fi
mkdir -p $MNT_B
finding_luks_keys(){
local _DEVNAME=''
local _UUID=''
local _TYPE=''
local _LABEL=''
local _MNT=''
local _KEY="$1"
local _F_FIELD="$2"
local _F_VALUE="$3"
local _RET=0
blkid -s TYPE -s UUID -s LABEL -u filesystem | grep -v -E -e "TYPE=".*_member"" -e "TYPE="crypto_.*"" -e "TYPE="swap"" | while IFS=$'' read -r _line; do
IFS=$':' _t=($_line);
_DEVNAME=${_t[0]}
_UUID=''
_TYPE=''
_LABEL=''
_MNT=''
IFS=$' ' _t=(${_t[1]});
for _a in "${_t[@]}"; do
IFS=$'=' _v=(${_a});
temp="${_v[1]%"}"
temp="${temp#"}"
case ${_v[0]} in
'UUID')
_UUID=$temp
;;
'TYPE')
_TYPE=$temp
;;
'LABEL')
_LABEL=$temp
;;
esac
done
if [ ! -z "$_F_FIELD" ];then
case $_F_FIELD in
'UUID')
[ ! -z "$_F_VALUE" ] && [ "$_UUID" != "$_F_VALUE" ] && continue
;;
'LABEL')
[ ! -z "$_F_VALUE" ] && [ "$_LABEL" != "$_F_VALUE" ] && continue
;;
*)
[ "$_DEVNAME" != "$_F_FIELD" ] && continue
;;
esac
fi
_MNT=$(findmnt -n -o TARGET $_DEVNAME)
if [ -z "$_MNT" ]; then
_MNT=${MNT_B}/KEY-${_UUID}
mkdir -p "$_MNT" && mount -o ro "$_DEVNAME" "$_MNT"
_RET=$?
else
_RET=0
fi
if [ "${_RET}" -eq 0 ] && [ -f "${_MNT}/${_KEY}" ]; then
cp "${_MNT}/${_KEY}" "$MNT_B/${_UUID}.key"
info "Found ${_MNT}/${_KEY} on ${_UUID}"
fi
if [[ "${_MNT}" =~ "${MNT_B}" ]]; then
umount "$_MNT" && rm -rfd --one-file-system "$_MNT"
fi
done
return 0
}
finding_luks_keys $KEY $F_FIELD $F_VALUE
/usr/lib/dracut/modules.d/99luks-auto/luks-auto.target
[Unit]
Description=LUKS AUTO target
After=systemd-readahead-collect.service systemd-readahead-replay.service
After=cryptsetup-pre.target luks-auto-key.service
Before=cryptsetup.target
/usr/lib/dracut/modules.d/99luks-auto/luks-auto.sh
#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
export DRACUT_SYSTEMD=1
. /lib/dracut-lib.sh
MNT_B="/tmp/luks-auto"
CRYPTSETUP='/usr/lib/systemd/systemd-cryptsetup'
for i in $(ls -p $MNT_B | grep -v /);do
info "Trying $i on $1..."
$CRYPTSETUP attach "luks-$1" "/dev/disk/by-uuid/\" $MNT_B/$i 'tries=1'
if [ "$?" -eq "0" ]; then
info "Found $i for $1"
exit 0
fi
done
warn "No key found for $1. Fallback to passphrase mode."
/usr/lib/dracut/modules.d/99luks-auto/luks-auto-clean.service
[Unit]
Description=LUKS AUTO key cleaner
After=cryptsetup.target
DefaultDependencies=no
[Service]
Type=oneshot
ExecStart=/usr/bin/rm -rfd --one-file-system /tmp/luks-auto
/etc/dracut.conf.d/luks-auto.conf
add_dracutmodules+=" luks-auto "
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
mkdir -p /usr/lib/dracut/modules.d/99luks-auto/
# ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΡΡ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ
chmod +x /usr/lib/dracut/modules.d/99luks-auto/*.sh
# ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°ΠΉΠ» /etc/dracut.conf.d/luks-auto.conf
# Π Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ initramfs
dracut -f
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΠ» ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ΄ΡΠ° ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ΅ΠΆΠΈΠΌΠ° sysvinit, ΡΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΡΠ°ΡΡΡ
ΠΈΠ½ΡΡΠ°Π»ΡΡΠΈΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com