Есть ли способ переместить каталог в зашифрованном доме на второй диск и сохранить шифрование?

У меня есть установка с домашним шифрованием (ecryptfs), она работает нормально, но на этом первом диске не хватает места, у меня подключен второй диск и отформатирован в ext4. Можно ли использовать тот же механизм, который используется зашифрованным домом (pam+unlock-passphrase+mount) для некоторых папок на этом диске, например, Images. Я хочу избежать необходимости вводить пароль дважды. Если возможно, я бы хотел избежать зашифрованной файловой системы, так как, вероятно, будет несколько пользователей.

Изучаю настройку ecryptfs-setup-private, но если есть более простой способ, спасибо за указание на это!

1 ответ

Создание новой зашифрованной папки и перемещение файлов в нее должно работать, она постоянно поддерживает их в зашифрованном состоянии на диске. Но это может быть проблема с автоматическим дешифрованием при входе в систему.

Создание настраиваемого модуля PAM, который может взять парольную фразу для входа в систему и использовать ее для расшифровки / монтирования чего-либо еще (eCryptFS, EncFS, LUKS и т. Д.), Будет решением общего назначения...

Обычно, ecryptfs-setup-private будет работать, но eCryptFS не поддерживает вложенные зашифрованные папки (один eCryptFS с одним ключом, внутри другого eCryptFS с другим ключом), поэтому наличие зашифрованного дома может вызвать проблемы, но вы можете попробовать несколько других ответов и посмотреть, работает ли один:


Скрипт внутри вашего дома, который запускается при входе в систему

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

Во-первых, получите скрипт для запуска при входе в систему:

  1. Файл.desktop в ~/.config/autostart будет запускаться при входе в систему, сообщая ему, что должен работать скрипт bash, который монтирует вашу зашифрованную папку. Так как ваш дом уже зашифрован, вы можете сохранить другую парольную фразу монтирования в скрипте bash, но не с абсолютной безопасностью, но зашифрованную на диске, если вы не хотите вводить ее каждый раз. Например ~/.config/autostart/test.desktop, Очень простой, как этот, должен работать:

        [Desktop Entry]
        Type=Application
        Exec=/home/user/.config/autostart/runme.sh
    

    Или подождать несколько секунд перед запуском (например, дать настольному компьютеру время для инициализации, прежде чем запрашивать фразу-пароль) и запустить от имени пользователя root, попробуйте следующее:

    [Desktop Entry]
    Type=Application
    Exec=sudo bash -c "sleep 5; /home/user/.config/autostart/runme.sh"
    
  2. Затем найдите скрипт для расшифровки вашей другой папки. Если вы используете EncFS, то это будет только одна строка, но eCryptFS отличается. Самым простым может быть (временно) создать нового пользователя, запустить его ecryptfs-migrate-home или же ecryptfs-setup-private а затем скопируйте полученную зашифрованную папку в новое местоположение.

Следующий скрипт предполагает, что это второй зашифрованный дом, который вы хотите смонтировать:

#!/bin/sh -e
#
# ecryptfs-mount-single
# Modified by Xen2050 from:
#
#    ecryptfs-recover-private
#    Copyright (C) 2010 Canonical Ltd.
#
#    Authors: Dustin Kirkland <kirkland@ubuntu.com>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, version 2 of the License.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

error() {
    echo "ERROR: $@" 1>&2
    echo "Usage:  ecryptfs-mount-single [--rw] [encrypted private dir] [mountpoint]"
    echo "\tWill attempt to mount [encrypted private dir (.Private)] to [mountpoint]"
    echo "\twith standard options: ecryptfs_cipher=aes,ecryptfs_key_bytes=16"
    echo "\n\t--rw\tmount with read-write access (optional)"
    echo "\t[mountpoint] will attempt to be created if it does not exist"
    exit 1
}

info() {
    echo "INFO: $@"
}

# We need root access to do the mount
[ "$(id -u)" = "0" ] || error "This program must be run as root."

# Handle parameters
opts="ro"
if [ "$1" = "--rw" ]; then
    opts="rw"
    shift
fi

if [ -d "$1" ]; then
    # Allow for target directories on the command line
    d="$1"
    # Only supplying one directory
else

    error "No private directory found; it must be supplied."
fi

if [ ! -d "$2" ]; then
    mkdir -p "$2" || error "mountpoint $2 does not exist, can not create"
