Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2007440
  • 博文数量: 369
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 4271
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-21 00:59
文章分类

全部博文(369)

文章存档

2013年(1)

2011年(2)

2010年(10)

2009年(16)

2008年(33)

2007年(146)

2006年(160)

2005年(1)

分类:

2006-03-01 17:39:10

用户密码是OS认证用户的一个重要参数,如果一个用户的密码强度不够,那么这个机器就很容易被人入侵,作为系统管理员来说,在初始创建用户和密码的时候想出来,或者是任意敲出来一个密码也是让人头痛的,这个时候不妨写个脚本随机生成一个强度较大的密码来,然后通过一定的途径转交给用户。下面就是一个这样的脚本:
#!/usr/bin/perl

use strict;
use warnings;

my $lowercase_chars = "abcdefghijklmnopqrstuvwxyz";
my $uppercase_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
my $numeric_chars = "1234567890";
my $other_chars = "`~!@#\$%^&*()-_=+[{}];:'\",./\\<>?|";
my $valid_chars = $lowercase_chars . $uppercase_chars;
$valid_chars .= $numeric_chars . $other_chars;
my $valid_chars_num = length($valid_chars);

my $passwd;

sub strchr
{
        my $str = shift;
        my $ch = shift;

        foreach my $t (split('', $str)){
                if($t eq $ch){
                        return 1;
                }
        }

        return 0;
}

while(1){
        my $has = 0;
        $passwd = "";
        for(my $i = 0; $i < 12; $i ++){
                my $num = rand($valid_chars_num);
                $passwd .= substr($valid_chars, int($num) % length($valid_chars), 1);
        }

        foreach my $turn ($lowercase_chars, $uppercase_chars, $numeric_chars, $other_chars){
                $has = 0;
                foreach my $ch (split('', $passwd)){
                        if(strchr($turn, $ch)){
                                $has = 1;
                                last;
                        }
                }
                if(!$has){
                        last;
                }
        }
        if($has){
                print $passwd . "\n";
                last;
        }
}

这个脚本,可以生成固定长度的密码(12位),并且密码中必须同时包含大写字母、小写字母、数字和其它可打印字母时,才输出密码。一般来说这个强度已经足够了。:)
注意:一般来说主机标识、用户名和密码应该经由不同的途径交给用户!
阅读(1353) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~