dracut + systemd + LUKS + usbflash = ืึทื•ื˜ืึธ ื•ืคืฉืœื™ืกืŸ

ื“ื™ ืžืขืฉื” ื”ืื˜ ื–ื™ืš ืื ื’ืขื”ื•ื™ื‘ืŸ ืœืื ื’ ืฆื•ืจื™ืง, ื•ื•ืขืŸ ืขืก ืื™ื– ืืจื•ื™ืกื’ืขืงื•ืžืขืŸ. Centos 7 (RHEL 7). ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ื’ืขื ื•ืฆื˜ ืขื ืงืจื™ืคึผืฉืึทืŸ ืื•ื™ืฃ ื“ื™ืกืงืก ืžื™ื˜ Centos 6, ื–ืขื ืขืŸ ื ื™ืฉื˜ ื’ืขื•ื•ืขืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ ืžื™ื˜ืŸ ืื•ื™ื˜ืืžืื˜ื™ืฉ ืขืคืขื ืขืŸ ื“ื™ืกืงืก ื•ื•ืขืŸ ืžืขืŸ ื”ืื˜ ืคืืจื‘ื•ื ื“ืŸ ื USB ืคืœืขืฉ ื“ืจื™ื™ื•ื• ืžื™ื˜ ื“ื™ ืจื™ื›ื˜ื™ื’ืข ืฉืœื™ืกืœืขืŸ. ืื‘ืขืจ, ืžื™ื˜ ื“ืขืจ ืื•ื™ืกื’ืื‘ืข ืคื•ืŸ โ€‹โ€‹7, ื”ืื˜ ืืœืขืก ืคืœื•ืฆืœื™ื ื’ ืื•ื™ืคื’ืขื”ืขืจื˜ ืืจื‘ืขื˜ืŸ ื•ื•ื™ ืขืจื•ื•ืืจื˜ืขื˜. ื ืœื™ื™ื–ื•ื ื’ ืื™ื– ื’ืขืคื•ื ืขืŸ ื’ืขื•ื•ืืจืŸ ื“ื•ืจืš ืฆื•ืจื™ืงื‘ืจืขื ื’ืขืŸ dracut ืฆื• sysvinit ื ื™ืฆื ื“ื™ื’ ื ืคืฉื•ื˜ืข ืฉื•ืจื” ืื™ืŸ ื“ื™ ืงืื ืคื™ื’: echo 'omit_dracutmodules+=" systemd "' > /etc/dracut.conf.d/luks-workaround.conf
ื•ื•ืึธืก ืžื™ื“ ื“ื™ืคึผืจื™ื™ื•ื•ื“ ืื•ื ื“ื– ืึทืœืข ื“ื™ ืฉื™ื™ื ืงื™ื™ื˜ ืคื•ืŸ ืกื™ืกื˜ืขืž - ืฉื ืขืœ ืื•ืŸ ืคึผืึทืจืึทืœืขืœ ืงืึทื˜ืขืจ ืคื•ืŸ ืกื™ืกื˜ืขื ื‘ืึทื“ื™ื ื•ื ื’ืก, ื•ื•ืึธืก ื‘ืื˜ื™ื™ื˜ื™ืง ืจื™ื“ื•ืกื˜ ื“ื™ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ืคื•ืŸ ื“ื™ ืกื™ืกื˜ืขื.
ื“ื™ ื–ืื›ืŸ ื–ืขื ืขืŸ ื ืึธืš ื“ืึธืจื˜: 905683
ืึธืŸ ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ืึท ืœื™ื™ื–ื•ื ื’, ืื™ืš ื’ืขืžืื›ื˜ ืขืก ืคึฟืึทืจ ื–ื™ืš, ืื•ืŸ ืื™ืฆื˜ ืื™ืš ื˜ื™ื™ืœืŸ ืขืก ืžื™ื˜ ื“ืขื ืฆื™ื‘ื•ืจ, ื•ื•ืึธืก ืื™ื– ืื™ื ื˜ืขืจืขืกื™ืจื˜, ืœื™ื™ืขื ืขืŸ ืื•ื™ืฃ.
dracut + systemd + LUKS + usbflash = ืึทื•ื˜ืึธ ื•ืคืฉืœื™ืกืŸ

ื”ืงื“ืžื”

