아파치 사용자 인증에 대해 ..
작성자 정보
- 임근식 작성
 - 작성일
 
컨텐츠 정보
- 3,305 조회
 - 0 추천
 - 목록
 
본문
===> 웹인증 방식을 통한 유저를 관리하고자 한다면 아래의 소스를 이용하여 
관리하시면 됩니다. 그리고 일괄적으로 /etc/passwd의 유저아이디를 추가하고자
한다면 bash script 또는 아래의예처럼 Perl Script lang를 이용하여 코딩하여 운영하
시면 됩니다. 
------------------------ webauth.cgi example -------------------------------------------------
#!/usr/bin/perl
#===========================================================
use CGI;
$cgi=new CGI;
$HomeUrl="http://www.yourdomain.co.kr/";
$BodyBackGround="./bg-main1.gif";
$salt="HT";
$passwd_file=".htpasswd";
#===========================================================
print "Content-Type: text/html
";
print<<EOT;
<html>
EOT
if ($cgi->param("action") eq "add1") {
        $passwd = crypt($cgi->param('passwd1'), $salt);
        # Password 파일에 새로운 Entry를 추가한다.
        open(PASSWD, ">> $passwd_file");
        print PASSWD $cgi->param('userid'),":",$passwd,"
";
        close(PASSWD);
        print<<EOF;
        <body background=$BodyBackGround>
        <div align=left>
        <font color="blue">
        <ul>※인증 허가 ID가 성공적으로 등록되었습니다.</ul><br><br>
        <ul><a href="./webauth.cgi">인증 시스템으로 돌아가기</a></ul>
        </font>
        </body>
        </html>
EOF
        exit(0);
} elsif ($cgi->param("action") eq "add") {
        print<<EOT;
        <head>
        <script language="JavaScript">
        function formchk() {
                if (document.actionform.passwd1.value!=document.actionform.passwd2.value) {
                        alert("Password가 일치하지 않습니다.."+"\n"+"다시 입력하세요");
                        document.actionform.passwd1.value="";
                        document.actionform.passwd2.value="";
                        document.actionform.passwd1.focus();
                        return false;
                }
                return true;
        }
        </script>
        </head>
        <body background=$BodyBackGround>
        </div>
        <form name="actionform"  action="./webauth.cgi"  method="POST" OnSubmit="return 
formchk()">
        <input type=hidden name="action" value="add1">
        <p>  <ul><table border cellspacing=0 bordercolordark=white bor
 dercolorlight=black >
        <tr>
                <td bgcolor="orange">사용자ID</td>
                <td><input type=text name="userid" size=10 maxlength=15></td>
        </tr>
        <tr>
                <td bgcolor="orange">신규 Password</td>
                <td><input type=password name="passwd1" size=10 maxlength=15></td>
        </tr>
        
        </table>
        </ul><br>
        <ul><input type=submit value="확인"> 
        <input type=reset value="재입력"> 
        <input type=button value="목록열람" Onclick="self.location='./webauth.cgi'">
        </ul></form>
        </body>
        </html>
EOT
        exit(0);
} elsif ($cgi->param("action") eq "form") {
        $temp=$cgi->param("userid");
        print<<EOT;
        <head>
        <script language="JavaScript">
        function formchk() {
                if (document.actionform.passwd1.value!=document.actionform.passwd2.value) {
                        alert("Password가 일치하지 않습니다.."+"\n"+"다시 입력하세요");
                        document.actionform.passwd1.value="";
                        document.actionform.passwd2.value="";
                        document.actionform.passwd1.focus();
                        return false;
                }
                return true;
        }
        </script>
        </head>
        <body background=$BodyBackGround>
        <div align=left>
        <form name="actionform"  action="./webauth.cgi"  method="POST" OnSubmit="return 
formchk()">
        <input type=hidden name="action" value="form1">
        <input type=hidden name="userid1" value="$temp">
        <ul><table border cellspacing=0 bordercolordark=white bor
 dercolorlight=black >
        <tr>
                <td bgcolor="orange">사용자ID</td>
                <td><input     type=text      name="userid"     value="$temp"      size=10 
maxlength=15></td>
        </tr>
        <tr>
                <td bgcolor="orange">변경할 Password</td>
                <td><input type=password name="passwd1" size=10 maxlength=15></td>
        </tr>
       
        </table>
        </ul><br><ul><p align=left><font color="red">※암호 변경 방법: [변경할 Password]를 입력후 [수정]을 클릭하세요!</font></p></ul><br>
       <ul> <input type=submit value="수정" name="action1"> 
        <input type=submit value="삭제" name="action1"> 
        <input type=button value="목록열람" Onclick="self.location='./webauth.cgi'">
        </ul></form>
        </body>
        </html>
EOT
        exit(0);
} elsif ($cgi->param("action") eq "form1") {
        $passwdfile[0]="";
        $tempaction= $cgi->param("action1");
        $userid= $cgi->param("userid1");
        if (! open (TEMPFILE,"< $passwd_file")) {
                print<<EOT;
                <body background=$BodyBackGround>
                환경설정 화일을 읽지 못했습니다. .htpasswd화일의 퍼미션이 707로 되어있는지 확인해주세요.
                </body>
                </html>
EOT
                exit(0);
        }
        $count=0;
        while (defined($templine=<TEMPFILE>)) {
                chomp($templine);
                $temp=substr($templine,0,index($templine,":"));
                if ($temp ne $userid) {
                        $passwdfile[$count]=$templine;
                        $count++;
                } elsif ($tempaction eq "수정") {
                        $passwd = crypt($cgi->param('passwd1'), $salt);
                        $passwdfile[$count]=$cgi->param('userid').":".$passwd;
                        $count++;
                }
        }
        close TEMPFILE;
        if (! open (TEMPFILE,"> $passwd_file")) {
                print<<EOT;
                <body background=$BodyBackGround>
                환경설정 화일을 읽지 못했습니다.
                </body>
                </html>
EOT
                exit(0);
        }
        for ($i=0;$i<$count;$i++) {
                print TEMPFILE $passwdfile[$i],"
";
        }
        close TEMPFILE;
}
print<<EOT;
<head>
<style>
A {text-decoration:none}
</style>
</head>
<body background=$BodyBackGround>
</div>
EOT
if (! open (TEMPFILE,"< $passwd_file")) {
        print<<EOT;
        환경설정 화일을 읽지 못했습니다.
        </body>
        </html>
EOT
        exit(0);
}
        print "<ul><font color=blue>★타인의 암호를 변경하는 행동을 삼가하여주시기 바랍니다.</font>";
