LUKS. Автомонтирование при загрузке

Для автоматической расшифровки LUKS разделов и их монтирования можно использовать небольшой bash скрипт, который запускается при старте системы. Код скрипта приведён в статье.

Причина написания этой статьи: «все диски необходимо шифровать!». Это нужно не только на случай утери устройства, но и на случай замены на новое. Зачастую об этом вспоминаешь только после того, как выбросил незашифрованный носитель. После чего молишься, чтобы его на свалке никто никогда не нашёл. Но чтобы шифрование не превратилось в боль, оно должно открываться незаметно…

Далее действия для создания скрипта делаем от лица root пользователя.

Создаём файл /root/luks_passwd пишем пароль для расшифровки тома.

Создаём скрипт /root/luks_unlock, который будет разблокировать и монтировать раздел:

key_file='/root/luks_passwd'  # путь к файлу с ключом

mount_point='/mnt/files'  # точка монтирования

UUID='658f0eb8-fdc6-4440-a8fd-46b7bc8ae0ba' # UUID диска, который надо примонтировать к точке

name='files'  # название диска для mapper



# определяем имя диска по его UUID (напр. /dev/sda1)

disk=''

while [[ ${#disk} == 0 ]]; do

    # диск может подключаться не сразу после старта системы, поэтому делаем много попыток с задержко

    echo "Получаем путь к диску по его UUID=${UUID}"  

    disk=$( blkid | grep ${UUID} | awk '{print $1}' | tr -d ':|n' )

    if [[ ${#disk} == 0 ]]; then

        sleep 5

    else

        echo "Диск ${name} найден тут: ${disk}" 

    fi

done



# расшифровываем диск

while [[ ! -e /dev/mapper/${name} ]]; do

    echo "Расшифровываем диск ${name}: ${disk}"  

    cat ${key_file} | cryptsetup luksOpen ${disk} ${name} -

    if [[ ! -e /dev/mapper/${name} ]]; then

        sleep 5

    else

        echo "Диск успешно расшифрован ${name}: ${disk}" 

    fi

done



# монтируем

while [[ "$( lsblk -o MOUNTPOINT | grep -i ${mount_point} | wc -l | tr -d 'n' )" == 0 ]]; do

    echo "Монтируем ${name}: ${disk}" 

    mount /dev/mapper/${name} ${mount_point}

    sleep 5

done

 

Ставим скрипт /root/luks_unlock на автозагрузку через крон. Для этого можно в файле /etc/crontab добавить в конец такую строку:

@reboot root bash /root/luks_unlock

Но этот файл затрётся при полном обновлении системы (например, через команду do-release-upgrade в Ubuntu). Поэтому лучше записать в персональные cron задачи. Для этого выполняем «crontab -e» и пишем в конец:

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

 

@reboot bash /root/luks_unlock

Обратите внимание, что если не задать SHELL и PATH, то скрипт не выполнится корректно, потому что ему будет непонятно, откуда брать утилиты «lsblk» и «blkid». А вот в общесистемном crontab файле эти директивы определены.

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *