아파치 사용자 인증에 대해 ..
작성자 정보
- 임근식 작성
- 작성일
컨텐츠 정보
- 2,330 조회
- 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
관련자료
-
이전
-
다음