是否可以卸载正在运行程序的驱动器?

是否可以卸载正在运行程序的驱动器?

我想在云服务器上运行一些机密程序。为了防止它被复制,我可以将其加密到驱动器中,然后安装解密的驱动器来运行它。但是,我想在解密的驱动器在内存中运行后卸载它,以最大限度地缩短解密的时间窗口。

有可能这样做吗?或者 Linux 会锁定正在运行该程序的驱动器吗?

类似的情况是在驱动器上运行程序,然后卸载该驱动器。

答案1

不完全退出。例如,您可以移除正在运行软件的 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 的东西,以便 ramdisk 中的文件夹被加密。

相关内容