文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>在 Debian Lenny 下创建 Apache2 SSL 认证的多重..

在 Debian Lenny 下创建 Apache2 SSL 认证的多重..

时间:2010-08-04  来源:longbow0

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 包

# apt-get install apache2 libapache2-mod-auth-pgsql libapache2-svn\ postgresql postgresql-contrib subversion cert-ssl


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

$ sudo su postgres

postgres $ createdb svn

CREATE DATABASE

postgres $ createuser svn

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

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

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

CREATE USER


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

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

SET

CREATE FUNCTION

CREATE FUNCTION

CREATE FUNCTION

...


(3) 创建表

postgres $ psql -d svn

svn =#



-- user table

    CREATE TABLE users (
        user_id SERIAL PRIMARY KEY,
        username VARCAHR(32) NOT NULL,
        passwd TEXT NOT NULL,
        email VARCHAR(255)
        );
    CREATE INDEX idx_users ON users (username);
    GRANT SELECT ON users TO svn;
-- group table

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

    );
    CREATE INDEX idx_groups ON groups (username, memberof);
    GRANT SELECT ON groups TO svn;
-- log table

    CREATE TABLE logs (
        logs_id SERIAL PRIMARY KEY,
        uname VARCHAR(32),
        time TIMESTAMP(8),
        uri VARCHAR(512),
        ip INET
    );
    CREATE INDEX idx_logs ON logs (uname, time);
    GRANT INSERT ON logs TO svn;


(4)为用户 svn 设置密码

ALTER USER svn WITH ENCRYPTED PASSWORD '123456';


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


host all all 127.0.0.1 255.255.255.255 ident sameuser

之前加入

host svn svn 127.0.0.1 255.255.255.255 md5


然后重启 PostgreSQL 服务:

# /etc/init.d/postgresql-8.3 restart


5. 创建 Subversion 仓库

# mkdir /opt/svn/
# svnadmin create /opt/svn/repo1

# svnadmin create /opt/svn/repo2


然后

# chown -R www-data:www-data /opt/svn


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

# a2ensite default-ssl
# a2enmod ssl


6.2 创建站点 SSL 证书

# make-ssl-cert generate-default-snakeoil --force-overwrite


7. 设置 Apache2 WebDAV
7.1 加载模块

# a2enmod dav
# a2enmod dav_svn
# a2enmod 000_auth_pgsql


7.2 设置 mod_auth_pgsql 认证
编辑文件 /etc/apache2/mods-available/dav_svn.conf


<Location /svn>
    DAV svn
    SVNParentPath /opt/svn
    
    AuthType Basic
    AuthName "Subversion Repository"

    Auth_PG_host localhost
    Auth_PG_port 5432
    Auth_PG_database svn
    Auth_PG_user svn
    Auth_PG_pwd 123456
    Auth_PG_pwd_table users
    Auth_PG_uid_field username
    Auth_PG_pwd_field passwd
    Auth_PG_grp_table groups
    Auth_PG_grp_group_field memberof
    Auth_PG_grp_user_field username
    Auth_PG_cache_passwords on
    Auth_PG_log_table logs
    Auth_PG_log_uname_field uname
    Auth_PG_log_date_field time
    Auth_PG_log_uri_field uri
    Auth_PG_log_addrs_field ip

    AuthzSVNAccessFile /etc/apache2/dav_svn.authz

    Require valid-user

    SSLRequireSSL
</Location>


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

$ sudo su postgres
postgres $ psql -d svn
svn =#



-- User 'test1', for 'repo1'

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

    INSERT INTO users (username, passwd, email)
        VALUES ('test2', crypt('abcdef', gen_salt('md5'), 'test2@localhost');
    INSERT INTO groups (username, memberof)
        VALUES('test2', 'testgrp');


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

[groups]
testgrp=test1,test2

[repo1:/]
*=
test1=rw

# All members in group 'testgrp' could read repository 'repo2',
# user 'test2' has a full access previlege.
[repo2:/]
@testgrp=r
test2=rw


8. 重启 Apache2 服务
仓库 repo1 和 repo2 可以分别从
  • https://192.168.1.100/svn/repo1
  • https://192.168.1.100/svn/repo2
访问。


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载