แแแแแแ แแแแ แฎแแแก แฌแแ แแแแฌแงแ, แ แแแแกแแช 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-แแก แแแแแงแแแแแแ แแแกแแแก แแแจแแคแแ แแกแแแ แแ แแแ. แแแแแแแ, แแฃแจแแแแแ, แแแแ แแ แกแแ แแแ แแก แฉแแ แแแแกแแก แแแกแแแก แแแ แแแแก แจแแงแแแแ แงแแแแแแ แกแแแแขแแ แแกแ แแ แแ แแก.
แ แแแแแแแแ แ แแแแแแแแแชแแแก แแแแแชแแแกแ แแ แกแแฎแแแแซแฆแแแแแแแก แจแแกแฌแแแแแก แจแแแแแ, แแแแฎแแแ, แ แแ แกแแกแขแแแฃแ แ แแแแแจแ USB-แแ แแแแคแแแฃแ แแชแแ แจแแกแแซแแแแแแแ, แแแแ แแ แแฎแแแแ แแแแแแฃแแ แแแกแแแก แฎแแแแ แแกแแชแแ แแแแ USB แแแกแแแ แแแแแแจแแแ, แฎแแแ แแแแแ USB แแแกแแ แจแแแซแแแแ แแฎแแแแ แแแก แแแแ แแงแแก แแแแแแจแแ แแแฃแแ. UUID, LABEL แแ แแฃแจแแแแแ. แกแแฎแแจแ แแแแก แจแแแแ แฉแฃแแแแ แแ แช แแฃ แแกแ แแแกแแฎแแ แฎแแแแแ แแงแ, แแกแ แ แแ, แกแแแแแแแ แฉแแแแแ แแ แแแแแแแแจแ แแ, แแแแฅแแแก 7 แฌแแแก แแแแแแแก แจแแแแแ, แแแแฎแแแ, แ แแ แแ แแแแ แแแแ แแแแ แแ แแแแแแแก แแแแแแ แแแแก.
แแ แแแแแแแแ
แ แ แแฅแแ แฃแแแ, แแแแฅแแแก แงแแแแแก แจแแฃแซแแแ แแแฌแแ แแก แกแแแฃแแแ แ แแแแฃแแ 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/$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
แแแกแแแแ
แแแฎแแ แฎแแแฃแแแแแกแแแแก, แแ แจแแแแแแ แฉแฃแแ แแแแกแแแแแแแ แแแ แแแแก แแ แซแแแแแแก แฎแแแแก แแแ แแแแขแแแแแ, แแกแแแ แ แแแแ แช sysvinit แ แแแแแจแ, แ แแช แแแแ แขแแแแแก แซแแแ แแแกแขแแแแชแแแจแ แแแแแงแแแแแแก.
แฌแงแแ แ: www.habr.com