ืกื™ืกื˜ืขืžื“ ื•ื•ืขืŸ ืื™ืš ื”ืื‘ ืขืจืฉื˜ ืื ื’ืขื”ื•ื™ื‘ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ Centos ื•ื•ืขืจืกื™ืข 7 ื”ืื˜ ื ื™ืฉื˜ ืืจื•ื™ืกื’ืขืจื•ืคืŸ ืงื™ื™ืŸ ืื•ื™ืคืจืขื’ื•ื ื’, ื•ื•ื™ื™ืœ ื—ื•ืฅ ื ืงืœื™ื™ื ืข ืขื ื“ืขืจื•ื ื’ ืื™ืŸ ืกืขืจื•ื•ื™ืก ืžืขื ืขื“ื–ืฉืžืขื ื˜ ืกื™ื ื˜ืืงืก, ื”ืื‘ ืื™ืš ื ื™ืฉื˜ ื‘ืืžืขืจืงื˜ ืงื™ื™ืŸ ื’ืจื•ื™ืกืŸ ื—ื™ืœื•ืง ืื™ืŸ ืื ืคืื ื’. ืื™ืš ื‘ื™ืŸ ืขื•ื•ืขื ื˜ื•ืขืœ ื’ืขื•ื•ืืจืŸ ืœื™ื‘ ื”ืื‘ืŸ systemd, ืื‘ืขืจ ืžื™ื™ืŸ ืขืจืฉื˜ืข ืื™ื™ื ื“ืจื•ืง ืื™ื– ื’ืขื•ื•ืขืŸ ืื‘ื™ืกืœ ืคืืจืฉื•ื•ืืจืฆื˜ ื“ื•ืจืš ื“ืขื ืคืืงื˜ ืื– ื“ื™ ื“ืจืืงื•ื˜ ื“ืขื•ื•ืขืœืืคืขืจืก ื”ืื‘ืŸ ื ื™ืฉื˜ ืคืืจื‘ืจืื›ื˜ ืงื™ื™ืŸ ืฆื™ื™ื˜ ืฆื• ืฉื˜ื™ืฆืŸ ื“ืขื systemd ื‘ื•ื˜ ืคืจืืฆืขืก ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื“ื™ืกืง ืขื ืงืจื™ืคืฆื™ืข. ืขืก ื”ืื˜ ื’ืขืืจื‘ืขื˜ ื‘ื›ืœืœ, ืื‘ืขืจ ืื™ืš ื”ืื‘ ื’ืขื“ืืจืคื˜ ืืจื™ื™ื ืฉืจื™ื™ื‘ืŸ ืžื™ื™ืŸ ื“ื™ืกืง ืคืืกื•ื•ืืจื˜ ื™ืขื“ืขืก ืžืืœ ืื™ืš ื”ืื‘ ืขืก ืื ื’ืขืคืื ื’ืขืŸ. ืกืขืจื•ื•ื™ืจืขืจ โ€” ื ื™ืฉื˜ ื“ื™ ืื™ื ื˜ืขืจืขืกืื ื˜ืกื˜ืข ื˜ืขื˜ื™ืงื™ื™ื˜.
ืื™ืš ื”ืึธื‘ ื’ืขืคืจื•ืื•ื•ื˜ ืึท ื‘ื™ื ื˜ืœ ืคื•ืŸ ืจืขืงืึทืžืึทื ื“ื™ื™ืฉืึทื ื– ืื•ืŸ ื’ืขืœืขืจื ื˜ ื“ื™ ืžืึทื ื•ืึทืœ, ืื™ืš ืื™ื™ื ื’ืขื–ืขืŸ ืึทื– ืื™ืŸ ืกื™ืกื˜ืขืž ืžืึธื“ืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžื™ื˜ ื•ืกื‘ ืื™ื– ืžืขื’ืœืขืš, ืึธื‘ืขืจ ื‘ืœื•ื™ื– ืžื™ื˜ ืžืึทื ื•ืึทืœ ืคืึทืจื‘ืึทื ื“ ืคื•ืŸ ื™ืขื“ืขืจ ื“ื™ืกืง ืžื™ื˜ ืึท ืฉืœื™ืกืœ ืื•ื™ืฃ ืึท ื•ืกื‘ ื“ื™ืกืง, ืื•ืŸ ื“ื™ ื•ืกื‘ ื“ื™ืกืง ื–ื™ืš ืงืขื ืขืŸ ื–ื™ื™ืŸ ืคืืจื‘ื•ื ื“ืŸ ื‘ืœื•ื™ื– ื“ื•ืจืš ื–ื™ื™ืŸ. UUID, LABEL ื”ืื˜ ื ื™ืฉื˜ ื’ืขืืจื‘ืขื˜. ืขืก ืื™ื– ื ื™ืฉื˜ ื–ื™ื™ืขืจ ื‘ืึทืงื•ื•ืขื ืฆื• ื”ืึทืœื˜ืŸ ื“ืขื ืื™ืŸ ืฉื˜ื•ื‘, ืึทื–ื•ื™ ืื™ืŸ ื“ื™ ืกื•ืฃ ืื™ืš ืคึผืœืึทื ื“ื–ืฉื“ ืื™ืŸ ื•ื•ืืจื˜ืŸ ืื•ืŸ ื ืึธืš ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ื›ึผืžืขื˜ 7 ื™ืืจ, ืื™ืš ืื™ื™ื ื’ืขื–ืขืŸ ืึทื– ืงื™ื™ืŸ ืื™ื™ื ืขืจ ืื™ื– ื’ืขื’ืื ื’ืขืŸ ืฆื• ืกืึธืœื•ื•ืข ื“ื™ ืคึผืจืึธื‘ืœืขื.

