我想在云服务器上运行一些机密程序。为了防止它被复制,我可以将其加密到驱动器中,然后安装解密的驱动器来运行它。但是,我想在解密的驱动器在内存中运行后卸载它,以最大限度地缩短解密的时间窗口。
有可能这样做吗?或者 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 中的文件夹被加密。