Я хочу запустить какую-нибудь конфиденциальную программу на облачном сервере. Чтобы защитить его от копирования, я могу зашифровать его на диск и смонтировать расшифрованный диск для его запуска. Однако я хочу отключить расшифрованный диск после того, как он настроит работу в памяти, чтобы минимизировать временное окно расшифровки.
Возможно ли это когда-нибудь? Или линукс блокирует этот диск для запущенной программы?
Аналогичная ситуация - запустить программу на диске, а затем отключить этот диск.
Нет чисто. Вы можете, например, удалить USB-накопитель, с которого работаете программное обеспечение. Если программе не нужны никакие ресурсы оттуда, то ничего не произойдет, но она не завершится чисто.
$ sudo dd if=/dev/zero of=/tmp/disk bs=1M count=100
$ sudo mkfs -t ext4 /tmp/disk
$ sudo mount /tmp/disk /mnt
$ sudo cp -a /bin/bash /mnt/newbash
$ /mnt/newbash
Если вы перейдете к другому терминалу и попытаетесь umount /mnt
система сообщит вам, что она занята, и fuser -m /mnt
перечислит newbash как процесс, использующий его, а также lsof
.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
newbash 903 root txt REG 7,0 1168776 12 /mnt/newbash
Даже если файловая система используется, вы можете сделать umount --lazy /mnt
НО это могло иметь неприятные последствия. Вы не знаете, находится ли в памяти весь исполняемый файл, и системе может потребоваться, например, извлечь его часть.
Это было бы просить неприятностей. Существует возможность избежать бесконечного ожидания ресурсов, к которым у вас больше нет доступа, например, при завершении работы.
Если все, что вам нужно, это запустить его в памяти, вы можете создать ramdisk, скопировать его туда и запустить.
Вы даже можете настроить что-то вроде encfs, чтобы папка на RAM-диске была зашифрована.