»ç¿ëÇÏ´Â
¼¹ö¿¡ mysqlÀÌ ¼³Ä¡µÇ¾î ÀÖ´Ù¸é mysql ¼³Ä¡°æ·Î¿¡¼ mysql_setpermission
ÇÁ·Î±×·¥À» ã¾Æº¸±â ¹Ù¶õ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ´Ù¸§ ¾Æ´Ñ Perl·Î ¸¸µé¾îÁø ½Ã½ºÅÛ
µµ±¸ÀÇ ÀÏÁ¾ÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº mysqlÀ» »ç¿ëÇÔ¿¡ ÀÖ¾î ¹ø°Å·Î¿î ÀÛ¾÷ÀÌ ¾Æ´Ò
¼ö ¾ø´Â database¿Í userÀÇ »ý¼º ¹× ±ÇÇÑÁ¶Á¤ µîÀÇ ÀÛ¾÷À» ÀÚµ¿ÈÇÑ µµ±¸ÀÌ´Ù.
»Ó¸¸ ¾Æ´Ï¶ó my sqlaccess, mysql_find_rows, mysql_zap
µîÀÇ ÇÁ·Î±×·¥µµ ¸¶Âù°¡Áö·Î Perl·Î ¸¸µé¾îÁø ½Ã½ºÅÛ µµ±¸ÀÇ ÀÏÁ¾ÀÌ´Ù. ÀÌ·¸µí
PerlÀ» ÀÌ¿ëÇØ ½Ã½ºÅÛ µµ±¸¸¦ ¸¸µé¾îµÎ¸é ºó¹øÇÏ°Ô ¹ß»ýÇÏ´Â º¹ÀâÇÑ ÀÛ¾÷µéÀ» ÀÚµ¿ÈÇÒ
¼ö ÀÖ¾î ¼¹ö ¿î¿µÀÚ ¹× ½Ã½ºÅÛ »ç¿ëÀÚ¿¡°Ô Æí¸®ÇÔÀ» Á¦°øÇÑ´Ù.
Perl
¼Ò½º ÇÁ·Î±×·¥À» ½Ã½ºÅÛ µµ±¸·Î Á÷Á¢ »ç¿ëÇϱâ À§Çؼ´Â ¾Õ¼ ¼³¸íÇßµíÀÌ ½ÇÇà±ÇÇÑ(chmod
+x)À» ºÎ¿©ÇÏ°í ¼Ò½º ù ¹øÂ° ÁÙ¿¡ PerlÀÇ À§Ä¡¸¦ ÁöÁ¤ÇØÁà¾ß ÇÑ´Ù. ¶ÇÇÑ
Perl ¼Ò½º ÇÁ·Î±×·¥ÀÌ PATH¿¡ °É·ÁÀÖÁö ¾Ê´Ù¸é ./program °ú °°ÀÌ
½ÇÇàÇØ¾ß ÇÑ´Ù´Â Á¡À» ÀØÁö ¸»ÀÚ.
1.
Perl ¸í·ÉÇà ¿É¼Ç
PerlÀ»
¸í·ÉÇà¿¡¼ ½ÇÇàÇÒ °æ¿ì ¸ñÀû¿¡ µû¶ó ´Ù¾çÇÑ ¿É¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. PerlÀÌ
½Ã½ºÅÛ µµ±¸·Î »ç¿ëµÉ ¶§ ƯÈ÷ ¿É¼ÇÀ» ÀÚÁÖ »ç¿ëÇÏ°Ô µÇ´Âµ¥, ÁÖ·Î »ç¿ëµÇ´Â ¸í·ÉÇà
¿É¼ÇÀº ´ÙÀ½°ú °°´Ù.
|
¿É¼Ç
|
¼³¸í
|
|
e
|
ÁÖ¾îÁø Perl ¸í·É
½ÇÇà
|
|
p
|
ÁöÁ¤ÇÑ ÆÄÀÏÀ» ´ë»óÀ¸·Î
ÀÛ¾÷
|
|
i
|
¿øº»ÆÄÀÏÀ» °á°úÆÄÀÏ·Î
´ëü
|
|
c
|
±¸¹®°Ë»ç(¹®¹ý¿¡·¯
Á¡°Ë)
|
|
v
|
Perl ¹öÀüÁ¤º¸
|
|
V
|
Perl ¹öÀüÁ¤º¸(»ó¼¼)
|
|
w
|
°æ°í Ãâ·Â(°³¹ß°úÁ¤¿¡
ÁÖ·Î »ç¿ë)
|
|
U
|
ºñ¾ÈÀü¸ðµå, SUID
Àû¿ë½Ã »ç¿ë
|
2.
¹®ÀÚ¿ Àϰý ġȯ
ȸ»ç¸íÀ̳ª
µµ¸ÞÀÎ, ¸ÞÀÏÁÖ¼Ò µîÀÌ ¹Ù²î¾úÀ» ¶§ ¼ö¸¹Àº ¹®¼ÆÄÀÏ¿¡ ÀûÈù ³»¿ëÀ» ¸ðµÎ °íÄ¡±â¶õ
½¬¿î ÀÏÀÌ ¾Æ´Ï´Ù. ÇÏÁö¸¸ PerlÀ» ÀÌ¿ëÇÏ¸é ³Ê¹«µµ °£´ÜÈ÷ º¯°æ ³»¿ëÀ» ¹Ý¿µÇÒ
¼ö ÀÖ´Ù. ¾Æ·¡ ¸í·ÉÀº html È®ÀåÀÚ¸¦ Áö´Ñ ¹®¼ÆÄÀÏ¿¡¼ ¡°¿ìÁ¤¡±À̶ó´Â ¹®ÀÚ¿À»
ã¾Æ ¡°»ç¶û¡±À̶ó´Â ¹®ÀÚ¿·Î ¸ðµÎ ġȯÇÏ´Â ¸í·É(Perl ¸í·ÉÇà ¿É¼Ç)ÀÌ´Ù.
find
¸í·ÉÀ» ÀÌ¿ëÇϸé ÇÏÀ§ °æ·ÎÀÇ ¹®¼µµ ÀϰýÀûÀ¸·Î ġȯÇÒ ¼ö ÀÖ´Ù.
3.
ÆÄÀÏ¸í ´ë¼Ò¹®ÀÚ Àϰýº¯°æ
ÆÄÀϸíÀÇ
´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾Ê´Â ¿î¿µÃ¼Á¦(À©µµ¿ìÁî µî)¿¡¼ »ý¼ºµÈ ÆÄÀϸíÀº ¸¹Àº ¹®Á¦¸¦
¾ß±âÇϰï ÇÑ´Ù. ƯÈ÷ HTML ¹®¼¿¡¼ ¸µÅ©¿À·ù¸¦ À¯¹ßÇϰųª ÆÄÀϸíÀ» ÀÔ·ÂÇÒ ¶§
ÀÔ·ÂÈ¥¼±À» °¡Áß½Ã۱⵵ ÇÑ´Ù. ÇÏÁö¸¸ ´ÙÀ½ µµ±¸(recase)¸¦ ÀÌ¿ëÇÏ¸é ÆÄÀϸíÀ»
¼Ò¹®ÀÚ ¶Ç´Â ´ë¹®ÀÚ·Î ÀϰýÀûÀ¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù.
|
$ ls
HOME.GIF LIST.GIF NEXT.GIF
$ recase * (¶Ç´Â $ recase -l *)
$ ls
home.gif list.gif next.gif
$ recase -u *
$ ls
HOME.GIF LIST.GIF NEXT.GIF
|
|
File Name
: recase
|
|
#!/usr/bin/perl
# »ç¿ë¹ý : recase [¿É¼Ç] [ÆÄÀÏ ¸®½ºÆ®]
# ¿É¼Ç : -l(¼Ò¹®ÀÚ, ±âº»°ª), -u(´ë¹®ÀÚ)
# ¿É¼Ç Á¡°Ë(¼Ò¹®ÀÚÈ ¶Ç´Â ´ë¹®ÀÚÈ)
if($ARGV[0] =~ /-L/i) {
$method=¡±L¡±; shift; }
elsif($ARGV[0] =~ /-U/i)
{ $method=¡±U¡±; shift; }
else { $method = ¡°L¡±; }
foreach $file
(@ARGV) {
# µð·ºÅ丮ÀÎ °æ¿ì ó¸®ÇÏÁö ¾ÊÀ½
next if -d $file;
($dir, $filename) = $file
=~ /(.*[¡¬/¡¬¡¬])(.*)$/;
$filename = $file if $file !~ /¡¬//;
# º¯°æÀÌ ÇÊ¿äÇÑ ÆÄÀϸíÀÎÁö È®ÀÎ
next if $method eq ¡°L¡± and
$filename !~ /[A-Z]/;
next if $method eq ¡°U¡± and
$filename !~ /[a-z]/;
# ´ë¼Ò¹®ÀÚ º¯È¯
$filename =~ tr/A-Z/a-z/
if $method eq ¡°L¡±;
$filename =~ tr/a-z/A-Z/
if $method eq ¡°U¡±;
if(-f ¡°$dir$filename¡±) {
# »õ·Î¿î À̸§ÀÇ ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÏ´Â °æ¿ì
print ¡°Already exist! : $dir$filename¡¬n¡±;
next; }
# ÆÄÀÏ¸í º¯°æ
rename(¡°$file¡±, ¡°$dir$filename¡±);
|
ƯÁ¤°æ·Î
ÀÌÇÏÀÇ ¸ðµç ÆÄÀϸíÀ» ¼Ò¹®ÀÚ·Î º¯°æÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÏ¸é µÈ´Ù.
|
$ find way-cart
-type f -exec recase {} ¡¬;
|
4.
¹®¼Çü½Ä º¯È¯(UNIX ¡ê DOS)
PerlÀ̳ª
shell ½ºÅ©¸³Æ® ÆÄÀÏÀ» ¹ÙÀ̳ʸ®(Binary) ¸ðµå·Î Àü¼Û(FTP µî)Çϸé
½ºÅ©¸³Æ® ½ÇÇà½Ã ¿¡·¯°¡ ¹ß»ýÇϰï ÇÑ´Ù. À̸¦ ±Øº¹Çϱâ À§Çؼ´Â ÆÄÀÏÀ» ¾Æ½ºÅ°(ASCII)
¸ðµå·Î ´Ù½Ã Àü¼ÛÇÏ¸é µÇÁö¸¸, PerlÀ» ÀÌ¿ëÇØ °£´ÜÈ÷ ÇØ°áÇÒ ¼öµµ ÀÖ´Ù. ÀÌ´Â
¾Õ¼ ¼³¸íÇÑ ¡®¹®ÀÚ¿ ġȯ¡¯°ú µ¿ÀÏÇÑ ¿ø¸®´Ù.
|
# DOS ¡æ UNIX
¹®¼Çü½ÄÀ¸·Î º¯È¯
$ perl -pi -e ¡°s/¡¬r//¡± *.cgi
# UNIX ¡æ DOS
¹®¼Çü½ÄÀ¸·Î º¯È¯
$ perl -pi -e ¡°s/¡¬n/¡¬r¡¬n/¡± *.txt
|
¸í·É(Perl
¸í·ÉÇà ¿É¼Ç)ÀÌ ±â¾ïÇϱ⠽±Áö¸¸Àº ¾ÊÀ» Å×´Ï shell ½ºÅ©¸³Æ®·Î Çѹø ¸¸µé¾î
º¸ÀÚ. ÆÄÀÏ¿¡ ½ÇÇà±ÇÇÑÀ» ºÎ¿©ÇÑ ÈÄ »ç¿ëÀÚµéÀÇ PATH¿¡ Æ÷ÇԵǾîÀÖ´Â °æ·Î(/usr/local/bin
µî)¿¡ À§Ä¡ÇØµÎ¸é Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
|
File Name
: dos2unix
|
|
#!/bin/sh
# DOS ¡æ UNIX ¹®¼Çü½ÄÀ¸·Î º¯È¯
perl -pi -e ¡°s/¡¬r//¡± $*
File Name
: unix2dos
#!/bin/sh
# UNIX ¡æ DOS ¹®¼Çü½ÄÀ¸·Î º¯È¯
perl -pi -e ¡°s/¡¬n/¡¬r¡¬n/¡± $*
|
5.
ÆÄÀÏ Å©±âÁ¤º¸ Ãâ·Â ¹× Ȱ¿ë
´ÙÀ½Àº ÁöÁ¤ÇÑ
ÆÄÀÏÀÇ Å©±â¸¦ Ãâ·ÂÇÏ´Â µµ±¸(sizeof)·Î¼, ¾ò¾îÁø Á¤º¸´Â ´Ù¸¥ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼µµ
Ȱ¿ëÇÒ ¼ö ÀÖ´Ù.
|
File Name
: sizeof
|
|
#!/usr/bin/perl
# 1. ÆÄÀÏÅ×½ºÆ® ¿¬»êÀÚÁß -s(Size) ¿É¼Ç ÀÌ¿ë
# 2. ÇϳªÀÇ ÆÄÀϸ¸ È®ÀÎÇÒ ¶§´Â
# ´Ù¸¥ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ Ȱ¿ëÇÒ ¼ö ÀÖµµ·Ï
# ÆÄÀÏÅ©±â¸¸ Ãâ·Â
if($#ARGV eq 0) {
print -s $ARGV[0]; exit; }
foreach (@ARGV) {
print ¡°$_ : ¡°, -s $_, ¡°¡¬n¡±; }
|
$ sizeof
*.cgi
way-admin.cgi : 46031
way-board.cgi : 19065
way-notice.cgi : 6264
±×·±µ¥ ÀÌ·±
µµ±¸´Â ¾ðÁ¦ ¾²Àϱî?
ÇÊÀÚ´Â ¸ÅÁÖ 1G byte°¡ ³Ñ´Â ÀڷḦ ¿ø°ÝÀ¸·Î ¹é¾÷ ¹Þ´Â´Ù. ±×·±µ¥ ¹é¾÷ÆÄÀÏÀÌ
ÀúÀåµÉ ÄÄÇ»Å͸¦ Ç×»ó ÄÑµÑ ¼ö ¾ø´Â Ư¼öÇÑ »óȲÀÎÁö¶ó ¹é¾÷ÀÌ Á¾·áµÇ¸é ÀÚµ¿À¸·Î
halt½ÃÄÑ¾ß ÇÑ´Ù.
¹®Á¦´Â Á¤»óÀûÀ¸·Î ¹é¾÷ÀÌ ÀÌ·ç¾îÁ³´ÂÁö ¾Ë ¼ö ¾ø´Â »óÅ¿¡¼ ¹«Åδë°í halt½ÃÄѼ´Â
¾ÈµÈ´Ù´Â Á¡ÀÌ´Ù. ±×·¡¼ »ý°¢Çس½ °ÍÀº(¹°·Ð ´Ù¸¥ ¹æ¹ýÀ¸·Îµµ °¡´ÉÇÏ´Ù.) ¼ö½ÅµÈ
¹é¾÷ÆÄÀÏ Å©±â¸¦ È®ÀÎÇÏ¿© ¿øº»ÆÄÀϰú µ¿ÀÏÇÑ Å©±âÀÏ °æ¿ì¸¸ halt¸í·ÉÀ» ½ÇÇàÇϵµ·Ï
ÇÏ´Â °ÍÀÌ´Ù.
|
File Name
: remotebackup
|
#!/bin/sh
# »ç¿ë¹ý : remotebackup [¹é¾÷ÆÄÀÏÅ©±â]
# ÆÄÀÏ ´Ù¿î·Îµå
ncftpget -u way -p ¡°********¡± ¡¬
¡°ftp://way.co.kr/backup/19991231.tar.gz¡±
# ¿ÜºÎ¸í·ÉÀÎ Perl ÇÁ·Î±×·¥À» ½ÇÇàÇϰí
# °á°ú¸¦ ¹Þ¾Æ¿À±â À§ÇØ Perl¿¡¼¿Í ¸¶Âù°¡Áö·Î
# shell ½ºÅ©¸³Æ®µµ `(¿ªµû¿ÈÇ¥)±âÈ£ »ç¿ë
SIZE=`sizeof 19991231.tar.gz`
# ÀÔ·ÂÇÑ ÆÄÀÏÅ©±â¿Í ¹é¾÷ ¹ÞÀº ÆÄÀÏÅ©±â ºñ±³
if [ ¡°X$1¡± = ¡°X${SIZE}¡± ]
# ÀÏÄ¡(Á¤»ó¹é¾÷)ÇÒ °æ¿ì ½Ã½ºÅÛ Á¾·á
then halt
fi
|
6.
¼öÄ¡Á¤º¸ Äĸ¶ Ç¥±â
|
File Name
: comma
|
|
#!/usr/bin/perl
# »ç¿ë¹ý : comma [¼öÄ¡]
1 while $ARGV[0] =~ s/(¡¬d+)(¡¬d{3})/$1,$2/;
print $ARGV[0];
|
ÀÌ µµ±¸´Â
¶Ç ¾ðÁ¦ »ç¿ëµÉ±î? ÇÊÀÚ´Â °èÁ¤ »ç¿ëÀÚÀÇ À¥¼¹ö ·Î±×ÆÄÀÏÀ» ÀÌ¿ëÇØ ÀÏÀÏ ÀÚ·á Àü¼Û·®À»
»êÃâÇÑ´Ù. »êÃâµÈ Á¤º¸¸¦ Ãâ·ÂÇÒ ¶§ ½Äº°À» ¿ëÀÌÇÏ°Ô Çϱâ À§ÇØ ÀÌ µµ±¸¸¦ ÀÌ¿ëÇØ
3ÀÚ¸®¸¶´Ù Äĸ¶¸¦ ³Ö¾î Ãâ·ÂÇϰí ÀÖ´Ù.
$ comma
1234567890
1,234,567,890
¾Õ¼ ¼Ò°³ÇÑ
remotebackup°ú ¸¶Âù°¡Áö·Î shell ½ºÅ©¸³Æ® µîÀÇ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ¿ÜºÎ¸í·ÉÀ¸·Î
comma ¸í·ÉÀ» »ç¿ëÇÏ¸é º¸±â ÁÁ°Ô ¼öÄ¡Á¤º¸¸¦ Ç¥½ÃÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÆÄÀÏ Å©±â¸¦
ÆÄ¾ÇÇÑ ÈÄ º¸±â ÁÁ°Ô Ãâ·ÂÇØº¸ÀÚ.
$ comma
`sizeof way-board.cgi`
19,065
7.
ÆÄÀÏ ºÎºÐ Ãâ·Â
ÀÌÁ¦ ¼Ò°³ÇÒ
µµ±¸´Â ƯÁ¤ ÆÄÀÏÀÇ ÀϺκÐÀ» Ãâ·ÂÇÏ´Â µµ±¸´Ù. ¿¹¸¦ µé¾î tmp¶ó´Â ÆÄÀÏÀÇ 5¹øÂ°
ÁÙºÎÅÍ 3ÁÙÀ» Ãâ·ÂÇϰíÀÚ ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.
$ cat
tmp
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
$ partprint
5 3 tmp
FILE
: tmp
LINE
: (from 5 to 7 / total 10)
Line
5
Line 6
Line 7
|
File Name
: partprint
|
|
#!/usr/bin/perl
# »ç¿ë¹ý : partprint [½ÃÀÛÁÙ] [Ãâ·ÂÁÙ] [ÆÄÀÏ]
$start = shift;
$end = shift;
$filename = shift;
open(FILE, ¡°$filename¡±) or
die ¡°Error: $filename, $!¡±;
@File = <FILE>;
close(FILE);
$start --;
$start = 0 if $start < 0;
$end = 0 if $end < 0;
$end --;
$end = $start + $end;
print ¡°=¡± x 80, ¡°¡¬n¡±;
print ¡°FILE : $filename¡¬n¡±;
print ¡°LINE : ¡°;
print ¡°(from ¡°, $start + 1, ¡° to ¡°,
$end + 1,
¡° / total ¡°, $#File+1, ¡°)¡¬n¡±;
print ¡°=¡± x 80, ¡°¡¬n¡±;
@File = @File[$start .. $end];
foreach (@File) { print $_; }
|
8.
À¥È£½ºÆÃ ¼¹ö°ü¸® ½Ã½ºÅÛ
ÀÌÁ¦ °£´ÜÇϸ鼵µ
Á¾ÇÕÀûÀÎ ±â´ÉÀ» ¼öÇàÇÏ´Â ½Ã½ºÅÛ µµ±¸¸¦ ¸¸µé¾î º¸ÀÚ. ÀÌ µµ±¸´Â ¼¼ °÷ÀÇ À¥È£½ºÆÃ
¾÷ü¿¡¼ 10°³¿ù ÀüºÎÅÍ À¯¿ëÇÏ°Ô »ç¿ëµÇ°í ÀÖ´Ù. Áö¸éÀ¸·Î ¿Å±â±â ¾î·Á¿î ÀϺÎ
±â´ÉÀº ¹èÁ¦ÇÏ¿´À¸¸ç, ¼Ò½º¸¦ ¼Ò°³ÇÏ°í °¢ ºÎºÐÀÇ ±â´ÉÀ» ¼³¸íÇÔÀ¸·Î½á ÀÌÇØ¿Í ÀÀ¿ëÀ»
µ½°íÀÚ ÇÑ´Ù.
½ÇÁ¦ »ç¿ëÀ» ¿øÇÑ´Ù¸é Àӽà ¼¹ö¸¦ ÀÌ¿ëÇØ ¿©·¯ Â÷·Ê ½ÃÇèÀ» °ÅÄ£ ÈÄ »ç¿ëÇϱ⸦
±ÇÇϸç super user ±ÇÇÑÀ¸·Î ½ÇÇàµÇ¹Ç·Î ¼¼½ÉÇÑ ÁÖÀǸ¦ ¿äÇÑ´Ù.
ÁÖ¿ä ±â´ÉÀº
´ÙÀ½°ú °°´Ù.
°¡. »ç¿ëÀÚ °èÁ¤ °ü¸®
³ª. POP °èÁ¤ °ü¸®
´Ù. µð½ºÅ© ÇÒ´ç
¶ó. µµ¸ÞÀÎ ¼³Á¤
¸¶. µ¥¸ó(bind, sendmail, apache) °ü¸®
#!/usr/bin/perl
#=====================================
config();
menu();
#=====================================
sub config
{
# ÀÌ ·çƾÀº ½Ã½ºÅÛ¿¡¼ »ç¿ëÇÒ ÁÖ¿ä ¼³Á¤À» ¼±¾ðÇÏ´Â
# ºÎºÐÀÌ´Ù.
# ±×·ì
¹× »ç¿ëÀÚ ±âº»°ªÀ¸·Î¼
# ÀÌ¹Ì Á¸ÀçÇÏ´Â ±×·ì ¹× »ç¿ëÀÚ¿©¾ß ÇÑ´Ù.
# °èÁ¤ Ãß°¡½Ã ±âº» ±×·ì
$user_basegroup = ¡°user¡±;
# POP°èÁ¤ Ãß°¡½Ã ±âº» ±×·ì
$pop_basegroup = ¡°pop¡±;
# µð½ºÅ© ÇÒ´ç Ç¥º» »ç¿ëÀÚ
$disk_baseuser = ¡°way¡±;
# »ç¿ëÀÚ
°èÁ¤ °ü¸® µî¿¡¼ Á¶ÀÛÀÌ Çã¿ëµÇ´Â ÃÖ¼Ò UID
$min_uid = 500;
# »ç¿ëÀÚ¿¡°Ô
ºÎ¿©ÇÒ IP ÁÖ¼Ò¸¦ ±â·ÏÇÑ´Ù.
# Name-based Virtual Host(apache)¸¦ ÀüÁ¦·Î ÇÑ´Ù.
$ip_address = ¡°210.123.12.1¡±;
# ¾Æ·¡
°æ·ÎµéÀº /etc/skel¿¡ ¹Ì¸® »ý¼ºµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.
# $ mkdir /etc/skel/public_html /etc/skel/wwwlog
# À¥¹®¼ °æ·Î
$webdir = ¡°public_html¡±;
# À¥·Î±× °æ·Î
$logdir = ¡°wwwlog¡±;
# ¾Æ·¡´Â
Ư¼öÇÑ °æ¿ì°¡ ¾Æ´Ñ ÇÑ º¯°æÇÒ Çʿ䰡 ¾ø´Ù.
# shadow ½Ã½ºÅÛÀ» »ç¿ëÇÏ´õ¶óµµ º¯°æÇÒ Çʿ䰡 ¾ø´Ù.
# ºñ¹Ð¹øÈ£ ÆÄÀÏ
$pass_file = ¡°/etc/passwd¡±;
# ±×·ìÆÄÀÏ
$group_file = ¡°/etc/group¡±;
# Message
$prog_msg = ¡°[MSG] ¡°;
}
#=====================================
sub menu
{
# ÀÌ ·çƾÀº ±âº» ¸Þ´ºÈ¸éÀ» Ãâ·ÂÇÏ´Â ±â´ÉÀ» ÇÑ´Ù.
# ½ÇÇàÀÚ°¡
super user°¡ ¾Æ´Ï¸é Á¾·áÇÑ´Ù.
chomp($run_id = `id -u`);
if($run_id ne ¡°0¡±) {
print ¡°$prog_msg ½ÇÇà±ÇÇÑÀÌ ¾ø½À´Ï´Ù.(UID:$run_id)¡¬n¡±;
exit; }
# get_date
ÇÔ¼ö¸¦ ÅëÇØ ÇöÀç ½Ã°£Á¤º¸¸¦ ¾ò´Â´Ù.
$date_info = get_date(time);
$date_seri = ¡°$date_info¡± . ¡°01¡±;
# ȸéÀ»
Á¤¸®Çϰí Ãâ·ÂÇÑ´Ù.
system(¡°clear¡±);
print <<¡±__END__¡±;
À¥È£½ºÆÃ
¼¹ö °ü¸® ½Ã½ºÅÛ
11. °èÁ¤ µî·Ï 26.
»ç¿ëÀÚ password ÁöÁ¤
12. °èÁ¤ »èÁ¦ 27.
13. °èÁ¤ Á¶È¸ 28.
ÇÁ·Î¼¼¼ Á¶È¸
14. Àüü °èÁ¤ Á¶È¸ 29.
µ¥¸ó °ü¸®
15. POP °èÁ¤ µî·Ï 30.
16. 31.
17. µð½ºÅ© ÇÒ´ç 32.
18. µð½ºÅ© ÇÒ´ç(¼öµ¿) 33.
19. µð½ºÅ© ÇÒ´ç Á¶È¸ 34.
20. 35.
21. µµ¸ÞÀÎ µî·Ï 36.
22. µµ¸ÞÀÎ Á¤º¸ °»½Å 37.
23. µµ¸ÞÀÎ Á¤º¸ »ó¼¼Á¶È¸ 38.
24. 39.
25. 40.
¡¬¡¬. EXIT
__END__
print
¡° ¼±Åà : ¡°;
$choice = <STDIN>;
chomp $choice;
print ¡°-¡± x 80, ¡°¡¬n¡±;
# ÀÔ·ÂÇÑ ¸Þ´º¹øÈ£¿¡ µû¶ó ÇØ´çµÇ´Â ±â´ÉÀ» ¼öÇàÇÑ´Ù.
if ($choice eq 11) { add_user(); }
elsif ($choice eq 12) { delete_user(); }
elsif ($choice eq 13) { query_user(); }
elsif ($choice eq 14) { all_user_info(); }
elsif ($choice eq 15) { pop_add(); }
elsif ($choice eq 17) { disk_quota(); }
elsif ($choice eq 18) { disk_quota_edit(); }
elsif ($choice eq 19) { disk_query(); }
elsif ($choice eq 21) { add_domain(); }
elsif ($choice eq 22) { domain_apply(); }
elsif ($choice eq 23) { domain_display(); }
elsif ($choice eq 26) { pass_define(); }
elsif ($choice eq 28) { ps_ax(); }
elsif ($choice eq 29) { demon(); }
elsif ($choice eq ¡°¡¬¡¬¡±) { print ¡°¡¬nbye...¡¬n¡¬n¡±;
exit; }
else { menu(); }
}
#=====================================
# ¿©±â¼ºÎÅÍ´Â
½Ã½ºÅÛ¿¡¼ °øÅëÀûÀ¸·Î »ç¿ëµÇ´Â
# ÇÔ¼öµéÀÌ´Ù.
sub check
{
# ¸í·ÉÀÇ ½ÇÇàÀ» ÃÖÁ¾ÀûÀ¸·Î È®ÀÎÇϵµ·Ï ÇÏ´Â ·çƾ
print ¡°$prog_msg È®½ÇÇմϱî? [yes/No] ¡°;
$input = <STDIN>;
chomp $input;
if ($input =~ /yes/i) { return;
}
else { print ¡°¡¬n$prog_msg ½ÇÇàÀ» Ãë¼ÒÇÕ´Ï´Ù. [Enter]
¡°;
$input = <STDIN>;
menu(); }
}
sub end
{
# ½ÇÇà°á°ú¸¦ Ãâ·ÂÇϰí ÃʱâÈÇÏ´Â ·çƾ
local ($end) = @_;
if ($end eq ¡°¡±) { $end = ¡°Ã³¸®°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.¡±; }
print ¡°¡¬n$prog_msg $end [Enter] ¡°;
$input = <STDIN>;
exec(¡°$0¡±);
}
sub file_error
{
# ÆÄÀÏ Á¶À۽à ¹®Á¦°¡ ¹ß»ýÇÏ¸é ¿¡·¯»ç½ÇÀ» °æ°íÇÏ´Â ·çƾlocal ($err)
= @_;
if ($err eq ¡°¡±) { $err = ¡°ÆÄÀÏ ÀúÀå ¿À·ù, $FILE¡±;
}
print ¡°=¡± x 30 . ¡° Áß´ë ¿À·ù ¹ß»ý ¡° . ¡°=¡± x
30 . ¡°¡¬n¡±;
print ¡° ¿À·ù ³»¿ë : $err ¡¬n¡±;
print ¡°=¡± x 80;
print ¡°Áß´ëÇÑ ¿À·ùÀÔ´Ï´Ù.¡±;
print ¡° ÇØ´ç ÆÄÀÏÀ» ¸é¹ÐÈ÷ °ËÅäÇϽñ⠹ٶø´Ï´Ù.¡¬n¡±;
exit;
}
sub user_check
{
# ³Ñ°Ü¹ÞÀº »ç¿ëÀÚ ID µîÀÇ Á¤º¸¸¦ ÀÌ¿ëÇØ »ç¿ëÀÚ Á¤º¸¸¦
# ¾ò´Â ÇÔ¼ö
local ($search_data, $search_field) = @_;
$FILE = ¡°$pass_file¡±;
open(FILE, ¡°$FILE¡±) || file_error(¡°ÆÄÀÏ Àб⠿À·ù,
$FILE¡±);
while($user_data = <FILE>) {
chomp $user_data;
@ud = split(¡°:¡±, $user_data);
$search_fld = $search_field -
1;
$search_fld_data = $ud[$search_fld];
if ($search_data eq $search_fld_data) {
return $user_data; }
}
close(FILE);
return 0;
}
sub group_check
{
# ³Ñ°Ü¹ÞÀº ±×·ì ID µîÀÇ Á¤º¸¸¦ ÀÌ¿ëÇØ ±×·ì Á¤º¸¸¦
# ¾ò´Â ÇÔ¼ö
local ($search_data, $search_field) = @_;
$FILE = ¡°$group_file¡±;
open(FILE, ¡°$FILE¡±) || file_error(¡°ÆÄÀÏ Àб⠿À·ù,
$FILE¡±);
while($group_data = <FILE>)
{
chomp $group_data;
@gd = split(¡°:¡±, $group_data);
$search_fld = $search_field - 1;
$search_fld_data = $gd[$search_fld];
if ($search_data eq $search_fld_data) {
return $group_data; }
}
close(FILE);
return 0;
}
sub get_date
{
# ½Ã°£Á¤º¸¸¦ ¾ò´Â ÇÔ¼ö
local ($data) = @_;
local ($second, $minute, $hour, $date, $month,
$year, $weekday, $yearday, $Isdst) = localtime($data);
$month ++;
$year += 1900;
$month < 10 && ($month
= ¡°0$month¡±);
$date < 10 && ($date
= ¡°0$date¡±);
$hour < 10 && ($hour
= ¡°0$hour¡±);
$minute < 10 && ($minute
= ¡°0$minute¡±);
$second < 10 && ($second
= ¡°0$second¡±);
return ¡°$year$month$date¡±;
}
#=====================================
# ¿©±â¼ºÎÅÍ´Â
¸Þ´º¿¡ ³ª¿µÈ ½ÇÁ¦ ÀÛ¾÷À» ¼öÇàÇÏ´Â
# ·çƾÀÌ´Ù.
sub add_user
{
# 11. °èÁ¤ µî·Ï
print ¡°$prog_msg µî·ÏÇÒ »ç¿ëÀÚ ID : ¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { add_user(); }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if (user_check($id, ¡°1¡±)) {
end(¡°ÀÌ¹Ì µî·ÏµÇ¾îÀÖ´Â IDÀÔ´Ï´Ù.¡±); }
print ¡°$prog_msg µî·ÏÇÒ »ç¿ëÀÚÀÇ ¼Ò¼Ó±×·ì¡±;
print ¡°(default=$user_basegroup) : ¡°;
$grp = <STDIN>;
chomp $grp;
if ($grp eq ¡°¡±) { $grp = $user_basegroup;
}
if ($grp eq ¡°¡¬¡¬¡±) { menu(); }
if (!group_check($grp, ¡°1¡±)) {
end(¡°µî·ÏµÇÁö ¾ÊÀº GROUPÀÔ´Ï´Ù.¡±); }
check();
# adduser ¸í·É¿¡ -g ¿É¼ÇÀ» »ç¿ëÇØ ±×·ìÀ» ÁöÁ¤ÇÑ´Ù.
system(¡°/usr/sbin/useradd $id -g $grp¡±);
# À¥·Î±× °æ·ÎÀÇ ¼ÒÀ¯±ÇÀ» super user·Î ¹Ù²Û´Ù.
system(¡°/bin/chown 0.0 /home/$id/$logdir¡±);
end();
}
sub delete_user
{
# 12. °èÁ¤ »èÁ¦
print ¡°$prog_msg »èÁ¦ÇÒ »ç¿ëÀÚ ID : ¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { delete_user(); }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if (!($user_data = user_check($id, ¡°1¡±)))
{
end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
($ud1, $ud2, $ud3, $ud4, $ud5, $ud6, $ud7)
= split(¡°:¡±, $user_data);
if ($ud3 < $min_uid) {
end(¡°ÇØ´ç ID¸¦ »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù.¡±); }
check();
# userdel ¸í·É¿¡ -r ¿É¼ÇÀ» ÀÌ¿ëÇØ °èÁ¤À» »èÁ¦ÇÑ´Ù.
# ÀڷẸȣ¸¦ À§ÇØ »èÁ¦ÇÒ °èÁ¤ÀÇ È¨°æ·Î°¡ /home °æ·Î
# ÇÏÀ§¿¡ À§Ä¡ÇÏÁö ¾ÊÀ¸¸é Ȩ°æ·Î¸¦ »èÁ¦ÇÏÁö ¾Ê´Â´Ù.
if($ud6 =~ /^¡¬/home/) { $home_del = ¡°-r¡±; }
system(¡°/usr/sbin/userdel $home_del $id¡±);
end();
}
sub query_user
{
# 13. °èÁ¤ Á¶È¸
# ÁöÁ¤ÇÑ »ç¿ëÀÚ¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº °á°ú¸¦ Ãâ·ÂÇÑ´Ù.
# [MSG] Á¶È¸ÇÒ »ç¿ëÀÚ ID : way
# [MSG] ID : way (539)
# [MSG] GROUP : user (500)
# [MSG] HOME DIR : /home/way
# [MSG] SHELL : /bin/bash
print ¡°$prog_msg Á¶È¸ÇÒ »ç¿ëÀÚ ID : ¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { query_user(); }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if (!($user_data = user_check($id, ¡°1¡±)))
{
end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
($ud1, $ud2, $ud3, $ud4, $ud5, $ud6, $ud7)
= split(¡°:¡±, $user_data);
$s_group = $ud4;
if (!($group_data = group_check($s_group,
¡°3¡±))) {
end(¡°µî·ÏµÇÁö ¾ÊÀº GROUPÀÔ´Ï´Ù. (GID=$s_group)¡±); }
($gd1, $gd2, $gd3, $gd4) = split(¡°:¡±, $group_data);
print ¡°$prog_msg ID : $id ($ud3)¡¬n¡±;
print ¡°$prog_msg GROUP : $gd1 ($s_group)¡¬n¡±;
p
rint
¡°$prog_msg HOME DIR : $ud6¡¬n¡±;
print ¡°$prog_msg SHELL : $ud7¡¬n¡¬n¡±;
end(¡°Á¶È¸°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.¡±);
}
sub all_user_info
{
# 14. Àüü °èÁ¤ Á¶È¸
# ºñ¹Ð¹øÈ£ ÆÄÀÏÀ» Ãâ·ÂÇÑ´Ù.
$FILE = ¡°$pass_file¡±;
open(FILE, ¡°$FILE¡±) || file_error(¡°ÆÄÀÏ Àб⠿À·ù,
$FILE¡±);
while($user_data = <FILE>)
{
chomp $user_data;
@ud = split(¡°:¡±, $user_data);
$search_fld_data = $ud[2];
if ($search_fld_data > = $min_uid )
{
$print_data .= ¡°$user_data¡¬n¡±; }
}
close(FILE);
print $print_data;
end(¡°Á¶È¸°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.¡±);
}
sub pop_add
{
# 15. POP °èÁ¤ µî·Ï
print ¡°$prog_msg µî·ÏÇÒ POP ID : ¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { pop_add(); }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if (user_check($id, ¡°1¡±)) {
end(¡°ÀÌ¹Ì µî·ÏµÇ¾îÀÖ´Â IDÀÔ´Ï´Ù.¡±); }
print ¡°$prog_msg µî·ÏÇÒ »ç¿ëÀÚÀÇ ¼Ò¼Ó±×·ì¡±;
print ¡°(default=$pop_basegroup) : ¡°;
$grp = <STDIN>;
chomp $grp;
if ($grp eq ¡°¡±) { $grp = $pop_basegroup;
}
if ($grp eq ¡°¡¬¡¬¡±) { menu(); }
if (!group_check($grp, ¡°1¡±)) {
end(¡°µî·ÏµÇÁö ¾ÊÀº GROUPÀÔ´Ï´Ù.¡±); }
check();
# POP °èÁ¤Àº noshellÀ̶ó´Â °£´ÜÇÑ ½©½ºÅ©¸³Æ®¸¦
# ±âº» shell·Î ÁöÁ¤ÇÑ´Ù.
File
Name : /usr/local/bin/noshell
#!/bin/sh
echo
echo ¡° ============================= ¡°
echo ¡° ÇöÀç Á¢¼ÓÇϽŠID´Â¡±
echo ¡° TELNET, FTP Á¢¼ÓÀÌ Çã¿ëµÇÁö¡±
echo ¡° ¾Ê½À´Ï´Ù.¡±
echo ¡° ============================= ¡°
echo
system(¡°/usr/sbin/useradd
$id -g $grp -M ¡¬¡¬
-s /usr/local/bin/noshell -d /¡±);
end();
}
sub disk_quota
{
# 17. µð½ºÅ© ÇÒ´ç
# quota ±â´ÉÀ» ÀÌ¿ëÇØ »ç¿ëÀÚÀÇ µð½ºÅ©¸¦ ÇÒ´çÇÑ´Ù.
print ¡°$prog_msg µð½ºÅ©¸¦ ÇÒ´çÇÒ »ç¿ëÀÚ ID : ¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { disk_quota(); }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if (!user_check($id, ¡°1¡±)) {
end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
print ¡°$prog_msg Ç¥º» »ç¿ëÀÚ ID(default:$disk_baseuser)
: ¡°;
$id_2 = <STDIN>;
chomp $id_2;
if ($id_2 eq ¡°¡±) { $id_2 = $disk_baseuser;
}
if ($id_2 eq ¡°¡¬¡¬¡±) { menu(); }
if (!user_check($id_2, ¡°1¡±)) {
end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
check();
# edquota ¸í·É¿¡ -p ¿É¼ÇÀ» ÀÌ¿ëÇØ »õ·Î ÁöÁ¤ÇÒ
# »ç¿ëÀÚ¿¡°Ô Ç¥º» »ç¿ëÀÚÀÇ µð½ºÅ© ÇÒ´çÁ¤º¸¸¦
# º¹»çÇÑ´Ù.(man edquota)
system(¡°/usr/sbin/edquota -p $id_2 $id¡±);
end();
}
sub disk_quota_edit
{
# 18. µð½ºÅ© ÇÒ´ç(¼öµ¿)
print ¡°$prog_msg µð½ºÅ©¸¦ ÇÒ´çÇÒ »ç¿ëÀÚ ID : ¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { disk_quota_edit(); }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if (!user_check($id, ¡°1¡±)) {
end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
check();
system(¡°/usr/sbin/edquota -u $id¡±);
end();
}
sub disk_query
{
# 19. µð½ºÅ© ÇÒ´ç Á¶È¸
print ¡°$prog_msg µð½ºÅ© »ç¿ë»óȲÀ» Á¶È¸ÇÒ¡±;
print ¡° »ç¿ëÀÚ ID(default:all) : ¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { $id = ¡°ALL¡±; }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if ( !user_check($id, ¡°1¡±) &&
($id ne ¡°ALL¡±) ) {
end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
# Àüü »ç¿ëÀÚÀÇ µð½ºÅ© Á¤º¸´Â repquota ¸í·É
# (man repquota)À» ÀÌ¿ëÇϰí, °³º° »ç¿ëÀÚ´Â quota ¸í·É
# (man quota)À» ÀÌ¿ëÇÑ´Ù.
if($id eq ¡°ALL¡±) { system(¡°/usr/sbin/repquota
-avug¡±); }
else { system(¡°/usr/bin/quota -u $id¡±); }
end(¡°Á¶È¸°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.¡±);
}
sub add_domain
{
# 21. µµ¸ÞÀÎ µî·Ï
print ¡°$prog_msg µµ¸ÞÀÎÀ» µî·ÏÇÒ »ç¿ëÀÚ ID : ¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { add_domain(); }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if (!user_check($id, ¡°1¡±)) {
end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
print ¡°$prog_msg µî·ÏÇÒ µµ¸ÞÀÎ(ex. abcd.co.kr) : ¡°;
$domain = <STDIN>;
chomp $domain;
if ($domain eq ¡°¡±) { add_domain(); }
if ($domain eq ¡°¡¬¡¬¡±) { menu(); }
$domain =~ tr/[A-Z]/[a-z]/;
$domain =~ s/^ +| + _$//g;
# Áߺ¹À» ¸·±â À§ÇØ ³×ÀÓ¼¹ö zone ÆÄÀÏÀÌ
# ÀÌ¹Ì Á¸ÀçÇÏ´ÂÁö Á¡°ËÇÑ´Ù.
if(-e ¡°/var/named/custom/$domain¡±) {
print ¡°¡¬n$prog_msg ERROR, µ¿ÀÏÇÑ µµ¸ÞÀÎÀÌ¡±;
print ¡° ÀÌ¹Ì µî·ÏµÇ¾î ÀÖ½À´Ï´Ù. [Enter] ¡°;
$input = <STDIN>;
menu(); }
check();
# bind
8.x´ë¿¡¼ »ç¿ëÇÏ´Â /etc/named.conf¿¡
# Ãß°¡ÇÒ Á¤º¸¸¦ »ý¼ºÇÑ´Ù.
$named_conf = <<¡±__END__¡±;
zone
¡°$domain¡± {
type master;
file ¡°custom/$domain¡±;
};
__END__
# zone
ÆÄÀÏ(/var/named/custom/µµ¸ÞÀθí)¿¡
# ±â·ÏÇÒ Á¤º¸¸¦ »ý¼ºÇÑ´Ù.
# serial ºÎºÐÀÇ $date_seri °ªÀº ÀÏÀÚÁ¤º¸¿¡
# ¹øÈ£(01)¸¦ Á¶ÇÕÇÑ °ª(1999123101)À» »ç¿ëÇÑ´Ù.
$named_zone = <<¡±__END__¡±;
@ IN SOA ns.way.co.kr
domain.way.co.kr.
(
$date_seri
; serial
8H
; refresh
2H
; retry
1W
; expiry
1D
) ; minimum
IN NS
ns.way.co.kr.
IN NS
dns.way.co.kr.
IN A
$ip_address
IN MX
10 mail.way.co.kr.
www IN A
$ip_address
IN MX
10 mail.way.co.kr.
__END__
# apache
¼³Á¤ÆÄÀÏ(httpd.conf)ÀÇ VirtualHost
# Á¤º¸¸¦ »ý¼ºÇÑ´Ù.
# httpd.conf ÆÄÀÏ¿¡ ¹Ì¸® NameVirtualHost
# Áö½ÃÀÚ¸¦ ¼±¾ðÇØ µÎ¾î¾ß ÇÑ´Ù.
# Ãß°¡ÇÒ ¸ðµç µµ¸ÞÀÎÀÌ µ¿ÀÏÇÑ IP¸¦ »ç¿ëÇÏ´Â
# Name-based Virtual Host ÀÓÀ» ÀüÁ¦·Î ÇÑ´Ù.
$httpd_conf = <<¡±__END__¡±;
<VirtualHost $ip_address>
ServerAdmin webmaster\@$domain
DocumentRoot /home/$id/$webdir
ScriptAlias /cgi-bin/ /home/$id/$webdir/cgi-bin/
ServerName www.$domain
ServerAlias $domain www.$domain
TransferLog /home/$id/$logdir/today.log
ErrorLog /home/$id/$logdir/error.log
</VirtualHost>
__END__
# »ý¼ºÇÑ
named.conf Á¤º¸¸¦ ÆÄÀÏ¿¡ ±â·ÏÇÑ´Ù.
$FILE = ¡°/etc/named.conf¡±;
open(FILE, ¡°>>$FILE¡±) || file_error();
print FILE $named_conf;
close(FILE);
# »ý¼ºÇÑ
named zone ÆÄÀÏ Á¤º¸¸¦ ±â·ÏÇÑ´Ù.
$FILE = ¡°/var/named/custom/$domain¡±;
open(FILE, ¡°>$FILE¡±) || file_error();
print FILE $named_zone;
close(FILE);
# Ãß°¡ÇÑ
µµ¸ÞÀÎÀ¸·Î µµÂøÇÑ ¸ÞÀÏÀ» ¼ö½ÅÇÒ ¼ö ÀÖµµ·Ï
# ¼³Á¤ÇÑ´Ù.
$FILE = ¡°/etc/sendmail.cw¡±;
open(FILE, ¡°>>$FILE¡±) || file_error();
print FILE ¡°$domain¡¬n¡±;
close(FILE);
# µµ¸ÞÀκ°·Î
°¡»ó »ç¿ëÀÚ mailÀ» »ç¿ëÇÒ ¼ö
# ÀÖµµ·Ï virtusertableÀ» ¼³Á¤(Ãß°¡)ÇÑ´Ù.
# @way.co.kr way¶ó°í ÁöÁ¤Çϸé way.co.kr µµ¸ÞÀÎÀ¸·Î
# ¼ö½ÅµÇ´Â ¸ðµç ¸ÞÀÏÀº way °èÁ¤À¸·Î ¹è´ÞµÈ´Ù.
# sendmail.cf ÆÄÀÏ¿¡ virtusertableÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â
# ¼³Á¤ÀÌ µÇ¾îÀÖ¾î¾ß ÇÑ´Ù.
$FILE = ¡°/etc/mail/virtusertable¡±;
open(FILE, ¡°>>$FILE¡±) || file_error();
print FILE ¡°¡¬@$domain $id¡¬n¡±;
close(FILE);
# Ãß°¡ÇÑ
µµ¸ÞÀÎÀÇ VirtualHostÁ¤º¸¸¦ httpd.conf
# ÆÄÀÏ¿¡ ±â·Ï(Ãß°¡)ÇÑ´Ù.
# apache¸¦ RedHat rpmÀ¸·Î ¼³Ä¡ÇÑ °æ¿ì¿¡´Â
# /etc/httpd/conf/httpd.conf ÆÄÀÏ¿¡ ¹Ý¿µÇؾßÇÑ´Ù.
$FILE = ¡°/usr/local/apache/conf/httpd.conf¡±;
open(FILE, ¡°>>$FILE¡±) || file_error();
print FILE ¡°$httpd_conf¡±;
close(FILE);
end();
}
sub domain_apply
{
# 22. µµ¸ÞÀÎ Á¤º¸ °»½Å
# ¡°µµ¸ÞÀÎ µî·Ï¡±ÈÄ µî·Ï³»¿ëÀ» ¹Ý¿µÇϱâ À§ÇØ ½ÇÇàÇÑ´Ù.
# apache¸¦ RedHat rpmÀ¸·Î ¼³Ä¡ÇÑ °æ¿ì¿¡´Â
# /etc/rc.d/init.d/httpd ÆÄÀÏÀ» ÀÌ¿ëÇÑ´Ù.
# restart¸¦ ÀÌ¿ëÇÒ ¼öµµ ÀÖÁö¸¸ ¿¬¼ÓµÇ´Â ½ÇÇà¿¡ ¾à°£ÀÇ
# ¿©À¯¸¦ µÎ±â À§ÇØ 1ÃÊ °£°ÝÀ¸·Î stop°ú start¸¦ ½ÇÇàÇÑ´Ù.
check();
system(¡°/usr/local/apache/bin/apachectl stop¡±);
sleep 1;
system(¡°/usr/local/apache/bin/apachectl start¡±);
sleep 1;
system(¡°/etc/rc.d/init.d/named stop¡±);
sleep 1;
system(¡°/etc/rc.d/init.d/named start¡±);
sleep 1;
system(¡°/etc/rc.d/init.d/sendmail stop¡±);
sleep 1;
system(¡°/etc/rc.d/init.d/sendmail start¡±);
sleep 1;
end();
}
sub domain_display
{
# 23. µµ¸ÞÀÎ Á¤º¸ »ó¼¼Á¶È¸
# µµ¸ÞÀÎÀÇ µî·Ï³»¿ë(°¢ ¼³Á¤ÆÄÀÏ)À» Á¶È¸ÇÑ´Ù.
# vi editor¸¦ ÀÌ¿ëÇØ ¼³Á¤ÆÄÀϵéÀ» Á¶È¸Çϰí
# ÆíÁýÇÒ ¼ö ÀÖ´Ù.
print ¡°$prog_msg Á¶È¸ÇÒ µµ¸ÞÀÎ(ex. abcd.co.kr) : ¡°;
$domain = <STDIN>;
chomp $domain;
if ($domain eq ¡°¡±) { domain_display();
}
if ($domain eq ¡°¡¬¡¬¡±) { menu(); }
$domain_file_list = ¡°/etc/named.conf ¡°;
$domain_file_list .= ¡°/var/named/custom/$domain
¡°;
$domain_file_list .= ¡°/etc/sendmail.cw ¡°;
$domain_file_list .= ¡°/etc/mail/virtusertable
¡°;
$domain_file_list .= ¡°/usr/local/apache/conf/httpd.conf
¡°;
check();
system(¡°vi $domain_file_list¡±);
end();
}
sub pass_define
{
# 26. »ç¿ëÀÚ password ÁöÁ¤
print ¡°$prog_msg password¸¦ ÁöÁ¤(º¯°æ)ÇÒ »ç¿ëÀÚ ID :
¡°;
$id = <STDIN>;
chomp $id;
if ($id eq ¡°¡±) { pass_define(); }
if ($id eq ¡°¡¬¡¬¡±) { menu(); }
if (!($user_data = user_check($id, ¡°1¡±)))
{
end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
($ud1, $ud2, $ud3, $ud4, $ud5, $ud6, $ud7)
= split(¡°:¡±, $user_data);
if ($ud3 < $min_uid) {
end(¡°ÇØ´ç IDÀÇ password¸¦ ÁöÁ¤(º¯°æ)ÇÒ ¼ö ¾ø½À´Ï´Ù.¡±); }
check();
system(¡°/usr/bin/passwd $id¡±);
end();
}
sub ps_ax
{
# 28. ÇÁ·Î¼¼¼ Á¶È¸
system(¡°/bin/ps ax¡±);
end();
}
sub demon
{
# 29. µ¥¸ó °ü¸®
# ¡°µµ¸ÞÀÎ Á¤º¸ °»½Å¡±°ú ¡°ÇÁ·Î¼¼¼ Á¶È¸¡±¸¦ ÅëÇØ µ¥¸óÀÇ
# ¼öµ¿ Á¶ÀÛ(stop, start, restart)ÀÌ ÇÊ¿äÇÑ °æ¿ì »ç¿ëÇÑ´Ù.
print ¡°$prog_msg {httpd,named,sendmail}¡±;
print ¡° {start,stop,restart}¡¬n¡±;
print ¡°$prog_msg # ¡°;
$cmd = <STDIN>;
chomp $cmd;
if ($cmd eq ¡°¡±) { demon(); }
if ($cmd eq ¡°¡¬¡¬¡±) { menu(); }
($cmd, $act) = $cmd =~ /^(.*) (.*)$/;
if($cmd =~ /^httpd/) {
$cmd = ¡°/usr/local/apache/bin/apachectl¡±; }
elsif($cmd =~ /^named/) {
$cmd = ¡°/etc/rc.d/init.d/named¡±; }
elsif($cmd =~ /^sendmail/) {
$cmd = ¡°/etc/rc.d/init.d/sendmail¡±; }
# ÀÓÀÇÀÛµ¿À» ¸·±â À§ÇØ httpd, named, sendmail ÀÌ¿ÜÀÇ
# µ¥¸óÀº Á¶ÀÛÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
else { end(¡°Çã¿ëµÇÁö ¾Ê´Â ¸í·ÉÀÔ´Ï´Ù.¡±); }
system(¡°$cmd $act¡±);
demon();
end();
}
À̹ø ¡°Perl
½Ã½ºÅÛ µµ±¸¡± °Á¸¦ ³¡À¸·Î ºÎÁ·Çϳª¸¶ ¡°Perl programming¡± ¿¬À縦
¸¶Ä£´Ù.