LINUX.ORG.RU
решено ФорумAdmin

Как открыть корень зашифрованный luks2 в процессе загрузки без ввода пароля в centos8?

 , ,


0

1

Доброго времени суток. В Ubuntu во время установки выносил на флешку boot, собирал raid1 c корнем и swap, для raid1 задавал парольную фразу и после первой загрузки выполнял команды указанные ниже, которые меняли пароль к массиву на файл-ключ и пересобирали initramfs записывая в неё хук с ключём и пароль более при загрузке не требовался. Начал ставить centos8 и тут всё не так, тут dracut, подскажите пожалуйста как сделать также как было в ubuntu.

        device="/dev/md0"
        sed -i 's/none luks,discard/\/crypto_keyfile.bin luks,keyscript=\/bin\/cat/g' /etc/crypttab
        dd bs=512 count=4 if=/dev/random of=/crypto_keyfile.bin
        chmod 400 /crypto_keyfile.bin
        cryptsetup luksChangeKey $device -S 0 /crypto_keyfile.bin
        echo "#!/bin/bash
        cp /crypto_keyfile.bin \"\${DESTDIR}\"" > /etc/initramfs-tools/hooks/crypto_keyfile.sh
        chmod +x /etc/initramfs-tools/hooks/crypto_keyfile.sh


Последнее исправление: PolPot (всего исправлений: 1)

Ну тут есть параметр ″rd.luks.key=″, который прописывается в конфиге загрузчика ядра, и указывает путь к файлу с ключём. Есть параметр в конфиге dracut'а — install_items+=«ИМЯ_ФАЙЛА», чтобы он добавил нужный файл в initramfs образ.

То есть как-то так:

# cp /crypto_keyfile.bin /etc/crypto_keyfile.bin
# echo 'install_items+="/etc/crypto_keyfile.bin"' >> /etc/dracut.conf.d/99-myconf
# dracut -f
Редактировать /etc/defautl/grub (добавть rd.luks.key=/etc/crypto_keyfile.bin в GRUB_CMDLINE_LINUX=)
# grub2-mkconfig

Только ещё эта бага может быть, требующая отключать systemd в initramfs: https://bugzilla.redhat.com/show_bug.cgi?id=905683

mky ★★★★★
()

Что-то толкового на этот счёт в сети совсем мало, нашел это:

# insert a password into my chosen password file
echo -n "anypassword" > /etc/mypasswdfile

# instruct the LUKS device to take the password from my password file
vi /etc/crypttab and replaced the 3rd parameter "none" with "/etc/mypasswdfile"

# add my password file as a valid key for the luks device
cryptsetup luksAddKey /dev/sda2 /etc/mypasswdfile

# configure dracut to add the following 2 items to the initramfs (so accessible at boot)
echo 'install_items="/etc/mypasswdfile /etc/crypttab"' > /etc/dracut.conf.d/99-mypwfile.conf

# instruct dracut to apply the configuration
dracut -f

# reboot the server
reboot

Сделал обёртку, комунибудь да пригодится.

#!/bin/bash
 
# Использовать на свой страх и риск, во время операций смены ключа использовать ИБП, следить за исправностью аппаратного обеспечения, 
# особенно оперативной памяти и носителей информации, после обновления системы использовать только после тестирования на стенде.
# Если что-то не работает - смотрим дату публикации и версию ОС.
# При первом запуске меняет пароль заданный при установке на файл-ключ, при последующих меняет файл-ключ на новый.
 
device="/dev/vdb2"     # Зашифрованное устройство с корневой ФС.
pass="qwerty"          # Luks пароль заданный при установке.
keyDir="boot"          # Директория для хранения ключей.
 
# Выбираем имя ключа.
while true
do
     sizeName=`shuf -i 20-64 | head -n 1`
     nameKey=`tr -cd '[:alnum:]' < /dev/urandom | fold -w$sizeName | head -n1`
     checkExistName=`ls /$keyDir/ | grep -w $nameKey`
     if [ -z "$checkExistName" ]; then
           unset sizeName
           break
     else
           sleep 0
     fi
done
 
# Создаём файл-ключ.
touch /$keyDir/$nameKey
chmod 400 /$keyDir/$nameKey
dd if=/dev/random bs=512 count=4 2>/dev/null | base64 | dd of=/$keyDir/$nameKey &>/dev/null
 
# Получаем имя старого ключа, если получено none, значит файл-ключ с момента установки не назначался.
oldKeyName=`cat /etc/crypttab | awk '{print $3}'`
 
if [ "$oldKeyName" = "none" ]; then
     # Заменяем пароль на файл-ключ.
     echo "$pass" | cryptsetup luksChangeKey $device -S 0 /$keyDir/$nameKey
     sed -i "s/$oldKeyName/\/$keyDir\/$nameKey/g" /etc/crypttab
     touch /etc/dracut.conf.d/99-$nameKey.conf
     chmod 400 /etc/dracut.conf.d/99-$nameKey.conf
     echo 'install_items="/'$keyDir'/'$nameKey' /etc/crypttab"' > /etc/dracut.conf.d/99-$nameKey.conf
     dracut -f
else
     # Меняем файл-ключ.
     oldKeyName=`echo $oldKeyName | awk -F "/" '{print $3}'`
     cryptsetup luksChangeKey $device /$keyDir/$nameKey -S 0 -d /$keyDir/$oldKeyName
     sed -i "s/\/$keyDir\/$oldKeyName/\/$keyDir\/$nameKey/g" /etc/crypttab
     touch /etc/dracut.conf.d/99-$nameKey.conf
     chmod 400 /etc/dracut.conf.d/99-$nameKey.conf
     echo 'install_items="/'$keyDir'/'$nameKey' /etc/crypttab"' > /etc/dracut.conf.d/99-$nameKey.conf
     shred -n 1 -v -z -u /$keyDir/$oldKeyName &>/dev/null
     shred -n 1 -v -z -u /etc/dracut.conf.d/99-$oldKeyName.conf &>/dev/null
     dracut -f
fi
exit 0
PolPot
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.