在Linux中隐藏C程序的命令行参数

如何隐藏在Linux中运行的C程序的命令行参数,使其不能被其他用户通过“w”,“ps auxwww”或类似命令看到?

Solutions Collecting From Web of "在Linux中隐藏C程序的命令行参数"

修改程序中argv的内容:

 #include <stdio.h> #include <time.h> void delay (long int msecs) { clock_t delay = msecs * CLOCKS_PER_SEC / 1000; clock_t start = clock(); while (clock() - start < delay); } void main (int argc, char **argv) { if (argc == 2) { printf ("%s\n", argv[1]); delay (6000); argv[1][0] = 'x'; argv[1][1] = '.'; argv[1][2] = 'x'; printf ("%s\n", argv[1]); delay (5000); printf ("done\n"); } else printf ("argc != 1: %d\n", argc); } 

调用:

 ./argumentClear foo foo xx done 

结果,由ps查看:

 asux:~ > ps auxwww | grep argu stefan 13439 75.5 0.0 1620 352 pts/5 R+ 17:15 0:01 ./argumentClear foo stefan 13443 0.0 0.0 3332 796 pts/3 S+ 17:15 0:00 grep argu asux:~ > ps auxwww | grep argu stefan 13439 69.6 0.0 1620 352 pts/5 R+ 17:15 0:02 ./argumentClear xx stefan 13446 0.0 0.0 3332 796 pts/3 S+ 17:15 0:00 grep argu 

备注:我的延迟功能不能按预期工作。 程序运行时间约为2-3秒,而不是11秒钟。 我不是大的C程序员。 :)这里的延迟功能需要改进。

这实际上是相当困难的(我不会说不可能,因为可能有一种我不知道的方式),特别是如果用户有权访问/proc文件系统进程。

也许防止人们看到你的命令行参数的最好方法是不要使用命令行参数:-)

您可以将您的参数存储在一个名为(例如) myargs.txt的适当保护的文件中,然后运行您的程序:

 myprog @myargs.txt 

当然,你将不得不修改myprog来处理“文件中的参数”场景。

或者,您可以将参数设置为环境变量,并让您的程序使用getenv

但是,我并不知道有什么方法可以保护您免受适当授权的进程(如由root运行的进程)。

据我所知,这些信息存储在内核空间中。 因为任何程序都可以查询proc文件系统来查看命令行参数(这就是ps所做的),所以在编写内核模块的时候,您将无法隐藏这些信息。

作为替代,你可以在你的命令行参数上读取stdin,然后填充一个数组传递给命令行参数处理程序。 或者,更好的是,添加对程序的支持来读取包含相同命令行参数信息的配置文件,并设置权限,以便只有拥有者才能读取该文件。

我希望这有帮助。