在命令行中输入命令并不是一个好主意,会造成安全问题。但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息。那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?,类似MySQL在ps命令下隐藏密码。

假设我这里系统里两个用户,一个是root ,一个是dabu 。测试系统为centos 6.5在按照下面的步骤做:

[root@dabu.info ~]#su dabu #切换到dabu这个账号

[dabu@dabu.info ~]$cd ~ #切换到dabu的home目录

[dabu@dabu.info ~]$ touch pwhide.c #创建 pwhide.c文件

[dabu@dabu.info ~]$ls

显示:

复制代码 代码如下:

pwhide.c

将下面的代码保存到 pwhide.c :

#include

#include /* unix类系统定义符号常量的头文件*/

#include /* 字符数组的函数定义的头文件*/

#include /* Unix/Linux系统的基本系统数据类型的头文件*/

int main(int argc, char *argv[]) /*形参argc指命令行中参数的个数(包括执行文件本身)。形参argv是一个纸箱字符串的指针数组*/

{

int i = 0;

pid_t mypid = getpid(); /*获得该程序运行时候的pid*/

if (argc == 1) /*如果argc参数个数等于1,按要求,应该argc要为2才行*/

return 1; /*异常退出*/

printf("argc = %d and arguments are:\n", argc); /*打印argc参数个数*/

for (i ; i < argc ; i++) /*打印i序号,以及对应的argv数组指针元素*/

printf("%d = %s\n" ,i, argv[i]); /*打印i序号,以及对应的argv数组指针元素*/

printf("Replacing first argument with x:es... Now open another terminal and run: ps p %d\n", (int)mypid); /*打印该字符串和该程序是的pid*/

fflush(stdout); //*清空缓冲区,并打印其内容*/

memset(argv[1], 'x', strlen(argv[1])); /*注意,这里是本文的重点和关键点。(原文http://www.dabu.info/?p=5150)就是利用memset(void *s, int c, size_t n)函数用x来覆盖密码的每个字符*。你也可以将x替换为 a ,然后重新编译运行,再ps看看有什么不同/

getc(stdin); /* 等待并获取键盘输入,其实这里主要的作用是保持该c程序在 运行状态,这样才能通过ps 查看pid来观察密码是否被隐藏 。所以在这个函数运行后,不能再有任何的键盘操作 */

return 0; /* 正常退出 */

#include

#include /* unix类系统定义符号常量的头文件*/

#include /* 字符数组的函数定义的头文件*/

#include /* Unix/Linux系统的基本系统数据类型的头文件*/

int main(int argc, char *argv[]) /*形参argc指命令行中参数的个数(包括执行文件本身)。形参argv是一个纸箱字符串的指针数组*/

{

int i = 0;

pid_t mypid = getpid(); /*获得该程序运行时候的pid*/

if (argc == 1) /*如果argc参数个数等于1,按要求,应该argc要为2才行*/

return 1; /*异常退出*/

printf("argc = %d and arguments are:\n", argc); /*打印argc参数个数*/

for (i ; i < argc ; i++) /*打印i序号,以及对应的argv数组指针元素*/

printf("%d = %s\n" ,i, argv[i]); /*打印i序号,以及对应的argv数组指针元素*/

printf("Replacing first argument with x:es... Now open another terminal and run: ps p %d\n", (int)mypid); /*打印该字符串和该程序是的pid*/

fflush(stdout); //*清空缓冲区,并打印其内容*/

memset(argv[1], 'x', strlen(argv[1])); /*注意,这里是本文的重点和关键点。(原文http://www.dabu.info/?p=5150)就是利用memset(void *s, int c, size_t n)函数用x来覆盖密码的每个字符*。你也可以将x替换为 a ,然后重新编译运行,再ps看看有什么不同/

getc(stdin); /* 等待并获取键盘输入,其实这里主要的作用是保持该c程序在 运行状态,这样才能通过ps 查看pid来观察密码是否被隐藏 。所以在这个函数运行后,不能再有任何的键盘操作 */

return 0; /* 正常退出 */

}

然后编译 pwhide.c ,命令如下:

[dabu@dabu.info ~]$ gcc -o hide pwhide.c #编译后的文件叫 hide

[dabu@dabu.info ~]$ ls

显示:

复制代码 代码如下:

hide pwhide.c

用编译后的程序进行测试:

[dabu@dabu.info ~]$ ./hide dabu.info //dabu.info作为参数(其实就是密码) 进行测试

显示:

argc = 2 and arguments are:

0 = ./hide

1 = dabu.info

Replacing first argument with x:es... Now open another terminal and run: ps p 15585

注意:ps p 15585 。你可能和我的不一样,因为pid每次运行,都会变的。你显示什么数字,后面就用什么数字。

显示出上面结果后,不再进行任何操作,也不关闭这个终端窗口(命令窗口)。然后在用root账号登录,就是相当于同时开两个终端窗口。输入下面的命令:

[root@dabu.info ~]#ps p 15585 #就是运行 ./hide dabu.info后,得到的该程序的pid

显示:

PID TTY STAT TIME COMMAND

15585 pts/0 S+ 0:00 ./hide xxxxxxxxx //dabu.info 共有9个字符,所以这里就显示9个x

由此测试的结果,我们知道了这个方法能够使MySQL如何在ps命令下隐藏命令行中的密码。以此类推,在写其他程序后,就知道如何使用这个方法来 让程序 在ps命令下隐藏命令行参数。

为了简明起见,上面的代码可能不怎么好移植到其他平台,但是它可以工作在linux上,并且如愿的表达了关键点。在其它环境,如FreeBSD,你可以使用系统调用setproctitle() 来为你做这种苦力活。关键的一点是重写argv

本文标题: MySQL在Linux系统中隐藏命令行中的密码的方法

本文地址: http://www.cppcns.com/shujuku/mysql/127180.html

mysql隐藏密码_MySQL在Linux系统中隐藏命令行中的密码的方法相关推荐

  1. linux 查找删除目录,Linux运维知识之Linux系统下find命令递归删除查找目录的方法...

    本文主要向大家介绍了Linux运维知识之Linux系统下find命令递归删除查找目录的方法,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 本文将会讲述如何使用linux系统下的 ...

  2. AlexeyAB中训练命令行中 -map 以及 -dont_show

    AlexeyAB(darknet yolov3)中训练命令行中 -map 以及 -dont_show 在darknet训练自己的数据中,在命令行中加入-map 和 -dont_show -map是为了 ...

  3. linux安装virtualbox命令,在Linux中从命令行查找Virtualbox Version的方法

    在我的Ubuntu无头服务器上使用Virtualbox时,我需要找到Virtualbox的版本,如果是GUI,我可以通过导航到Virtualbox->About->Help轻松找到它,但我 ...

  4. linux中可以使用以下命令查看文件内容,在Linux服务器中使用命令行中查看文件内容...

    通常查看文件内容的方法是简单地在文本编辑器中打开它.然而,为了更快速地查看,事实上,也为了在shell脚本中实现自动化,使用文本编辑器的方法并不适合. 在Linux中,有很多命令可以解决这个问题:在命 ...

  5. linux 超级用户密码忘了,Linux系统下超级管理员root用户的密码忘记了怎么办?

    一. 背景说明: 我们在日常运维工作中,多多少少都会遇到系统管理员密码忘记了,或是上一个人员离职没有做好交接工作,或是管理密码的表格被误更新了等等可能出现的状况,那么,今天阿龙给大家分享下Linux系 ...

  6. linux系统进入管理员命令行,Linux的15个命令行别名,帮系统管理员提升工作效率!...

    Linux命令行别名非常适合帮助你提高工作效率.默认情况下,你安装的Linux发行版中包含一些别名. 以下是Fedora 27中命令行别名的一个示例: 命令alias显示现有别名的列表.设置别名其实很 ...

  7. 引导命令启动Linux系统,使用Grub命令行来营救Linux操作系统

    在采用Grub启动的Linux系统中,当由于操作人员无意破坏/boot/grub/menu.lst文件后,Linux系统就无法通过grub界面启动了,只能通过Grub命令行来引导.营救启动操作系统. ...

  8. linux系统无法用命令行,无法在Linux操作系统上从命令行启动Kitchen Pentaho作业

    无法使用shell脚本启动作业,即使作业在gui上运行良好,但未能从命令行启动作业,并且作业执行失败.有人能帮我吗?下面是我得到的错误 2019/01/31 15:07:20-勺子-错误(BuildG ...

  9. linux系统卸载程序命令行,Linux系统中完全卸载删除程序的命令

    如果您在数据中心服务器或本地服务器中使用Ubuntu或任何其他基于debian的发行版系统,您可能会遇到需要卸载软件的情况.一般情况下,您会登录并运行命令:sudo apt-get remove pa ...

最新文章

  1. python redis集群_Python3 redis集群连接 (带密码验证)
  2. 【控制】遗传算法(GA,Genetic Algorithm)及 Matlab 实现 代码详细版
  3. boost::mp11::mp_replace相关用法的测试程序
  4. [转载] 1.1Java使用JDBC原生方式连接MySql数据库
  5. 信息学奥赛一本通(1160:倒序数)
  6. 完全卸载sql2005
  7. Springboot-实现热部署
  8. ICCV2021 | 如何高效视频定位?QMUL北大Adobe强强联手提出弱监督CRM,性能SOTA
  9. NeHe OpenGL教程 第四十四课:3D光晕
  10. (匹配)The Accomodation of Students --HDU --2444
  11. 用vscode创建一个c项目_vscode怎么创建C语言项目
  12. 域服务器系统建设方案,AD域及Exchange部署专项方案.doc
  13. php qq邮箱群发
  14. 朗兰兹纲领:关于数学大一统的伟大构想
  15. CodeIgniter 源码解读之模型
  16. 很抱歉,你不涨工资,正是因为你“太努力”!
  17. 使用photoshop对图片像素级的标注
  18. 本地maven archetype 骨架使用
  19. XDoj 1037 希希的多项式 (python)
  20. Android Studio报错:Incompatible types. Required:android.app.ActionBar及Android如何隐藏系统默认标题栏

热门文章

  1. 理解什么是MyBatis?
  2. 全球安全行业融资收购简报(2016年2月)
  3. 《Haskell并行与并发编程》——第2章,第2.1节惰性求值和弱首范式
  4. 计算机基础名词概念(一)
  5. 游戏行业两大核心问题:数据挖掘与安全
  6. ubuntu如何打开命令行
  7. 测中策---我的Web自动化测试思路
  8. 软件外包是中国程序员的大金矿,大家一起来挣×××吧
  9. python获取列表中前N大的索引
  10. 【python教程入门学习】Python函数定义及传参方式详解(4种)