질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

아파치 사용자 인증에 대해 ..

작성자 정보

  • 임근식 작성
  • 작성일

컨텐츠 정보

본문

===> 웹인증 방식을 통한 유저를 관리하고자 한다면 아래의 소스를 이용하여
관리하시면 됩니다. 그리고 일괄적으로 /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>&nbsp;&nbsp;<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="확인">&nbsp;
        <input type=reset value="재입력">&nbsp;
        <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">&nbsp;
        <input type=submit value="삭제" name="action1">&nbsp;
        <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>&nbsp;</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

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,292 명
  • 현재 강좌수 :  36,954 개
  • 현재 접속자 :  406 명