fi
    # mount directory on the command line
    tmpdir=$2

# Determine if filename encryption is on
ls "$d/ECRYPTFS_FNEK_ENCRYPTED"* >/dev/null 2>&1 && fnek="--fnek" || fnek=
if [ -f "$d/../.ecryptfs/wrapped-passphrase" ]; then
    info "Found your wrapped-passphrase"
    echo -n "Do you know your LOGIN passphrase? [Y/n] "
    lpw=$(head -n1)
    case "$lpw" in
        y|Y|"")
            # Use the wrapped-passphrase, if available
            info "Enter your LOGIN passphrase..."
            ecryptfs-insert-wrapped-passphrase-into-keyring "$d/../.ecryptfs/wrapped-passphrase"
            sigs=$(sed -e "s/[^0-9a-f]//g" "$d/../.ecryptfs/Private.sig")
            use_mount_passphrase=0
        ;;
        *)
            use_mount_passphrase=1
        ;;
    esac
else
    # Fall back to mount passphrase
    info "Could not find your wrapped passphrase file."
    use_mount_passphrase=1
fi
if [ "$use_mount_passphrase" = "1" ]; then
        info "To recover this directory, you MUST have your original MOUNT passphrase."
    info "When you first setup your encrypted private directory, you were told to record"
    info "your MOUNT passphrase."
    info "It should be 32 characters long, consisting of [0-9] and [a-f]."
    echo
    echo -n "Enter your MOUNT passphrase: "
    stty_orig=$(stty -g)
    stty -echo
    passphrase=$(head -n1)
    stty $stty_orig
    echo
    sigs=$(printf "%s\0" "$passphrase" | ecryptfs-add-passphrase $fnek | grep "^Inserted" | sed -e "s/^.*\[//" -e "s/\].*$//" -e "s/[^0-9a-f]//g")
fi
case $(echo "$sigs" | wc -l) in
    1)
        mount_sig=$(echo "$sigs" | head -n1)
        fnek_sig=
        mount_opts="$opts,ecryptfs_sig=$mount_sig,ecryptfs_cipher=aes,ecryptfs_key_bytes=16"
    ;;
    2)
        mount_sig=$(echo "$sigs" | head -n1)
        fnek_sig=$(echo "$sigs" | tail -n1)
        mount_opts="$opts,ecryptfs_sig=$mount_sig,ecryptfs_fnek_sig=$fnek_sig,ecryptfs_cipher=aes,ecryptfs_key_bytes=16"
    ;;
    *)
        continue
    ;;
esac
(keyctl list @u | grep -qs "$mount_sig") || error "The key required to access this private data is not available."
(keyctl list @u | grep -qs "$fnek_sig") || error "The key required to access this private data is not available."
if mount -i -t ecryptfs -o "$mount_opts" "$d" "$tmpdir"; then
    info "Success!  Private data mounted at [$tmpdir]."
else
    error "Failed to mount private data at [$tmpdir]."
fi

Отключение до / при выходе из системы и, возможно, удаление ключей из набора ключей ядра (с помощью keyctl очистить или очистить, sudo keyctl clear @u очищает все) наверное хорошие идеи. У меня была 2-ая папка, смонтированная в зашифрованном доме, и я вышел из системы, она, очевидно, размонтировала 2-ю папку (не в /proc/mounts), но все равно обнаружилась в mount,


модифицированный ecryptfs-setup-private

Может быть, большинство проблем из-за уже зашифрованного дома eCryptFS...

Использовать ~/.Private базовый каталог, содержащий зашифрованные данные (ИЛИ ссылку с ~/.Private в другую папку в другом месте), но измените папку точки монтирования на другую:

  1. Бежать ecryptfs-setup-private затем
  2. Переместить / создать новую папку точки монтирования

    mv ~/Private /path/to/new/folder
    
  3. Изменить содержимое ~/.ecryptfs/Private.mnt (файл, содержащий путь к точке монтирования частного каталога) к новой папке точки монтирования

    echo /path/to/new/folder > ~/.ecryptfs/Private.mnt
    

Если ~/.ecryptfs/auto-mount а также ~/.ecryptfs/auto-umount файлы существуют, папка будет автоматически смонтирована / размонтирована при входе / выходе из системы.

Для ручного монтажа / дешифрования (потребуется пароль), запустите ecryptfs-mount-private

Для ручного демонтажа запустите ecryptfs-umount-private

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