正确的处理Linux操作系统里的密码
2007-06-07 03:57
232 查看
在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。你会发现它要比实现一个更老的系统或者编写一个你自己的系统更加理想。
相关文章推荐
- linux操作系统root管理员用户密码丢失之解决方法!
- 【Linux操作系统分析】中断和异常(1)——中断描述符表IDT,I/O中断处理,中断向量
- 解决linux 2.6.21上sierra.ko驱动无法正确处理Air card 313U modem
- linux X界面 输入密码正确,但是无法登陆系统,命令行界面可以登陆
- linux系统忘记root密码的处理
- Linux故障处理(二)更改root密码和修复文件系统
- Linux下wordpress,mysql密码修改后处理
- 忘记虚拟机密码的处理方式及Linux机器相互登录1.13-1.16
- linux中文本操作界面登录时,用户名,密码均正确,却链接错误
- 在Linux操作系统下如何正确查看Raid信息
- linux不知道账户密码,强制找回 和 WordPress 没有阅读量和 定时器发布失败的处理
- 【linux系统学习笔记】运行startx后Ubuntu密码正确进不去的问题
- Linux操作系统下6个应急处理小常识
- 如何在没有密码的情况下进入Linux操作系统
- Linux下忘记mysql密码处理方法
- 故障排除 Linux操作系统死机处理方法总结
- linux下忘记mysql 密码处理办法
- 【Linux操作系统分析】中断和异常(1)——中断描述符表IDT,I/O中断处理,中断向量
- 怎么处理 linux 操作系统显现中文乱码疑问?
- Linux用户输入正确密码无法登陆