28. 大量建帳號

本章示範如何在 Linux 主機上大量建帳號?

以下請存成 mc.pl,然後用 root 權限執行,即可大量建立帳號。

#! /usr/bin/perl

# 使用嚴格的變數宣告檢查
# 一個變數要使用之前, 一定要宣告
use strict;

# $file 是用來暫時存放動態產生的帳號密碼對照檔, 
# 其格式為: 帳號:密碼
my $file = "act-list.txt";


# $file2 是用來儲存動態產生的帳號/密碼表,讓您可以
# 將帳號列印下來, 並剪下帳號密碼紙條, 交給帳號當事人。
my $file2 = "report.txt";

my $num;

print "\n請問您要產生多少個帳號? ";
chomp($num=<STDIN>);

my $prefix;
print "\n請問帳號前導字為何? ";
chomp($prefix=<STDIN>);

open(W, "> $file") || die "無法開啟 $file , 請檢查您的權限!!\n";
open(W2, "> $file2") || die "無法開啟 $file , 請檢查您的權限!!\n";

my $i;

for ($i=1; $i<=$num; $i++) {

	# 動態產生隨機密碼,至少四個數字以上
	my $pwd = int(rand 5000) + 1111;

	# 寫入 $file 中
	print W "$prefix$i:$pwd\n";

	# 寫入 $file2 中
	print W2 "-" x 45 , "\n";
	print W2 "$prefix$i:$pwd\n";
}

close(W);
close(W2);


# 讀取 act-list.txt 
# 準備用來大量建帳號及設密碼
open(F, "$file") || die "$!\n";
while (my $line = <F>) {

	chomp $line;

	# 取得每一列的資料, 並分離出帳號及密碼
	my ($act, $pwd) = split /:/ , $line;

	# 偵錯用
	# print "$act ===> $pwd \n";

	# 用 adduser 指令建帳號
	system("adduser $act");

	print "$act 帳號已建立!\n";

}

close(F);

# 自動設密碼
# chpasswd 的用法,請詳看 man chpasswd 的說明,即可得知。
system("chpasswd < $file");


注意 1: 本程式僅為示範解說用途,雖仍堪用,但並沒有對使用者輸入的值,做詳細檢查,這部份請自行補齊。

注意 2: 本程式執行後所建立的密碼,其編碼方式為 DES (在 /etc/shadow 中,長度為 13 個字元) 。