在命令行中输入命令并不是一个好主意,会引起安全问题。而且假如你决定去写一个应用linux隐藏mysql版本信息,而这个应用须要在命令行中使用密码或则其他敏感信息。这么,你能通过以下方式严禁系统的其他用户轻易的看见这种敏感数据呢?,类似MySQL在ps命令下隐藏密码。
假定我这儿系统里两个用户,一个是root,一个是dabu。测试系统为centos6.5在根据下边的步骤做:
[[emailprotected]~]#sudabu#切换到dabu这个帐号
[[emailprotected]~]$cd~#切换到dabu的home目录
[[emailprotected]~]$touchpwhide.c#创建pwhide.c文件
[[emailprotected]~]$ls
显示:
pwhide.c
将下边的代码保存到pwhide.c:
#include
#include
#include
#include
intmain(intargc,char*argv[])
inti=0;
pid_tmypid=getpid();
if(argc==1)
return1;
printf("argc=%dandargumentsare:n",argc);
for(i;i<a style='color:#0000CC;font-size:16px;' rgc;i++)
printf("%d=%sn",i,argv[i]);
printf("Replacingfirstargumentwithx:es...Nowopenanotherterminalandrun:psp%dn",(int)mypid);
fflush(stdout);/
memset(argv[1],'x',strlen(argv[1]));
return0;
#include
#include
#include
#include
intmain(intargc,char*argv[])
inti=0;
pid_tmypid=getpid();
if(argc==1)
return1;
printf("argc=%dandargumentsare:n",argc);
for(i;i<a style='color:#0000CC;font-size:16px;' rgc;i++)
printf("%d=%sn",i,argv[i]);
printf("Replacingfirstargumentwithx:es...Nowopenanotherterminalandrun:psp%dn",(int)mypid);
fflush(stdout);/
memset(argv[1],'x',strlen(argv[1]));
return0;
之后编译pwhide.c,命令如下:
[[emailprotected]~]$gcc-ohidepwhide.c#编译后的文件叫hide
[[emailprotected]~]$ls
显示:
hidepwhide.c
用编译后的程序进行测试:
[[emailprotected]~]$./hide//作为参数(当然就是密码)进行测试
显示:
argc=2andargumentsare:
0=./hide
1=
Replacingfirstargumentwithx:es...Nowopenanotherterminalandrun:psp15585
注意:psp15585。你可能和我的不一样,由于pid每次运行linux隐藏mysql版本信息,就会变的。你显示哪些数字,旁边就用哪些数字。
显示出前面结果后,不再进行任何操作,也不关掉这个终端窗口(命令窗口)。之后在用root帐号登入,就是相当于同时开两个终端窗口。输入下边的命令:
[[emailprotected]~]#psp15585#就是运行./hide后,得到的该程序的pid
显示:
PIDTTYSTATTIMECOMMAND
15585pts/0S+0:00./hidexxxxxxxxx//共有9个字符,所以这儿就显示9个x
由此测试的结果,我们晓得了这个方式才能使MySQL怎样在ps命令下隐藏命令行中的密码。以这种推,在写其他程序后red hat linux,就晓得怎样使用这个方式来让程序在ps命令下隐藏命令行参数。
为了简明起见,里面的代码可能不怎样好移植到其他平台,而且它可以工作在linux上,而且如愿的抒发了关键点。在其它环境linux vi,如FreeBSD,你可以使用系统调用setproctitle()来为你做这些苦力活。关键的一点是重画argv相关阅读:
WindowsXP用户难以登陆iTunes账号难以访问订购过的影视剧等
jquery用offset()方式获得元素的xy座标
Spring不能注入Static变量的缘由及Spring注入静态变量
原生Ajax和jQueryAjax的区别示例剖析
安装sqlserver2008后再安装sql2005找不到本地服务器的解决方式
Javascript基础教程之数据类型(数值Number)
sql将一个表中的数据插入到另一个表中的技巧
Android使用WebView播放flash的方式