print "<br><font color=red>★암호변경방법: 자신의 아이디 클릭하세요!</font></ul>";
print "<ul><ul><ul><ul><table border cellspacing=0 bordercolordark=white bor
dercolorlight=black >
<tr><td bgcolor=#e6bbc8> <font size=5 color=black>웹 인증 시스템 </font></td></tr></table>
</ul></ul></ul></ul>";
print "
<table border cellspacing=0 bordercolordark=white bor
dercolorlight=black >
";
print "<tr>
";
$count=1;
$rowcolor="#ccffcc";
$rowcount=1;
while (defined($templine=<TEMPFILE>)) {
        chomp($templine);
        $temp=substr($templine,0,index($templine,":"));
        if ($rowcolor eq "#00ff00")
        {
         $rowcolor="#ccffcc";
         }
        else 
        {
         $rowcolor="#00ff00";
         }
        #print "<tr>
";
        print "<td bgcolor="$rowcolor"><font color=#000000>$count번째</font></td>
";
        print "<td bgcolor="$rowcolor"><a href='./webauth.cgi?userid=$temp&action=form'><font color=blue>$temp</font></a></td><td> </td>
";
        if ($rowcount eq 4 )
         { print "</tr><tr>
";
         $rowcount=0;
          }
        $count++;
        $rowcount++;
}
print "</table>
";
close TEMPFILE;
print<<EOT;
<form action="./webauth.cgi" name="actionform" method="POST">
<input type=hidden name=action value="add">
<input type=submit value="아이디추가">
<input type=button value="제작자 홈으로" OnClick="self.location='$HomeUrl'">
</form>
<p><ul><font size=2 color=blue>((Web Authentication System Ver 0.5, programmed by invain))<ul></font></p>
</body>
</html>
EOT
관련자료
- 
			이전
 - 
			다음
 
								