ืคึผืจืึธื‘ืœืขืžืก

ืคื•ืŸ ืงื•ืจืก, ื›ึผืžืขื˜ ื•ื•ืขืจ ืขืก ื™ื– ืงืขื ืขืŸ ืฉืจื™ื™ึทื‘ืŸ ื–ื™ื™ืขืจ ืื™ื™ื’ืŸ ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื“ืจืึทืงื•ื˜, ืึธื‘ืขืจ ืฆื• ืžืึทื›ืŸ ืขืก ืึทืจื‘ืขื˜ ืื™ื– ื ื™ื˜ ืžืขืจ ืึทื–ื•ื™ ื’ืจื™ื ื’. ืขืก ืคืืจืงืขืจื˜ ืื•ื™ืก ืึทื– ืจืขื›ื˜ ืฆื• ื“ืขืจ ืคึผืึทืจืึทืœืขืœ ื ืึทื˜ื•ืจ ืคื•ืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืกื™ืกื˜ืขื, ืขืก ืื™ื– ื ื™ืฉื˜ ืึทื–ื•ื™ ื’ืจื™ื ื’ ืฆื• ืึทืจื™ื™ึทื ื ืขืžืขืŸ ื“ื™ื™ืŸ ืงืึธื“ ืื•ืŸ ื˜ื•ื™ืฉืŸ ื“ื™ ืœืึธื•ื“ื™ื ื’ ืคึผืจืึธื’ืจืขืก. ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืคึฟืึทืจ ื“ืจืึทืงื•ื˜ ื”ืื˜ ื ื™ืฉื˜ ื“ืขืจืงืœืขืจืŸ ืึทืœืฅ. ืึธื‘ืขืจ, ื ืึธืš ืœืึทื ื’ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ, ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ื™ื›ื•ืœืช ืฆื• ืกืึธืœื•ื•ืข ื“ื™ ืคึผืจืึธื‘ืœืขื.

ื•ื•ื™ืื–ื•ื™ ืืจื‘ื™ื™ื˜ ืขืก

ืขืก ืื™ื– ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ืจื™ื™ึท ื•ื ื™ืฅ:

  1. luks-auto-key.service - ืึธื ืคึฟืจืขื’ืŸ ืคึฟืึทืจ ื“ืจื™ื™ื•ื•ื– ืžื™ื˜ ืฉืœื™ืกืœืขืŸ ืคึฟืึทืจ LUKS
  2. luks-auto.target - ืืงื˜ืŸ ื•ื•ื™ ืึท ืึธืคืขื ื’ื™ืงื™ื™ึทื˜ ืคึฟืึทืจ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ systemd-cryptsetup ื•ื ื™ืฅ
  3. luks-auto-clean.service - ืงืœื™ื ื– ืฆื™ื™ึทื˜ื•ื•ื™ื™ึทืœื™ืง ื˜ืขืงืขืก ื‘ืืฉืืคืŸ ื“ื•ืจืš luks-auto-key.service

ืื•ืŸ luks-auto-generator.sh ืื™ื– ืึท ืฉืจื™ืคื˜ ื•ื•ืึธืก ืื™ื– ืœืึธื ื˜ืฉื˜ ื“ื•ืจืš ืกื™ืกื˜ืขื ืื•ืŸ ื“ื–ืฉืขื ืขืจื™ื™ืฅ ื•ื ื™ืฅ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืงืขืจืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก. ืขื ืœืขื›ืข ื’ืขื ืขืจืึทื˜ืึธืจืก ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ื“ื•ืจืš 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/$1" $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

ืกืึธืฃ

ืคึฟืึทืจ ืงืึทื ื•ื•ื™ื ื™ืึทื ืก, ืื™ืš ื”ืึทืœื˜ืŸ ืงืึทืžืคึผืึทื˜ืึทื‘ื™ืœืึทื˜ื™ ืžื™ื˜ ืงืขืจืŸ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ืึธืคึผืฆื™ืขืก ื•ื•ื™ ืคึฟืึทืจ ืกื™ืกื•ื•ื™ื ื™ื˜ ืžืึธื“ืข, ื•ื•ืึธืก ืžืื›ื˜ ืขืก ื’ืจื™ื ื’ืขืจ ืฆื• ื ื•ืฆืŸ ืื™ืŸ ืขืœื˜ืขืจืข ื™ื ืกื˜ืึทืœื™ื™ืฉืึทื ื–.

ืžืงื•ืจ: www.habr.com

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster