zoukankan      html  css  js  c++  java
  • centos apache svn配置

    单独安装svn服务:

    安装svn软件

    yum install subversion
    

    创建根目录

    mkdir -p /var/www/svn
    

    创建版本库repos

    svnadmin create /var/www/svn/repos
    

    查看是否安装成功,出现版本信息为成功

    svnserve --version
    

    修改vim /var/www/svn/repos/conf/svnserve.conf 配置文件  

    去掉如下几行的注释
    anon-access = none
    auth-access = write
    password-db = passwd
    authz-db = authz
    ###################################################################
    anon-access = none 		     # 使非授权用户无法访问
    auth-access = write 	          # 使授权用户有写权限
    password-db = passwd 	          # 指明密码文件路径
    authz-db = authz 			# 访问控制文件
    ####################################################################
    

    修改passwd文件

    [users]
    
    # harry = harryssecret
    # sally = sallyssecret
    
    user1 = 123
    user2 = 123
    
    用户名 = 密码
    各语句都必须顶格写, 左侧不能留空格, 否则会出错.
    

    修改authz认证文件

    vim /var/www/svn/repos/conf/auth
    [groups]
    
    admin = user1
    
    [repos:/]
    
    @admin = rw
    
    user2 = r
    
    将用户添加到组,可以添加多个用户,用户之间用逗号分开
    
    各语句都必须顶格写, 左侧不能留空格, 否则会出错.
    

    启动svn服务:

    svnserve -d -r /var/www/svn/
    

    访问地址:

    svn://ip/repos
    

    至此单独svn的部署完毕!  

    Apache+SVN配置

      

    开始安装步骤:

    安装subversionhttpd mod_dav_svn

    yum install httpd -y 
    
    yum install subversion mod_dav_svn -y 
    

    安装好svn后svn的配置文件默认在Apache的目录/etc/httpd/conf.d/下

    [root@localhost~]# ll /etc/httpd/conf.d/
    总用量 20
    -rw-r--r--  1 root root 1796 4月  17 2014 perl.conf
    -rw-r--r--. 1 www  www   674 10月 31 2014 php.conf
    -rw-r--r--  1 www  www   392 7月  18 23:24 README
    -rw-r--r--  1 www  www  1663 8月  16 15:47 subversion.conf
    -rw-r--r--  1 www  www   299 7月  12 19:00 welcome.conf  

    打开配置文件subversion.conf

    [root@localhost conf.d]# more subversion.conf    
    
    LoadModule dav_svn_module     modules/mod_dav_svn.so
    LoadModule authz_svn_module   modules/mod_authz_svn.so
    
    #
    # Example configuration to enable HTTP access for a directory
    # containing Subversion repositories, "/var/www/svn".  Each repository
    # must be both:
    

    文件开头这两行为加载svn模块,如果没有则表示安装不成功.

    让apache支持svn访问,并制定svn的版本库目录位置

    vim /etc/httpd/conf.d/subversion.conf

    <Location /repos>                             #创建的svn根目录
            DAV svn
            SVNPath /var/www/svn/repos/               #svn版本库路径
            AuthType Basic
            AuthName "svn"
            AuthUserFile /var/www/svn/repos/conf/passwd     #svn的密码文件路径
            Require valid-user
    </Location>  

    创建svn版本库:

    mkdir -p /var/www/svn
    
    svnadmin create /var/www/svn/repos
    
    chown -R apache:apache /var/www/svn/repos 
    

    repos目录下会生成七个文件:

    [root@localhost ]# ll /var/www/svn/repos/ 
    总用量 28
    drwxr-xr-x 2 www www 4096 8月  16 13:00 conf
    drwxr-xr-x 3 www www 4096 8月  16 16:42 dav
    drwxr-sr-x 6 www www 4096 8月  16 16:42 db
    -r--r--r-- 1 www www    2 8月  15 18:37 format
    drwxr-xr-x 2 www www 4096 8月  15 18:37 hooks
    drwxr-xr-x 2 www www 4096 8月  15 19:28 locks
    -rw-r--r-- 1 www www  229 8月  15 18:37 README.txt
    

    添加用户分配权限

    创建svn的账号,并制定密码文件:

    htpasswd –c /var/www/svn/repos/conf/passwd  admin
    
    //例如创建用户名为admin,会提示输入密码,密码最好有点复杂强度。
    
    //注意这里的路径一定要和上面/etc/httpd/conf.d/subversion.conf文件中的路径一样,参数“-c”的意思是创建这个文件,再次创建其他账号的时候不要再加“-c”否则文件会被覆盖掉。
    

    创建权限控制文件 authz,也可以直接使用默认文件  

    [groups]        				#定义组
    
    manager = admin
    yanfa = user1,user2			     #组名为yanfa,组内的成员为user1,user2
    ceshi = test1,test2
    	
    [repos:/]					#定义用户或组对svn根目录的权限
    @manager = rw			          #manager组有读和写的权限
    * = r
    
    [repos:/yanfa]
    @admin = rw
    @yanfifa = rw
    * = r 
    [repos:/ceshi]
    @ceshi = rw
    * = r 
    

    这里的文件夹repos:/yanfa和repos:/ceshi 并不是在svn根目录下创建的,而是由有读写权限的用户上传上去的。

    至此,svn+Apache搭建完毕,启动服务

    /etc/init.d/httpd start 
    svnserve -d -r /var/www/svn/
    
    #svn默认端口为3690,关闭svn可以killall svnserve
    

    访问svn地址并跟踪日志信息:

    http://ip地址/repos
    
    [root@localhost ~]# ls -lh /etc/httpd/logs/
    总用量 104K
    -rw-r--r--  1 root   root   211K 8月  16 18:26 access_log
    -rw-r--r--  1 root   root   395K 8月  16 18:26 error_log
    

    Linux下实现客户端修改SVN密码  

      

      

    注意:
    1、ChangePasswd.ini、ChangePasswd.cgi文件必须放在apache的cgi-bin(根据自己电脑上的路径来,我的是/var/www/cgi-bin)下。
    2、修改密码文件的所有者是apache,如果不是,执行chown apache:apache passwd(密码文件)。
    3、如果密码是用htpasswd -c 或-m所建,执行htpasswd -b /var/www/svn/repos/conf/passwd usrname password更新。

    一、创建ChangePasswd.ini文件

    创建一个空文件:
    touch /var/www/cgi-bin/ChangePasswd.ini  
    a.将以下内容复制到ChangePasswd.ini中
    b.注意将文件中authuserfile、logfile处改为你自己的路径。第一行为所建用户和密码文件的路径。第二行为修改密码的日志的路径(该文件是自己建的)。
    cat /var/www/cgi-bin/ChangePasswd.ini  
    [path]
    authuserfile=/var/www/svn/repos/conf/passwd
    logfile=/var/www/cgi-bin/ChangePasswd.log
    [setup]
    pwdminlen=8
    [html]
    title=SVN用户密码自助修改
    description=SVN用户密码自助修改
    yourname=用户名
    oldpwd=旧密码
    newpwd1=新密码
    newpwd2=确认新密码
    btn_change=修 改
    btn_reset=重 置
    
    changepwdok=成功修改密码
    changepwdfailed=修改密码失败
    servererror=服务器错误
    passmustgreater=新密码位数必须大于
    twopassnotmatched=两密码不一致
    entername=请输入用户名
    enterpwd=密码未输入
    errorpwd=你的密码不正确
    back=返回
    ChangePasswd.ini文件内容

    二、创建ChangePasswd.cgi文件并设置其权限

    创建一个空文件:

    touch /var/www/cgi-bin/ChangePasswd.cgi
    
    a.将以下内容复制到ChangePasswd.cgi中,设置其权限为755(可执行)
    b.命令:chmod 755 ChangePasswd.cgi.
    c.文件中126行改为自己的ChangePasswd.ini文件存放位置; my $inifile = "/var/www/cgi-bin/ChangePasswd.ini";
    [root@localhost~]# cat /var/www/cgi-bin/ChangePasswd.cgi
    #!/usr/bin/perl -w
    
    use strict;
    use CGI;
    my $time        = localtime;
    my $remote_id   = $ENV{REMOTE_HOST} || $ENV{REMOTE_ADDR};
    my $admin_email = $ENV{SERVER_ADMIN};
    
    my $cgi = new CGI;
    my $pwd_not_alldiginal = "密码不能全为数字";
    my $pwd_not_allchar = "密码不能全为字符";
    my $user_not_exists ="该用户不存在";
    my $file_not_found ="文件不存在,请联系管理员";
    
    my $authuserfile;
    my $logfile;
    my $pwdminlen;
    my $title;
    my $description;
    my $yourname;
    my $oldpwd;
    my $newpwd1;
    my $newpwd2;
    my $btn_change;
    my $btn_reset;
    
    my $changepwdok;
    my $changepwdfailed;
    my $oldpwderror;
    my $passmustgreater;
    my $twopassnotmatched;
    my $entername;
    my $enterpwd;
    my $errorpwd;
    my $back;
    
    &IniInfo;
    
    if ($cgi -> param())
    {#8
    my $User = $cgi->param('UserName');
    my $UserPwd = $cgi->param('OldPwd');
    my $UserNewPwd = $cgi->param('NewPwd1');
    my $MatchNewPwd = $cgi->param('NewPwd2');
    
    if (!$User)
         {&Writer_Log("Enter no user name");
           &otherhtml($title,$entername,$back);}
    elsif (!$UserPwd )
        {&Writer_Log("Enter no OldPasswd");
         &otherhtml($title,$enterpwd,$back); }
    elsif (length($UserNewPwd)<$pwdminlen)
        {&Writer_Log("Password's length must greater than".$pwdminlen);
         &otherhtml($title,$passmustgreater.$pwdminlen,$back);}
    elsif ($UserNewPwd =~/^d+$/)
        {&Writer_Log("New Passwd isn't all diginal");
         &otherhtml($title,$pwd_not_alldiginal,$back);}
    elsif ($UserNewPwd =~/^[A-Za-z]+$/)
        {&Writer_Log("New Passwd isn't all char");
         &otherhtml($title,$pwd_not_allchar,$back);}
    elsif ($UserNewPwd ne $MatchNewPwd)
        {&Writer_Log("Two new passwords are not matched");
         &otherhtml($title,$twopassnotmatched,$back);}
    else
    {if($authuserfile)
    {#6
    open UserFile, "<$authuserfile" or die "打开文件失败:$!";
    while (<UserFile>)
        {#5
           my $varstr=$_;
    
           if($varstr =~/($User)/)
        {#3
         my $eqpos =index($varstr, ":");
         my $UserName = substr($varstr,0,$eqpos);
         my $cryptpwd = substr($varstr,$eqpos + 1,13);
       
         next if($UserName ne $User);
           
         if(crypt($UserPwd,$cryptpwd) eq $cryptpwd)
         {#a
          my $rc = system("/usr/bin/htpasswd -b $authuserfile $User $UserNewPwd");
          if ($rc == 0)
             {#1
                &Writer_Log( $User.":Change Passwd");
                &otherhtml($title,$changepwdok,$back);
              }#1
           else
              {#2
               &Writer_Log( $User.":Change Passwd Failed");
               &otherhtml($title,$changepwdfailed,$back);
              }#2
           exit;
         }#a
         else
         {#b
          &Writer_Log("Old Passwd is Incorrect ");
          &otherhtml($title,$errorpwd,$back);
         }#b
         exit;      
        }#3
           else
        {#4
         if(eof)
         { &Writer_Log($User.":no this user");
           &otherhtml($title,$user_not_exists,$back);
           exit;
         }
         else
         {next;}
        }#4  
         }#5
       close UserFile;
    }#6
    else
    {#7
       &Writer_Log($authuserfile.":no found");
       &otherhtml($title,$file_not_found,$back);
    }#7
    }
    }#8
    else
    {&Index_Html;}
    
    sub IniInfo{
    my $inifile = "/var/www/cgi-bin/ChangePasswd.ini";
    open CGI_INI_FILE, "<$inifile" or die "打开文件失败:$!";;
    while (<CGI_INI_FILE>)
    {
    my $eqpos =index($_,'=');
    my $len = length($_);
    
    if ($_ =~/authuserfile/)
    {$authuserfile= substr($_, $eqpos + 1, $len - $eqpos -2);}
    elsif ($_ =~/logfile/)
    {$logfile= substr($_, $eqpos + 1);}
    elsif ($_ =~/pwdminlen/)
    {$pwdminlen= substr($_, $eqpos + 1);}
    elsif ($_ =~/title/)
    {$title = substr($_, $eqpos + 1);}
    elsif ($_ =~/description/)
    {$description = substr($_, $eqpos + 1);}
    elsif ($_ =~/yourname/)
    {$yourname = substr($_, $eqpos + 1);}
    elsif ($_ =~/oldpwd/)
    {$oldpwd= substr($_, $eqpos + 1);}
    elsif ($_ =~/newpwd1/)
    {$newpwd1= substr($_, $eqpos + 1);}
    elsif ($_ =~/newpwd2/)
    {$newpwd2= substr($_, $eqpos + 1);}
    elsif ($_ =~/btn_change/)
    {$btn_change = substr($_, $eqpos + 1);}
    elsif ($_ =~/btn_reset/)
    {$btn_reset = substr($_, $eqpos + 1);}
    elsif ($_ =~/changepwdok/)
    {$changepwdok = substr($_, $eqpos + 1);}
    elsif ($_ =~/changepwdfailed/)
    {$changepwdfailed = substr($_, $eqpos + 1);}
    elsif ($_ =~/oldpwderror/)
    {$oldpwderror = substr($_, $eqpos + 1);}
    elsif ($_ =~/passmustgreater/)
    {$passmustgreater = substr($_, $eqpos + 1);}
    elsif ($_ =~/twopassnotmatched/)
    {$twopassnotmatched = substr($_, $eqpos + 1);}
    elsif ($_ =~/entername/)
    {$entername = substr($_, $eqpos + 1);}
    elsif ($_ =~/enterpwd/)
    {$enterpwd= substr($_, $eqpos + 1);}
    elsif ($_ =~/errorpwd/)
    {$errorpwd= substr($_, $eqpos + 1);}
    elsif ($_ =~/back/)
    {$back = substr($_, $eqpos + 1);}
    }
    close CGI_INI_FILE;
    }
    
    sub Index_Html
    {
    print "Content-type: text/html
    
    ";
    print <<END_OF_PAGE;
    <html >
    <head>
    <title>$title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    
    <HR>
    
    <center><h1>$description</h1>
    </center>
    <form method="POST" enctype="multipart/form-data" action="/cgi-bin/ChangePasswd.cgi">
    <br>
    <TABLE align="center">
    <TR><TD class="t_text">$yourname</TD><TD><input type="text" name="UserName" /></TD></TR>
    <TR><TD class="t_text">$oldpwd</TD><TD><input type="password" name="OldPwd" /></TD></TR>
    <TR><TD class="t_text">$newpwd1</TD><TD><input type="password" name="NewPwd1" /></TD></TR>
    <TR><TD class="t_text">$newpwd2</TD><TD><input type="password" name="NewPwd2" /></TD></TR>
    </TABLE>
    <br>
    <TABLE align="center">
    <TR><TD><input type="submit" name="chgpasswd" value="$btn_change"> <input type="reset" value="$btn_reset"></TD></TR>
    </TABLE>
    </form>
    <HR>
    <font color="#FF0000">注意:新密码位数必需大于$pwdminlen,且为字母与数字组合</font>
    
    </body>
    </html>
    END_OF_PAGE
    }
    
    sub otherhtml{
    print "Content-type: text/html
    
    ";
    
    print <<END_OF_PAGE;
    <html>
    <head>
    <meta http-equiv="Content-Language" content="zh-cn">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>$_[0]</title>
    </head>
    
    <body>
    <p align="center"><font size="5">$_[1]</font></p>
    <p align="center"><a href="/cgi-bin/ChangePasswd.cgi"><font size="4">$_[2]</font></a></p>
    
    <HR>
    </body>
    
    </html>
    END_OF_PAGE
    }
    
    sub Writer_Log{
    if($logfile)
    {
    my $loginfo ="[".$time."] "." [".$remote_id."] "." || ".$_[0];
    open LOGFILE,">>$logfile" or die "Couldn't open LOG FILE for writing: $!";
    print LOGFILE ("$loginfo
    ");
    close LOGFILE;
    }
    }
    ChangePasswd.cgi文件内容

    创建ChangePasswd.log文件并设置其权限。

    进入目标位置(即你想创建ChangePasswd.log的位置),如: /var/www/cgi-bin(根据自己的位置定),创建一个名为ChangePasswd.log的文件并赋予该文件写的权限:
     
    命令:
    chmod 666 ChangePasswd.log 
    四、修改密码
    通过http://ip/cgi-bin/ChangePasswd.cgi修改密码
     
    #80对应自己设置的端口。
    至此,apache+svn及客户端更改密码配置完成,如有错误查看日志解决!
     
     

    参考文档:

    http://blog.163.com/dk_linux/blog/static/2032261662014101110411064/

    http://blog.sina.com.cn/s/blog_dbc555ef0102v73r.html

      

  • 相关阅读:
    JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法
    JMeter学习-026-JMeter 分布式(远程)参数化测试实例
    JMeter学习-025-JMeter 命令行(非GUI)模式详解(三)-测试图形化 HTML 报表(dashboard)生成
    JMeter学习-024-JMeter 命令行(非GUI)模式详解(二)-执行代理设置
    JMeter学习-023-JMeter 命令行(非GUI)模式详解(一)-执行、输出结果及日志、简单分布执行脚本
    JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)
    JMeter学习-021-JMeter 定时器(Synchronizing Timer)之集合点应用
    JMeter学习-020-JMeter 监听器之【聚合报告】错误率、吞吐量、传输速率实例计算
    Selenium2学习-038-firefox、webdriver版本不对称问题解决:org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055
    JMeter学习-019-JMeter 监听器之【聚合报告】界面字段解析及计算方法概要说明
  • 原文地址:https://www.cnblogs.com/saneri/p/5780629.html
Copyright © 2011-2022 走看看