如何从 htop 隐藏 system() 函数中传递的系统调用
How to hide the system call passed in the system() function from htop
考虑这个 C 代码片段:
snprintf(buf, sizeof(buf), "<LONG PROCESS WITH PARAMETERS HAVING SENSITIVE INFO>";
system(buf);
现在在编译和执行时,进程的 "sensitive" 参数可以在类似 htop
的程序中看到
我不想这样。
我想知道是否有办法隐藏在 system()
中传递的所有内容,这样 htop
将只显示编译后的可执行文件的名称(即 htop 只显示 a.out
一直)
在我使用过的所有类 Unix 系统中,包括许多 Linux 变体,程序有可能覆盖它的命令行参数 "from inside"。所以在 C 中我们可能会使用,例如 strcnpy()
只是为了空白 argv[1]
,argv[2]
等的值。当然,您需要先处理或复制这些参数,并且您需要注意不要覆盖每个 argv
.
的特定限制之外的内存
我认为 Unix 不能保证这种方法的可移植性或持续适用性,但我已经使用它至少二十年了。它从 ps
等的随意使用中隐藏了命令,也从 /proc/NN/cmdline
中隐藏了命令,但它不会阻止 shell 将命令行存储在某处(例如,在 shell 历史文件)。所以它只是防止随意窥探。
更好的方法是一开始就不要进入这种情况——让程序从文件(可以加密)、环境变量或使用证书中获取输入。或者几乎任何东西,事实上,除了命令行。
考虑这个 C 代码片段:
snprintf(buf, sizeof(buf), "<LONG PROCESS WITH PARAMETERS HAVING SENSITIVE INFO>";
system(buf);
现在在编译和执行时,进程的 "sensitive" 参数可以在类似 htop
的程序中看到
我不想这样。
我想知道是否有办法隐藏在 system()
中传递的所有内容,这样 htop
将只显示编译后的可执行文件的名称(即 htop 只显示 a.out
一直)
在我使用过的所有类 Unix 系统中,包括许多 Linux 变体,程序有可能覆盖它的命令行参数 "from inside"。所以在 C 中我们可能会使用,例如 strcnpy()
只是为了空白 argv[1]
,argv[2]
等的值。当然,您需要先处理或复制这些参数,并且您需要注意不要覆盖每个 argv
.
我认为 Unix 不能保证这种方法的可移植性或持续适用性,但我已经使用它至少二十年了。它从 ps
等的随意使用中隐藏了命令,也从 /proc/NN/cmdline
中隐藏了命令,但它不会阻止 shell 将命令行存储在某处(例如,在 shell 历史文件)。所以它只是防止随意窥探。
更好的方法是一开始就不要进入这种情况——让程序从文件(可以加密)、环境变量或使用证书中获取输入。或者几乎任何东西,事实上,除了命令行。