Концепция шифрования FreeBSD: автоматическая загрузка без пароля или ключа при подключении к другой системе?

Недавно я установил FreeBSD для работы и geli для шифрования. (Полная шифровка диска без загрузочного раздела.) Когда я закончил настройку, я обнаружил, что при каждой загрузке мне нужно вводить пароль разбора для монтирования корневого диска.

Это не для моих нужд. Я просто хочу, чтобы моя система загружалась автоматически, поэтому я могу использовать ssh. Но когда другие выключают мою машину и пытаются использовать другую систему FreeBSD для монтирования моего диска, они не могут. Если они монтируют раздел с другой системой FreeBSD, они могут видеть только /boot каталог. Все файлы в безопасности!

Возможна ли моя концепция? (Чтобы зашифрованная система автоматически загружалась при монтировании другой системой?) И если да, то как мне это сделать с freeBSD?

3 ответа

Решение

тл: др: нет

Если вы хотите, чтобы ключ использовался автоматически при загрузке, тогда ключ должен быть доступен при загрузке. Что означает на незашифрованной части диска.

Если он находится на незашифрованной части диска, другой может вынуть диск из вашей системы, прочитать ключ и расшифровать оставшуюся часть диска.

Нет способа правильно защитить диск и не хранить ключ.

Нет. Если вы хотите расшифровать его автоматически, ваш пароль должен храниться на диске в виде открытого текста или быть скрытым (плохим) способом. Тот, кто обладает достаточной силой воли, сможет легко получить этот пароль. Если только "/boot" не зашифрован, пароль должен быть там, а злоумышленник просто должен его найти.

Если вы просто не хотите присутствовать физически, чтобы разблокировать сервер, это можно решить, установив незашифрованную систему и загрузив ее, запустив такие службы, как ssh, которые позволят вам разблокировать раздел данных из удаленного расположения.

У меня была похожая проблема, которую я решаю только шифрованием / home. Проблема в том, что /etc/rc.d/geli хочет смонтировать его перед продолжением загрузки. Kludge будет делать монтирование вручную после загрузки, но мне нравится, как он предлагает делать это во время загрузки - я просто хочу, чтобы сеть запускалась первой, так как /, /var и / usr не зашифрованы,

Я таким образом поставил это:

/dev/ada0p7.eli /home ufs rw,noauto 0 0

в / etc / fstab

Созданы соответствующие параметры "l" в rc.conf: lgeli_devices="ada0p7" lgeli_ada0p7_flags="-k /etc/geli/server.key" lgeli_ada0p7_autodetach="NO"

а затем lgeli в /etc/rc.d, вот так:

#!/bin/sh

# PROVIDE: lgeli
# REQUIRE: sshd
# KEYWORD: nojail

. /etc/rc.subr

lgeli_make_list()
{
        local devices devices2
        local provider

        devices="${lgeli_devices}"

        for provider in ${devices}; do
                provider=${provider%.eli}
                provider=${provider#/dev/}
                devices2="${devices2} ${provider}"
        done

        echo ${devices2}
}

name="lgeli"
start_precmd='[ -n "$(lgeli_make_list)" ]'
start_cmd="lgeli_start"
stop_cmd="lgeli_stop"
required_modules="geom_eli:g_eli"

lgeli_start()
{
        devices=`lgeli_make_list`

        if [ -z "${lgeli_tries}" ]; then
                if [ -n "${lgeli_attach_attempts}" ]; then
                        # Compatibility with rc.d/gbde.
                        lgeli_tries=${lgeli_attach_attempts}
                else
                        lgeli_tries=`${SYSCTL_N} kern.geom.eli.tries`
                fi
        fi

        for provider in ${devices}; do
                provider_=`ltr ${provider} '/-' '_'`

                eval "flags=\${lgeli_${provider_}_flags}"
                if [ -z "${flags}" ]; then
                        flags=${lgeli_default_flags}
                fi
                if [ -e "/dev/${provider}" -a ! -e "/dev/${provider}.eli" ]; then
                        echo "Configuring Disk Encryption for ${provider}."
                        count=1
                        while [ ${count} -le ${lgeli_tries} ]; do
                                geli attach ${flags} ${provider}
                                if [ -e "/dev/${provider}.eli" ]; then
                                        # LOUIS line below, so long as
                                        # /etc/fstab... noauto line
                                        # present, this works
                                        mount "/dev/${provider}.eli"
                                        break
                                fi
                                echo "Attach failed; attempt ${count} of ${lgeli_tries}."
                                count=$((count+1))
                        done
                fi
        done
}

lgeli_stop()
{
        devices=`lgeli_make_list`

        for provider in ${devices}; do
                if [ -e "/dev/${provider}.eli" ]; then
                        umount "/dev/${provider}.eli" 2>/dev/null
                        geli detach "${provider}"
                fi
        done
}

load_rc_config $name
run_rc_command "$1"

Таким образом, это довольно чисто, и не слишком много грязи. Команда mount в lgeli гарантирует, что noauto будет смонтирован, если будет geli'd. Немного некрасиво, но для меня главное - я могу войти удаленно и спасти свой рабочий стол от недоступности после сбоя питания, который в противном случае был режимом по умолчанию!

Другие вопросы по тегам