FreeBSD 13に暗号化されたスワップファイルを追加する方法

FreeBSD 13に暗号化されたスワップファイルを追加する方法

FreeBSD 13に暗号化されたスワップファイルを追加したいです。

私が読んでこれドキュメントページにありますが、スワップファイルの暗号化を設定する方法については説明しません。

私も読んだもう一つただし、スワップファイルではなくスワップパーティションを暗号化する例のみを提供します。目的は、システムの起動時に暗号化されたスワップファイルを有効にすることです。システムは最新のFreeBSD 13を実行しています。

これを達成する方法を説明してください。

答え1

提供されたリンク@r bertは近いですが、いくつかの微調整で利点を得ることができます。

原作者ありがとうFreeBSDフォーラムのmb2015。この方法は、カスタムサービススクリプトを生成することによって/etc/rc.conf

まず/usr/local/etc/rc.d/encrypted_swapfile、この大きなコマンドをコピーして貼り付け、それに続くコマンドを実行してcat生成します。chmod

# cat << 'EOF' > /usr/local/etc/rc.d/encrypted_swapfile
#!/bin/sh

# PROVIDE: encrypted_swapfile
# REQUIRE: swaplate
# BEFORE: LOGIN
# KEYWORD: nojail shutdown

. /etc/rc.subr

name="encrypted_swapfile"
rcvar="encrypted_swapfile_enable"

start_cmd="${name}_start"
stop_cmd="${name}_stop"

load_rc_config "$name"
: ${encrypted_swapfile_enable:="NO"}
: ${encrypted_swapfile_file:="/usr/swap0"}
: ${encrypted_swapfile_size:="2G"}

SWFILE="$encrypted_swapfile_file";
SWFILEDIR="$(dirname "$SWFILE")";
SWDEVLINK="/var/run/encrypted_swapfile_device";

encrypted_swapfile_start()
{
    # Create and mount a one-time encrypted swap file.
    # This is a workaround for the inability to do this via an /etc/fstab entry.
    # See https://forums.freebsd.org/threads/encrypt-swap-file.44519/#post-292933
    #
    if [ ! -e "$SWDEVLINK" ]; then
        if [ -w "$SWFILEDIR" ]; then
            truncate -s "$encrypted_swapfile_size" "$encrypted_swapfile_file" &&
            chmod 0600 "$encrypted_swapfile_file" &&
            SWMD="$(mdconfig -a -t vnode -f "$encrypted_swapfile_file")" &&
            if [ $? -eq 0 ] && [ -n $SWMD ] && [ -e "/dev/$SWMD" ]; then
                chmod 0600 "/dev/$SWMD" &&
                geli onetime -e AES-XTS -l 256 -d "/dev/$SWMD" &&
                chmod 0600 "/dev/$SWMD.eli" &&
                swapon "/dev/$SWMD.eli" &&
                ln -f -s "/dev/$SWMD.eli" "$SWDEVLINK";
                unset SWMD;
            fi
        else
            echo "Could not create encrypted swap file in $SWFILEDIR; check permissions." &&
            return 1;
        fi
    else
        SWMD="$(readlink "$SWDEVLINK")" &&
        swapinfo | grep -vq "^$SWMD " &&
        echo "Encrypted swap file already exists; enabling." &&
        swapon "$SWMD";
        unset SWMD;
    fi
    return 0;
}

encrypted_swapfile_stop()
{
    if [ -e "$SWDEVLINK" ]; then
        SWMD=$(readlink "$SWDEVLINK") &&
        swapoff "$SWDEVLINK" &&
        mdconfig -du "${SWMD%.eli}" &&
        rm "$SWDEVLINK" &&
        rm "$SWFILE";
    else
        echo "No encrypted swap file found; nothing to stop.";
        rm -f "$SWDEVLINK";
    fi
}

run_rc_command "$1"

EOF
# chmod 755 /usr/local/etc/rc.d/encrypted_swapfile

次に編集して/etc/rc.confこの新しいサービスを有効にし、使用される変数を設定します。

encrypted_swapfile_enable="yes"
encrypted_swapfile_file="/usr/swap0"
encrypted_swapfile_size="2G"

サービスを開始または停止して、暗号化されたスワップファイルを有効または無効にすることができますencrypted_swapfile

# swapinfo
Device          1024-blocks     Used    Avail Capacity
# service encrypted_swapfile start
# swapinfo
Device          1024-blocks     Used    Avail Capacity
/dev/md0.eli        2097152        0  2097152     0%
# service encrypted_swapfile stop
# swapinfo
Device          1024-blocks     Used    Avail Capacity

関連情報