免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4840 | 回复: 0
打印 上一主题 下一主题

在 Debian Lenny 下创建 Apache2 SSL 认证的多重 Subversion 仓库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-04 12:58 |只看该作者 |倒序浏览
1. 目标

(1) 对不同用户创建不同的 Subversion 仓库;
(2) 使用 Apache2 SSL 连接;
(3) 使用 Apache2 mod_auth_pgsql 认证;
(4) 为不同的仓库设置不同的用户权限。

2. 基本参数

OS: Debian Lenny
IP: 192.168.1.100
SVN 目录: /opt/svn
SVN 仓库: /opt/svn/repo1
               /opt/svn/repo2
SVN 用户: test1
               test2
用于访问认证管理的 PostgreSQL 数据库: svn
PostgreSQL 用户: svn

说明:
以下操作中,
$ - 普通用户
# - root 用户

3. 安装 Debian 包

  1. # apt-get install apache2 libapache2-mod-auth-pgsql libapache2-svn\ postgresql postgresql-contrib subversion cert-ssl
复制代码


4. PostgreSQL 数据库及设置
4.1 创建用户 Apache2 认证的数据库
(1) 创建数据库 svn 和用户

  1. $ sudo su postgres

  2. postgres $ createdb svn

  3. CREATE DATABASE

  4. postgres $ createuser svn

  5. Shall the new role be a superuser? (y/n) n

  6. Shall the new user be allowed to create databases? (y/n) n

  7. Shall the new user be allowed to create more new users? (y/n) n

  8. CREATE USER
复制代码


(2) 导入加密脚本,以加密保存的密码

  1. postgres $ psql -d svn < /usr/share/postgresql/8.3/contrib/pgcrypto.sql

  2. SET

  3. CREATE FUNCTION

  4. CREATE FUNCTION

  5. CREATE FUNCTION

  6. ...
复制代码


(3) 创建表

  1. postgres $ psql -d svn

  2. svn =#
复制代码


  1. -- user table

  2.     CREATE TABLE users (
  3.         user_id SERIAL PRIMARY KEY,
  4.         username VARCAHR(32) NOT NULL,
  5.         passwd TEXT NOT NULL,
  6.         email VARCHAR(255)
  7.         );
  8.     CREATE INDEX idx_users ON users (username);
  9.     GRANT SELECT ON users TO svn;
  10. -- group table

  11.     CREATE TABLE groups (
  12.         group_id SERIAL PRIMARY KEY,
  13.         username VARCHAR(32) NOT NULL,
  14.         memberof VARCHAR(64) NOT NULL -- group name

  15.     );
  16.     CREATE INDEX idx_groups ON groups (username, memberof);
  17.     GRANT SELECT ON groups TO svn;
  18. -- log table

  19.     CREATE TABLE logs (
  20.         logs_id SERIAL PRIMARY KEY,
  21.         uname VARCHAR(32),
  22.         time TIMESTAMP(,
  23.         uri VARCHAR(512),
  24.         ip INET
  25.     );
  26.     CREATE INDEX idx_logs ON logs (uname, time);
  27.     GRANT INSERT ON logs TO svn;
复制代码


(4)为用户 svn 设置密码

  1. ALTER USER svn WITH ENCRYPTED PASSWORD '123456';
复制代码


4.2 修改 PostgreSQL 服务器访问权限
编辑
  1. /etc/postgresql/8.3/main/pg_hba.conf
复制代码
:


  1. host all all 127.0.0.1 255.255.255.255 ident sameuser
复制代码

之前加入

  1. host svn svn 127.0.0.1 255.255.255.255 md5
复制代码


然后重启 PostgreSQL 服务:

  1. # /etc/init.d/postgresql-8.3 restart
复制代码

5. 创建 Subversion 仓库

  1. # mkdir /opt/svn/
  2. # svnadmin create /opt/svn/repo1

  3. # svnadmin create /opt/svn/repo2
复制代码


然后

  1. # chown -R www-data:www-data /opt/svn
复制代码


6. 配置 Apache2 SSL
6.1 加载 SSL 模块

  1. # a2ensite default-ssl
  2. # a2enmod ssl
复制代码


6.2 创建站点 SSL 证书

  1. # make-ssl-cert generate-default-snakeoil --force-overwrite
复制代码


7. 设置 Apache2 WebDAV
7.1 加载模块

  1. # a2enmod dav
  2. # a2enmod dav_svn
  3. # a2enmod 000_auth_pgsql
复制代码


7.2 设置 mod_auth_pgsql 认证
编辑文件
  1. /etc/apache2/mods-available/dav_svn.conf
复制代码


  1. <Location /svn>
  2.     DAV svn
  3.     SVNParentPath /opt/svn
  4.    
  5.     AuthType Basic
  6.     AuthName "Subversion Repository"

  7.     Auth_PG_host localhost
  8.     Auth_PG_port 5432
  9.     Auth_PG_database svn
  10.     Auth_PG_user svn
  11.     Auth_PG_pwd 123456
  12.     Auth_PG_pwd_table users
  13.     Auth_PG_uid_field username
  14.     Auth_PG_pwd_field passwd
  15.     Auth_PG_grp_table groups
  16.     Auth_PG_grp_group_field memberof
  17.     Auth_PG_grp_user_field username
  18.     Auth_PG_cache_passwords on
  19.     Auth_PG_log_table logs
  20.     Auth_PG_log_uname_field uname
  21.     Auth_PG_log_date_field time
  22.     Auth_PG_log_uri_field uri
  23.     Auth_PG_log_addrs_field ip

  24.     AuthzSVNAccessFile /etc/apache2/dav_svn.authz

  25.     Require valid-user

  26.     SSLRequireSSL
  27. </Location>
复制代码


7.3 在数据库 svn 中创建 Subversion 用户 test1 和 test2

  1. $ sudo su postgres
  2. postgres $ psql -d svn
  3. svn =#
复制代码

  1. -- User 'test1', for 'repo1'

  2.     INSERT INTO users (username, passwd, email)
  3.         VALUES ('test1', crypt('123456', gen_salt('md5'), 'test1@localhost');
  4.     INSERT INTO groups (username, memberof)
  5.         VALUES('test1', 'testgrp');
  6. -- User 'test2', for 'repo2'

  7.     INSERT INTO users (username, passwd, email)
  8.         VALUES ('test2', crypt('abcdef', gen_salt('md5'), 'test2@localhost');
  9.     INSERT INTO groups (username, memberof)
  10.         VALUES('test2', 'testgrp');
复制代码


7.4 设置 Subversion 访问目录控制文件 /etc/apache2/dav_svn.authz
其中仓库 repo1 只能由用户 test1 完全访问,其他用户无法访问;
仓库 repo2 可以被用户组 testgrp 里的用户只读,由用户 test2 完全访问。

  1. [groups]
  2. testgrp=test1,test2

  3. [repo1:/]
  4. *=
  5. test1=rw

  6. # All members in group 'testgrp' could read repository 'repo2',
  7. # user 'test2' has a full access previlege.
  8. [repo2:/]
  9. @testgrp=r
  10. test2=rw
复制代码


8. 重启 Apache2 服务
仓库 repo1 和 repo2 可以分别从

    * https://192.168.1.100/svn/repo1
    * https://192.168.1.100/svn/repo2

访问。

首发 CU 博客:

http://blog.chinaunix.net/u3/112335/showart_2289369.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP