linxu传统口令与影子口令
来源:互联网 发布:网络实验室建设方案 编辑:程序博客网 时间:2024/04/29 02:27
/etc/passwd是存放用户的基本信息的口令文件。该口令文件的每一行都包含由6个冒号分隔的7个域:username: passwd: uid: gid: comments: Directory: shell
以上从左到右7个域分别叙述如下:
username:是用户登陆使用的名字。
passwd:是口令密文域。密文是加密过的口令。如果口令经过
shadow则口令密文域只显示一个x,通常,口令都应该经过shadow以确保安全。如果口令密文域显示为*,则表明该用户名有效但不能登陆。如果口令密文域为空则表明该用户登陆不需要口令。
uid:系统用于唯一标识用户名的数字,uid系统是这样分配的:
0 超级用户
1~10 守护程序和伪用户
11~99 系统保留用户
100~ 正常用户
gid:表示用户所在默认组号。由/etc/group文件决定。
comments:描述用户的个人信息。
directory:定义用户的初始工作目录。
shell:就是指定用户登陆到系统后启动的外壳程序。
Linux使用不可逆的加密算法如DES来加密口令,由于加密算法是不可逆的,所以从密文是
得不到明文的。但问题在于,/etc/passwd文件是全局可读的,加密的算法是公开的,如果有恶意用户取得了/etc/passwd文件,他就可以穷举所有可能的明文通过相同的算法计算出密文进行比较,直到相同,于是他就破解了口令。因此,针对这种安全问题,Linux/Unix广泛采用了“shadow(影子)”机制,将加密的口令转移到/etc /shadow文件里,该文件只为root超级用户可读,而同时/etc/passwd文件的密文域显示为一个x,从而最大限度减少密文泄露的机会。
/etc/shadow文件的每行是8个冒号分割的9个域,格式如下:username: passwd: lastchg: min: max: warn: inactive: expire: flag
其中:
lastchg:表示从1970年1月1日起到上次修改口令所经过的天数。
min:表示两次修改口令之间至少经过的天数。
max:表示口令还会有效的最大天数,如果是99999则表示永不过期。
warn:表示口令失效前多少天内系统向用户发出警告。
inactive:表示禁止登陆前用户名还有效的天数。
expire:表示用户被禁止登陆的时间。0
flag:无意义,未使用。
启用影子口令
RedHat Linux缺省安装shadow,如果你发现你的系统的/etc/passwd文件仍然可以看到密文,说明你没有启用shadow。可以执行pwconv来启用shadow。
在RedHat Linux 7.1中,影子工具包(shadow utils)包含了几个工具支持以下功能:
传统口令与影子口令之间的转换工具:pwconv、pwunconv。
验证口令,组和相应的影子文件:pwck、grpck。
以符合工业标准的方法增加、删除和修改用户帐户:useradd、usermod、userdel。
以符合工业标准的方法增加、删除和修改用户组:groupadd、groupmod、groupdel。
以符合工业标准的方法管理文件/etc/group。
无论系统是否启用shadow机制,上述工具都可以正常使用。
更改Linux口令的最短长度Linux系统默认最短口令长度为5个字符,这个长度不足以保证口令的健壮性,应该改为最短8个字符,编辑/etc/login.defs文件,在此文件中,将PASS_MIN_LEN
5改为:PASS_MIN_LEN8
PAM是pluggable authentication modules系统的一个实现,它最初有sun开发;很快被Linux社区的接受,并且开发了更多的模块。其目标是提供一套可用于验证用户身份的函数库,从而将认证从应用程序开发中独立出来。下面是一些PAM在口令保护中的简单例子。
使用pam-tally.so
pam-tally.so是一个PAM模快,用于监视用户登陆失败次数并该值超过特定值时做出反映。例如用户在登陆3次失败后,其帐号会被锁定一段时间,或永久锁定(或到联系到系统管理员)。将下面行添加到/etc/pam.d/login:account required /lib/security/pam-tally.so deny=3 no-magic-root这行配置pam-tally.so ,使之在用户连续3次登陆失败后锁定其帐号。这样攻击者就只有3次猜测口令的机会,之后就会被剔出。pam-cracklib.so 是alecmuffett编写的PAM版本的cracklib库,用于检查口令的强度,他首先调用cracklib例程来测试口令是否能被破解。在通过这个测试后再进行如下测试:
口令是否回文?
新口令是不是旧口令的大小写变换版本?
新口令和旧口令是否非常相似?
口令是否太短?
新口令是不是旧口令的移位版本?
要以此测试每个新口令。只需要在
/etc/pam.d/passwd文件中用如下行替换原来pam-unix.so模块;passWord required pam-cracklib.so retry=3 password required pam-unix.so use-authtok md5这样就给用户三个机会来选择合适的健壮口令。也可以强制口令的长度:
password required pam-cracklib.so retry=3 minlength=10
password required pam-unix.so use-authtok md5
强制MD5散列,有些linux发布默认配置下使用DES散列,而非MD5散列。要想强制所有新口令都以MD5散列方式保存,只需直接把md5添加到/etc/pam.d/passwd文件的pam-unix.so行中:password required pam-unix.so use-authtok md5 下面这段perl代码可用来生成强口令
# ! /usr/bin/perl -w
#passwd-generator.pl
use strict;
my @chars=(33..91,93..126);
my $num-chars=@chars;
my $length;
my $punt='! "#$%&'()*+,-./:;<=>?@[\\]^{}~ ';
print "enter number of characters in your passwd:"
chmop($length=<STDIN>);
die "length must be greater than 6!" if $length<=5;
while(1){
my $password=' ';
foreach (1..Slength){
Spassword.=chr(Schars[int(rant(Snum-chars))]);
}
if($passwd=~/[a-z]/ and $passwd=~/[A-Z]/ and
$passwd=~/[0-9]/ and $passwd=~/[$punt]/ {
print Spassword, "\n"
exit;
}
}
- linxu传统口令与影子口令
- 动态口令与数字证书简介
- ASM认证与口令文件
- 口令加密
- 动态口令
- 口令管理
- 手机口令
- 口令管理
- 动态口令
- 遗忘口令
- 解除账户锁定与更改口令
- 恢复IE口令:理论与实践
- Orcal的用户名与口令介绍
- ORACLE口令文件验证与操作系统验证
- Linux中用户与口令的管理
- 口令限制参数+口令管理+查看口令限制参数
- 实现键盘输入口令,口令用*号掩盖
- 路由器口令设置和口令恢复
- poj 3259 Wormholes题解
- BZOJ-2301-[HAOI2011]Problem b
- [Angularjs]ng-select和ng-options
- 自定义View
- 2016sdau课程练习专题三 1004
- linxu传统口令与影子口令
- query纠错
- 架构设计:系统间通信(1)——概述从“聊天”开始上篇
- Ubuntu下LAMP环境部署
- laravel框架中使用model层
- 在myeclipse10.6版本中,安装git插件以及正确导入项目的问题
- 矩阵 快速幂
- 自动轮播
- 如何修改Main.storyboard文件里模拟器的大小