Как можно разблокировать полностью зашифрованную систему Ubuntu 11.10 через SSH при загрузке?

8

В предыдущих версиях Ubuntu и текущих версиях Debian вы можете разблокировать полностью зашифрованную систему (используя dmcrypt и LUKS) во время загрузки через SSH.

Это было так просто, как:

  1. Установка зашифрованной системы с использованием альтернативного установочного диска Ubuntu или обычного установочного диска Debian и выбор шифрования системы.
  2. После установки системы добавьте пакеты dropbear и busybox.
  3. Обновление initram-fs для авторизации вашего ключа ssh.

Во время загрузки вы просто подключитесь к компьютеру по ssh и выполните:

echo -ne "keyphrase" > /lib/cryptsetup/passfifo

Затем машина разблокирует и загрузит зашифрованную систему.

Используя те же самые шаги в Ubuntu 11.10, я могу подключиться к машине по ssh, но /lib/cryptsetup/passfifoне существует.

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

Джефф
источник
На системе, которая работала по-старому, вы можете сделать dpkg -S /lib/cryptsetup/passfifo? Я не могу найти какие-либо пакеты на packages.ubuntu.com для Natty или Maverick, которые содержат этот файл.
Мак

Ответы:

4

Только что сделал поиск в Google, и кажется, что Плимут мешает. Если plymouth присутствует, то при загрузке cryptsetup запросит у plymouth пароль, и это означает, что он не использует passfifo.

Лучшим обходным решением, по-видимому, является размещение следующего сценария в каталоге. /usr/share/initramfs-tools/hooks/После того, как вы поместили его туда, вы можете, chmod +xа затем должны update-initramfs -u. После этого вы сможете использовать unlockкоманду (которая создается приведенным ниже сценарием).

Это зависит от того, используете ли вы ключ ssh для входа в систему. Если вы хотите использовать пароль, то вам нужно поместить SSHUSERPASS=<username>в/etc/initramfs-tools/initramfs.conf

#!/bin/sh

PREREQ="dropbear"

prereqs() {
    echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
    ;;
esac

. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions

if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
    cat > "${DESTDIR}/bin/unlock" <<-EOF
        #!/bin/sh
        if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot
        then
            /sbin/pkill cryptroot
            /sbin/pkill -f "plymouth ask-for-pass"
            /sbin/pkill cryptsetup
            exit 0
        fi
        exit 1
    EOF
    chmod 755 "${DESTDIR}/bin/unlock"

    mkdir -p "${DESTDIR}/lib/unlock"
    cat > "${DESTDIR}/lib/unlock/plymouth" <<-EOF
        #!/bin/sh
        [ "\$1" == "--ping" ] && exit 1
        /bin/plymouth "\$@"
    EOF
    chmod 755 "${DESTDIR}/lib/unlock/plymouth"

    # Enable password login
    if [ -n "$SSHUSERPASS" ]
    then
        sed -n "s/^${SSHUSERPASS}:/root:/p" /etc/shadow > "${DESTDIR}/etc/shadow"
        chmod 640 "${DESTDIR}/etc/shadow"
    fi
fi

Вы можете прочитать больше в этом посте на ubuntuforums , об этой ошибке на панели запуска и немецком посте, из которого я получил большую часть этого .

Хэмиш Даунер
источник
1

пока эта ошибка не устранена, вы можете сначала попытаться убить Плимута. К сожалению, нет простого способа определить PID Plymouthd. Но Плимут знает, как выйти из себя :-) Так что следующего должно быть достаточно.

plymouth --quit; echo -ne "keyphrase" > /lib/cryptsetup/passfifo

Фредерик Норд
источник