热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

正确处理Linux里的密码

文章标题:正确处理Linux里的密码。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  在Linux里,有很多API函数是用来处理密码的,但是这只能解决一半的问题。你不得不使用好的密码处理办法。例如,只有在绝对必要的时候才使用纯文本密码这种(安全)策略。
  
  暴露纯文本(密码内容)的唯一机会是在进行身份验证时询问用户密码的时候。有一些可用的API函数能够减少这种风险,包括加密,这应该在获得用户密码之后立即进行。
  
  密码处理的第一条原则是,绝对不要将纯文本的密码写到磁盘上——即使是你会立即删掉的临时文件。一旦数据到了磁盘上,你在使用之后就很难保证数据没有丢失。
  
  虽然这个原则看起来似乎很简单,但是你必须要记住:Linux使用的是虚拟内存。如果你加载了交换分区,内存(里的内容)会在任何时候被写到磁盘上。为了防止密码缓冲区被写到交换分区上,你可以使用mlock API调用:
  
  const intsz = 25;
  char *buf = malloc(sz);
  mlock(buf, sz);
  memset(buf, 0, sz);
  
  为了确保缓冲区真的被锁定了,你必须至少向每个内存页写入一个值。
  
  另一个重要的原则是,决不要将输入的密码反馈到终端上。你可以编写自己的函数或者使用getpass函数,它像下面这样工作:
  
  const char prompt[] = "Password: ";
  char *pword = NULL;
  pword = getpass(prompt);
  
  有时候你无法使用getpass。在这样的情况下,你将需要编写自己的getpass函数。下面就是一个例子:
  
  #include
  #include
  
  ssize_t
  my_getpass (char **lineptr, size_t *n, FILE *stream)
  {
  structtermios old, new;
  intnread;
  
  /* Turn echoing off and fail if we can't. */
  if (tcgetattr (fileno (stream), &old) != 0)
  return -1;
  new = old;
  new.c_lflag &= ~ECHO;
  if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
  return -1;
  
  /* Read the password. */
  nread = getline (lineptr, n, stream);
  
  /* Restore terminal. */
  (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
  
  return nread;
  }
  return nread;
  }
  
  很显然,传递到函数里的缓冲区应该首先被锁定。
  
  可插拔验证模块(PAM)
  
  PAM是一个模块化的系统,它将验证、密码管理、会话管理,以及帐号管理抽象出来。它授权被编写用来同PAM一起工作的应用程序来使用各种模块,并允许这些模块被卸载或者被别的模块替换,而不需要重新编写应用程序。
  
  PAM允许你以一种安全的方式进行本文所讨论的所有事情,而不要在你为不同系统编写新应用程序的时候从头再来。除非有什么特定的理由不使用它,我都建议你使用PAM。你会发现它要比实现一个更老的系统或者编写一个你自己的系统更加理想。
推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
author-avatar
手机用户2502885123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有