»ç¿ëÇÏ´Â ¼¹ö¿¡ 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¡± ¿¬À縦 ¸¶Ä£´Ù.