Шифрованный SWAP файл

#!/bin/bash
# /usr/local/sbin/swapfile
# Создать конфиг /usr/local/etc/conf.d/swapfile
#
# # Размер файла подкачки 512M
# SWPS=512
# # Имя файла подкачки
# SWPN='swapfile'
# # Путь к файлу подкачки
# SWPP='/'
# # Модуль шифрования
# CIPHERM='aes'
# # Метод шифрования
# CIPHER='aes-cbc-essiv:sha256'
# # Длина ключа
# KEYSIZE=256
# Создать юнит /usr/local/lib/systemd/system/swapfile.service
#
# [Unit]
# Description=Run crypt SWAP file
# Wants=swap.target
# Before=swap.target
# ConditionFileIsExecutable=/usr/local/sbin/swapfile
#
# [Service]
# Type=oneshot
# RemainAfterExit=yes
# ExecStart=/usr/local/sbin/swapfile start
# ExecStop=/usr/local/sbin/swapfile stop
#
# [Install]
# WantedBy=swap.target
# Делаем исполняемым!!!
# chmod +x /usr/local/sbin/swapfile
# Подключение для initscripts
# добавить в /etc/rc.local
#
# swapfile start
#
# и добавить в /etc/rc.local.shutdown
#
# swapfile stop
# Подключение для systemd выполнить
#
# systemctl enable swapfile.service
. /usr/local/etc/conf.d/swapfile
SWPF=$SWPP$SWPN
DM='/dev/mapper/'
EALL=$(gettext 'crypt SWAP')' '$(gettext 'file')
ESTART=$(gettext 'Start')' '$EALL
ESTOP=$(gettext 'Stop')' '$EALL
ECREATE=$(gettext 'Create')' '$EALL
EDELETE=$(gettext 'Delete')' '$EALL
ELIST=$(gettext 'List')' '$EALL
EONOFF=$(gettext 'On|Off')' '$EALL
swpfile() {
    if [ -f $SWPF ]; then
        return 0
    fi
    return 1
}
swpdev() {
    if [ -n "$(swapon -s | grep $DM$SWPN)" ]; then
        return 0
    fi
    return 1
}
modl() {
    if [ -n "$(lsmod | grep $1)" ]; then
        return 0
    fi
    return 1
}
start() {
    if swpdev ; then
        return
    fi
    if [ ! -f $SWPF ]; then
        create
    fi
    if ! modl 'loop' ; then
        modprobe loop
    fi
    if ! modl $CIPHERM ; then
        modprobe $CIPHERM
    fi
    echo $ESTART
    cryptsetup --key-file=/dev/urandom -c $CIPHER -s $KEYSIZE create $SWPN $(losetup -f --show $SWPF)
    mkswap -f $DM$SWPN
    swapon $DM$SWPN
}
stop() {
    if ! swpdev ; then
        return
    fi
    echo $ESTOP
    swapoff $DM$SWPN
    sleep 1
    cryptsetup remove $SWPN
    sleep 1
    losetup -d $(losetup -j $SWPF | cut -d ':' -f1)
}
create() {
    if swpfile ; then
        return
    fi
    echo $ECREATE
    fallocate -l "$SWPS"M $SWPF
    dd if=/dev/urandom of=$SWPF bs=1M count=$SWPS
}
delete() {
    if ! swpfile ; then
        return
    fi
    stop
    echo $EDELETE
    rm $SWPF
}
list() {
    echo $ELIST
    swapon -s | grep $DM
}
onoff() {
    echo $EONOFF
    if swpdev ; then
        stop
    else
        start
    fi
}
case "$1" in
start)
    start
  ;;
stop)
    stop
  ;;
create)
    create
  ;;
delete)
    delete
  ;;
list)
    list
  ;;
--help)
    echo $(gettext 'Commands')':'
    echo 'start         - '$ESTART
    echo 'stop          - '$ESTOP
    echo 'create        - '$ECREATE
    echo 'delete        - '$EDELETE
    echo 'list          - '$ELIST
    echo 'onoff         - ('$(gettext 'default')') '$EONOFF
  ;;
*)
    onoff
  ;;
esac
exit 0


Работает и с initscripts и с systemd, можно запускать вручную!
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja, это уже, наверно, неактуально? Как сейчас шифруемся? :)
nafanja, а смысл шифровать своп, в раму запихнуть его не проще?
In Tux We Trust
redix
а смысл шифровать своп
в него могут выгружаться секретные данные. и их от туда можно достать при желании... а так своп одноразовый.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
SWAP в основном используется при hibernate …. а вот с зашифрованным swap (раздел или файл), как пишут, имеются проблемы, а значит и смысл в нем как бы и отпадает … а в процессе работы SWAP заполняется не так уж и часто да и всегда можно его почистить, если попали важные данные ...
UPD ….... а вообще, имея физический доступ к компу, инфу могут извлечь не многие (имею ввиду из памяти) ….... а вот провести анализ этой инфы и узнать что то важное … еще намного меньше ...
Не верите, попробуйте извлечь и найти свой пароль из памяти …...
Ошибки не исчезают с опытом - они просто умнеют
vasek
Не верите, попробуйте извлечь и найти свой пароль из памяти …...
Я читал что это можно сделать. И прочитать оперативку впридачу. Понятно, что это не так просто.
In Tux We Trust
redix
Я читал что это можно сделать. И прочитать оперативку впридачу. Понятно, что это не так просто.
Да считать то можно ...... это не проблема ............ приходилось даже считывать при горячей перегрузке ...... а вот капаться в ней .... намного сложней .......
PS ... сейчас ввел пароль для sudo и пароль для su ...... поюзал память ..... пароли лежать в открытом виде ...... !!!!!
Ошибки не исчезают с опытом - они просто умнеют
Пароль для su хранится в памяти ограниченное время.
In Tux We Trust
redix
Пароль для su хранится в памяти ограниченное время.
Хранится столько, пока не вытеснится ........ нет процедуры, которая ведет учет времени и очищает нужные участки памяти
Можешь проверить ....
Ошибки не исчезают с опытом - они просто умнеют
vasek
PS ... сейчас ввел пароль для sudo и пароль для su ...... поюзал память ..... пароли лежать в открытом виде ...... !!!!!
ну вот и в своп они могут попасть....

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

и конечно, спящий режим работать не будет!
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
 
Зарегистрироваться или войдите чтобы оставить сообщение.