如何伪造 Linux 中特定程序的已安装 RAM 量?

如何伪造 Linux 中特定程序的已安装 RAM 量?

我在跑博恩克在我的旧上网本上,它只有 2 GB 板载 RAM,这不足以运行某些任务。比如,他们拒绝这样做,因为他们看到设备的 RAM 有多低。

我的 zRAM 启用了 backing_dev 和 zstd 算法,所以实际上,内存不足从来都不是问题,在特别困难的情况下我总是可以使用systemd-run --scope -p(我已经使用它成功运行了需要 +16 GB RAM 的程序)

如何让 BOINC 认为我的笔记本电脑安装了超过 2 GB 的 RAM,以便我可以运行那些要求较高的任务?

答案1

创建一个假的meminfo并将其安装在原件上/proc/meminfo

$ mkdir fake-meminfo && cd fake-meminfo
$ cp /proc/meminfo .
$ chmod +w meminfo
$ sed -Ei 's,^MemTotal:        [0-9]+ kB,MemTotal:        8839012 kB,' meminfo   # replace 8839012 with an amount of RAM you want to pretend you have
$ free -m  # check how much RAM you have now
              total        used        free      shared  buff/cache   available
Mem:           7655        1586        3770         200        2298        5373
$ sudo mount --bind meminfo /proc/meminfo                                 
$ free -m  # check how much RAM you pretend to have after replacing /proc/meminfo
              total        used        free      shared  buff/cache   available
Mem:           8631        2531        3800         201        2299        5403
$ sudo umount /proc/meminfo # restore an original /proc/meminfo
$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7655        1549        3806         200        2299        5410

您还可以在与系统其他部分隔离的安装命名空间中运行上述命令。参考: 从伪造的 /proc/meminfo 中恢复

答案2

经过一番思考,我这样做了:

开始于nano /proc/meminfo

MemTotal将、MemFreeMemAvailable和更改SwapTotalSwapFree所需值并保存到 ~./meminfo

给用户 boinc 密码sudo passwd boinc和 shell -- sudo nano /etc/passwd,找到该行boinc:x:129:141:BOINC core client,,,:/var/lib/boinc-client:/usr/sbin/nologin并将部分更改/usr/sbin/nologin/bin/bash

然后我使用这里的示例伪造了 RAM 信息从伪造的 /proc/meminfo 中恢复

unshare -m bash    #unshares mount spaces, for specific program "bash" only (and for whatever you want to launch from it)
mount --bind ~./meminfo /proc/meminfo      #substitutes real meminfo data with fake one

并确认free它有效

          total        used        free         shared     buff/cache  available
Mem:     2321456       21456     2300000           0           0     2300000
Swap:     5000000     1000000     4000000

然后切换到用户su - boinc并启动程序

boinc --check_all_logins --redirectio --dir /var/lib/boinc-client

然后可以照常启动 BOINC Manager

完全成功,之前拒绝运行的任务开始下载,然后运行,没有任何并发​​症

相关内容