`
isiqi
  • 浏览: 15947869 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用htpasswd.pl脚本远程管理apache密码文件

阅读更多
在搭建trac/svn系统时,一般都会采用apache的.htacces 认证方法 但trac本身并不提供修改密码的功能,修改密码只能通过htpasswd/htpasswd2命令来进行,这的确是一件相当不make sense的事。
其实,利用一个免费的perl脚本可以方便的通过http方式修改apache的认证文件。
  文件名:htpasswd.pl,获取地址http://home.xnet.com/~efflandt/pub/htpasswd.pl
该脚本可以通过web浏览器从你的htpasswd文件直接增加或者删除用户,管理者密码是经过加密的。该脚本本身并不保护一个目录,也不创建一个口令保护功能。它仅用来帮助你管理你的口令文件。这就是说在你的服务器上事先应有口令文件时,该脚本方可发挥作用。

安装&配置

step1.拷贝htpasswd.pl至cgi-bin目录
suse对应/srv/www/cgi-bin
fedora对应/var/www/cgi-bin
step2.改名
把htpasswd.pl改名为htpasswd.cgi
step3.用文本编辑器打开配置脚本(cfg.pl)
编辑如下变量:
#!/usr/local/bin/perl 修改为 #!/bin/perl
配置要修改的apache认证文件,找到以下几行
# Password file with full system path (where not accessible by URL).
$file = '/full_path_to/.htpasswd'; 修改为 $file='/etc/svn-auth-file'#假设你的验证文件是/etc/svn-auth-file
step4 chmod 755 htpasswd.cgi

不出意外的话,访问http://localhost/cgi-bin/htpasswd.cgi即可出现密码修改页面
有关密码文件创建,请参见 http://blog.csdn.net/forlinux/archive/2006/06/11/787703.aspx

-----htpasswd.pl-------
  1. #!/usr/local/bin/perl-T
  2. #htpasswd.cgibyDavidEfflandt(efflandt@xnet.com)8/97
  3. #Lastupdate10/4/99
  4. #
  5. #Updatepasswordfilefromthewebforusewithuserauthentication.
  6. #Storeseachlineintheformat:username:crypted_password
  7. #
  8. #Built-informisprovidedifyouGETthescript.
  9. #FormisprocessedifyouPOSTtothisscript.
  10. #
  11. #Ifyouwantyourpasswordstobesecure,itisbesttorunthis
  12. #suidasyou(chmod4705htpasswd.cgi)whichmayrequireCwrapper.
  13. #Alsokeepthisscriptinadirectorythatrequiresuserauthentication
  14. #unlessyouallownewuserstosettheirownpassword(see$allow_new).
  15. #
  16. #Ifnotrunningsuidyoushouldtouchthepasswordfilefirstand
  17. #chmod606(orwhateverisreq'dtoaccessitasyouandwebserver).
  18. #
  19. #Toaddorremoveusersbyanadministrator,createausercalled'admin'
  20. #withapassword.Enterusernameyouwanttoaddorremovewithadmin
  21. #passwordas"CurrentPassword"(plusnewpasswordsfornewusers).
  22. #
  23. #Anyonemayremovetheirownnamefromthepasswordfileiftheysupply
  24. #theircorrectpassword.
  25. ###Variables
  26. #Passwordfilewithfullsystempath(wherenotaccessiblebyURL).
  27. $file='/full_path_to/.htpasswd';
  28. #Allowanyonetoaddnewusers(1=yes,0=no)
  29. $allow_new=0;
  30. #Setuntaintedpathforsuidscripts
  31. $ENV{PATH}='/bin:/usr/bin:/usr/local/bin';
  32. $ENV{IFS}=""if$ENV{IFS}ne"";
  33. ###EndofVariables
  34. #CreateformandexitonGET
  35. &make_formunless($ENV{'REQUEST_METHOD'}eq"POST");
  36. #GetPOSTinput
  37. read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
  38. #Splitthename-valuepairs
  39. @pairs=split(/&/,$buffer);
  40. foreach$pair(@pairs)
  41. {
  42. ($name,$value)=split(/=/,$pair);
  43. $value=~tr/+//;
  44. $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  45. $name=~tr/+//;
  46. $name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  47. $FORM{$name}=$value;
  48. }
  49. if($FORM{user}){
  50. $user=$FORM{user};
  51. }else{
  52. &error("Error","Usernamemissingfromform.");
  53. }
  54. $pwd=$FORM{old};
  55. $command=$FORM{command};
  56. unless(($commandeq'remove')
  57. ||($FORM{new}&&$FORM{new}eq$FORM{new2})){
  58. &error("PasswordMismatch","Newpasswordmismatchormissing.");
  59. }
  60. #Getexistingpasswords
  61. if(-e$file){
  62. open(IN,$file)or&error("Error","Can'topenpasswordfile:$!");
  63. flock(IN,2);
  64. seek(IN,0,0);
  65. while(<IN>){
  66. chomp;
  67. ($name,$value,$tail)=split(/:/,$_,3);
  68. $hash{$name}=$value;
  69. $tail{$name}=$tail;#maintainanyadditionalfields
  70. }
  71. closeIN;
  72. }
  73. #Saltforcrypt
  74. @range=('0'..'9','a'..'z','A'..'Z','.','/');
  75. srand(time()^($$+($$<<15)));
  76. $salt=$range[rand(int($#range)+1)].$range[rand(int($#range)+1)];
  77. #Checkforvalidpasswordorexistinguser
  78. $pass=$hash{$user}if$hash{$user};
  79. $cpwd=crypt($pwd,$pass);
  80. $admin=$hash{admin}&&crypt($pwd,$hash{admin})eq$hash{admin};
  81. if(($commandne'new')&&($admin||$pass&&$cpwdeq$pass)){
  82. if($commandeq'remove'){
  83. delete($hash{$user});delete($tail{$user});
  84. $msg="User<B>$user</B>wasremovedfrompasswordfile.";
  85. }elsif(!$pass){
  86. $msg="WARNING!'ChangePassword'checkedfornon-existinguser?\n"
  87. ."<P>Assigningpasswordfornewuser<B>$user</B>anyway.\n"
  88. ."<P>Ifthiswasanerror,gobackand'RemoveUser'";
  89. }else{
  90. $msg="Passwordhasbeenupdatedfor$user.";
  91. }
  92. }elsif($FORM{command}eq'new'){
  93. if($pass){
  94. &error("Sorry","User<B>$user</B>isalreadyassigned.");
  95. }elsif($allow_new||$admin){
  96. $msg="Passwordhasbeenassignedfornewuser$user.";
  97. }else{
  98. &begin_html("Sorry,NewUser");
  99. print"Contactfileownerforpasswordyoucanchangelater.";
  100. &end_html;
  101. exit;
  102. }
  103. }else{
  104. &error("PasswordError",
  105. "Invaliduserorpasswordorforgottocheck'NewUser'.");
  106. }
  107. #Assignnewpasswordtouserandwritetofile
  108. $hash{$user}=crypt($FORM{new},$salt)if$commandne'remove';
  109. if(open(OUT,">$file")){
  110. flock(OUT,2);
  111. seek(OUT,0,0);
  112. foreach$name(sortkeys%hash){
  113. printOUT"$name:$hash{$name}";
  114. printOUT":$tail{$name}"if$tail{$name};
  115. printOUT"\n";
  116. }
  117. }else{
  118. &error("Error","Can'tupdatepasswordfile:$!");
  119. }
  120. #PrintReturnHTML
  121. &begin_html("ThankYou");
  122. print"$msg\n";
  123. &end_html;
  124. ###Subroutines
  125. #subroutinebegin_html(title)
  126. subbegin_html{
  127. local($title)=@_;
  128. print"Content-type:text/html\n\n";
  129. print"<html><head><title>$title</title></head><body>\n";
  130. print"<center><h1>$title</h1></center>\n<hr><p>\n";
  131. }
  132. #subroutineend_html
  133. subend_html{
  134. #Addfooterlinkshere
  135. print"<P></body></html>\n";
  136. }
  137. #subroutinemake_form
  138. submake_form{
  139. &begin_html("ChangeorAddPassword");
  140. print<<NEW_FORM;
  141. Usethisformtochangeyourpasswordforaccesstorestricted
  142. directorieshere.Newuserswillbeinformedifpasswordwasassignedor
  143. iftheyneedtocontacttheownerofthesepages.
  144. <FORMMETHOD="POST"ACTION="$ENV{SCRIPT_NAME}">
  145. <DL>
  146. <DT>E-mailAddress(orusernameonthissystem):
  147. <DD><INPUTNAME="user">
  148. <DT>CurrentPassword(requiredunlessnewuser):
  149. <DD><INPUTTYPE=PASSWORDNAME="old">
  150. <DT>NewPassword:
  151. <DD><INPUTTYPE=PASSWORDNAME="new">
  152. <DT>ConfirmNewPassword:
  153. <DD><INPUTTYPE=PASSWORDNAME="new2">
  154. <DT>Request:
  155. <DD>
  156. <INPUTTYPE="radio"NAME="command"VALUE="change"CHECKED>ChangePassword
  157. <DD>
  158. <INPUTTYPE="radio"NAME="command"VALUE="new">NewUser
  159. <DD>
  160. <INPUTTYPE="radio"NAME="command"VALUE="remove">RemoveUser
  161. </DL>
  162. <P><INPUTTYPE="submit"VALUE="SubmitRequest">
  163. </FORM>
  164. NEW_FORM
  165. &end_html;
  166. exit;
  167. }
  168. suberror{
  169. local($title,$msg)=@_;
  170. &begin_html($title);
  171. print"<P>$msg\n";
  172. print"<P>Pleasecheckyournameandre-enterpasswords.\n";
  173. &end_html;
  174. exit;
  175. }


分享到:
评论

相关推荐

    Algorithm-htpasswd.zip

    Algorithm-htpasswd.zip,http基本身份验证密码文件实用程序的node.js包。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。

    Ansible-ansible-role-htpasswd.zip

    Ansible-ansible-role-htpasswd.zip,ansible角色-htpasswdansible角色:htpasswd,ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。

    squid包含htpasswd.exe

     Unix Like的操作系统下的大部分软件都是基于命令行的,使用文本文件进行配置,这样虽说对一些用惯了Windows下软件的朋友们会有些复杂的感觉,但是这样的软件还是有好处的,毕竟其没有Gui会有更高的性能,配置文件...

    htpasswd.exe

    htpasswd.exe

    htpasswd:用于HTTP基本身份验证密码文件实用程序的Node.js程序包

    用于管理HTTP基本身份验证密码文件的CLI工具。 基本上,这是Apache 实用程序的Node.js实现。 安装 通过git(或下载的tarball): $ git clone git://github.com/http-auth/htpasswd.git 通过 : $ npm install ...

    VisualSVN Server_3.5.x_64bit 在线修改密码

    $htpasswdPath = "c:\Program Files\VisualSVN Server\bin\htpasswd.exe"; 3. 修改htdocs文件夹中的pwd.php文件,将第4行的$passwdfile改为实际的路径 $passwdfile="C:\\Repositories\\htpasswd"; 4. 重新启动...

    apache密码生成工具htpasswd使用详解

    htpasswd是apache的一个工具,该工具主要用于建立和更新存储用户名、密码的文本文件,主要用于对基于http用户的认证。 htpasswd的安装很简单,它是随apache的安装而生成。这点与ab工具是一样的,这里就不详细说明了 ...

    apache 2.4.x http server x64.zip 下载

    VisualSVN Server 添加自助修改密码页面所需的文件,解压后,从里面提取一个文件 htpasswd.exe 放到:C:\Program Files\VisualSVN Server\bin\htpasswd.exe

    HTAdmin:HTAdmin 的古老代码,一个用于管理 Apache .htpasswd 文件的简单 PHP 工具

    HTAdmin 是用于管理 Apache .htpasswd 文件的基本且简单的 PHP 工具。 开发从 2000 年(PHP 4 首次发布时)开始,并在 2005 年(PHP 5 之前)停止。要求Linux/Unix/BSD、Windows 或 Mac OS X 阿帕奇网络服务器PHP...

    VisualSVN server 3.9.X网页自助修改密码

    公司的VisualSVN服务从2.6升级到3.9.5,结果自助修改...地址不对的话,修改密码时会因找不到密码文件或htpasswd命令文件而失败 3 一定要安装vc11和vc16运行库, 不安装的话会因添加的exe及dll文件不可用而导致修改密码失败

    nginx http auth basic生成密钥文件

    使用方式:./htpasswd.py -c -b 生成文件名 用户名 密码,需要修改为可执行权限,chmod 777 htpasswd.py

    js实现的apache的htpasswd方法

    js实现的htpasswd加密

    rpm包安装htpasswd所需包

    rpm包安装htpasswd所需包rpm包安装htpasswd所需包rpm包安装htpasswd所需包rpm包安装htpasswd所需包rpm包安装htpasswd所需包rpm包安装htpasswd所需包rpm包安装htpasswd所需包rpm包安装htpasswd所需包rpm包安装...

    htpasswd命令 管理用户基本认证文件

    htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。 语法格式:htpasswd [参数] [用户和密码] 常用参数: -c 创建一个加密文件 -n 不更新加密文件,只将加密后...

    通过PHP自助修改SVN密码和添加修改SVN用户

    ...input size=12 name=username&gt;&lt;/td&gt; 但记得限制该登录页面,...3、请自行修改124和125行的$passwdfile的密码文件目录和$command的htpasswd.exe路径,自行搭建PHP环境,放在PHP目录下直接访问,无需数据库支持

    超简单的HTPASSWD账号管理

    以一个PHP文件实现HTACCESS BasicAuth 的账号密码管理 可以管理MD5 SHA UNIX-CRYPT的账户密码 不是简单的php exec()调用,因此适合safe_mode的环境 此程序假设了用户已BasicAuth(appache)登录成功。 程序包含了...

    Apache HTTP Server Version 2.2 文档(2013.4.10最新)

    htpasswd - 管理用于基本认证的用户文件 httpd - Apache超文本传输协议服务器 httxt2dbm - 生成RewriteMap指令使用的dbm文件 服务器和支持程序 logresolve - 解析Apache日志中的IP地址为主机名 其他程序 rotatelogs...

    VisualSvn用户自助修改密码

    VisualSvn用户自助修改密码: 1.修改apache的conf目录下的httpd.conf,在最后增加如下代码。第一行的意思是设定一个http访问的路径svntools,以后会通过访问...其中密码文件使用svn server的密码文件htpasswd。

    php版htpasswd密码生成器

    htpasswd auth_basic ,php版htpasswd密码生成器

Global site tag (gtag.js) - Google Analytics