首页 > Computer > Linux > RHEL4实现AD认证及邮件通知一体化系统
2011
06-16

RHEL4实现AD认证及邮件通知一体化系统

如需转贴,请务必注明原出处以及连接.
作者:windymax
原始出处:http://bbs.iusesvn.com/thread-2134-1-1.html

此系统架构已经稳定运行一年,无任何问题.在写完两个置顶贴之后,由于我一直都很忙碌着很多事情,故现在才简单地写出来,此模式系统应该算是国内比较好的,希望大家可以尝试试用,有什么问题可以直接发邮件给我,我将陆续更新和修改.(Email: windymax@126.com,只有看邮件的时间,不好意思clip_image001[6])

此贴经过第二次更新,经严格测试!!!

小提示:此架构牵涉很多IT架构和技术.
1)如果你是IT,那你应该会比较熟悉,上手比较容易.
2)如果是不是IT,仅仅是CM/QC或其他工作人员,那请让IT一起协助你完成.
环境和拓扑:

AD环境:
Windows2003 AD域控制器一台, IP地址为192.168.1.2
Windows2003 AD域控制器/Exchange2003邮件服务器 一台, IP地址为192.168.1.1,对应内部域名mail.a.com
AD活动目录结构如下: (在服务器上打开AD用户和计算机)
a.com
– Builtin
– Computers
– Domain Controllers
– ForeignSecurityPrincipals
– Users
   – user1 (帐户,邮件地址为user1@a.com)
   – user2 (帐户,邮件地址为user2@a.com)
   – user3 (帐户,邮件地址为user3@a.com)
   – test  (帐户,密码也为test,给予LDAP查询时的帐户使用)
   – project1 (全局组,也为邮件组,邮件地址为project1@a.com) user1,user2,user3都属于project1组中的成员
Linux Redhat Enterprise AS 4.0 /SVN服务器一台, IP地址为192.168.1.10

前提条件:
Linux操作系统Redhat AS4,在安装时选所有组件。

SVN域认证工作流程图:
clip_image003[7]

查看Linux所需要的组件信息和版本:
Apache
信息:
# rpm -qa | grep httpd
httpd-suexec-2.0.52-28.ent
httpd-devel-2.0.52-28.ent
httpd-manual-2.0.52-28.ent
httpd-2.0.52-28.ent

Subversion信息:
# rpm -qa | grep subversion
subversion-devel-1.3.2-0.1.el4.rf
subversion-perl-1.3.2-0.1.el4.rf
subversion-1.3.2-0.1.el4.rf

SVN模块信息:
# rpm -qa | grep svn
mod_dav_svn-1.3.2-0.1.el4.rf

LDAP模块信息:
# rpm -aq | grep ldap
php-ldap-4.3.9-3.22.3
openldap-devel-2.2.13-6.4E
openldap-2.2.13-6.4E
compat-openldap-2.1.30-6.4E
python-ldap-2.0.1-2
openldap-servers-2.2.13-6.4E
openldap-clients-2.2.13-6.4E
openldap-servers-sql-2.2.13-6.4E
nss_ldap-226-17
mod_authz_ldap-0.26-2

卸载旧版本的subersion
rpm -e mod_dav_svn-1.1.1-2.1.i386
rpm -e subversion-perl-1.1.1-2.1
rpm -e subversion-devel-1.1.1-2.1
rpm -e subversion-1.1.1-2.1

从此网站下RPM安装包.http://rpm.pbone.net/

下载1.3.2版本的subversion(当然也可以下载最新版本的)
wget ftp://ftp.nluug.nl/pub/metalab/d … .2-1.rhel4.i386.rpm
wget ftp://ftp.nluug.nl/pub/metalab/d … .2-1.rhel4.i386.rpm
wget ftp://ftp.nluug.nl/pub/metalab/d … .2-1.rhel4.i386.rpm
wget ftp://ftp.nluug.nl/pub/metalab/d … .2-1.rhel4.i386.rpm

安装1.3.2版本的subversion(当然也可以下载最新版本的)
rpm –ivh subversion-1.3.2-1.rhel4.i386.rpm
rpm -ivh subversion-devel-1.3.2-1.rhel4.i386.rpm
rpm -ivh subversion-perl-1.3.2-1.rhel4.i386.rpm
rpm -ivh mod_dav_svn-1.3.2-1.rhel4.i386.rpm

在底部添加参数和开启LDAP模块功能:
# vi /etc/http/conf/httpd.conf
LDAPSharedCacheSize 200000
LDAPCacheEntries 1024
LDAPCacheTTL 600
LDAPOpCacheEntries 1024
LDAPOpCacheTTL 600
# ntsysv 选中图中选择,保存.

clip_image005[6]

# service ldap restart

确认关闭了selinux防火墙功能(关键):
(否则apache的error.log日志将出现Could not open the requested SVN filesystem  [500, #13,导致SVN库文件打不开])
# vi /etc/selinux/config
SELINUX=disabled

重起linux:
# reboot

调整Apache模块的顺序:
# vi /etc/http/conf/httpd.conf
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule auth_anon_module modules/mod_auth_anon.so
LoadModule auth_dbm_module modules/mod_auth_dbm.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule auth_ldap_module modules/mod_auth_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule imap_module modules/mod_imap.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so

添加SVN仓库test
# svnadmin create –-fs-type fsfs /home/svn/test
# chomd 777 –R /home/svn/test (作用是修改仓库路径的属性,为了能让linux用户以外的用户有对此目录读写和执行脚本的权利)

配置邮件通知

安装Active Perl
#wget http://downloads.activestate.com … 4-gcc-267479.tar.gz
# tar zxvf ActivePerl-5.8.8.819-i686-linux-glibc-2.2.4-gcc-267479.tar.gz
# cd ActivePerl-5.8.8.819-i686-linux-glibc-2.2.4-gcc-267479
# ./install.sh
Did you read the LICENSE.txt file? [no] yes
Do you agree to the ActivePerl Community License v2.1? [no] yes
Enter top level directory for install? [/opt/ActivePerl-5.8] /usr/local/ActivePerl
Install HTML documentation [yes]
Proceed? [yes]
Installing ActivePerl…
Copying files to /usr/local/ActivePerl…done
Relocating…done (106 files relocated)
Generating HTML documentation…Enter top level directory for install? [/opt/ActivePerl-5.8] /usr/local/ActivePerl
done
Syncing perl PPM database with .packlists…done
ActivePerl has been successfully installed at /usr/local/ActivePerl.
Please modify your startup environment by adding:
   /usr/local/ActivePerl/bin to PATH
   /usr/local/ActivePerl/man to MANPATH
For general questions or comments about ActivePerl, please contact us
at <support@ActiveState.com>.
Thank you for using ActivePerl!

安装Perl模块Module::Build
# wget http://search.cpan.org/CPAN/auth … Build-0.2805.tar.gz
# tar zxvf Module-Build-0.2805.tar.gz
# cd Module-Build-0.2805
# perl Build.PL
# ./Build
# ./Build test
# ./Build install

安装Perl模块Authen::SASL (optional Perl module for SVN::Notify)
# wget http://search.cpan.org/CPAN/auth … en-SASL-2.10.tar.gz
# tar zxvf Authen-SASL-2.10.tar.gz
# cd Authen-SASL-2.10
# perl Makefile.pl
==> Auto-install the 1 optional module(s) from CPAN? [n] y
==> Auto-install the 1 optional module(s) from CPAN? [n] y   //之后一路按回车
# make test
# make install

安装Perl模块Net::SMTP_auth (optional Perl module for SVN::Notify)
# wget http://search.cpan.org/CPAN/auth … TP_auth-0.08.tar.gz
# tar zxvf Net-SMTP_auth-0.08.tar.gz
# cd Net-SMTP_auth-0.08
# perl Makefile.pl
# make test
# make install

安装Perl模块SVN::Notify (Perl module)
# wget http://search.cpan.org/CPAN/auth … -Notify-2.64.tar.gz
# tar zxvf SVN-Notify-2.64.tar.gz
# cd SVN-Notify-2.64
# perl Build.PL
# ./Build
# ./Build test
# ./Build install

*自动发邮件脚本
配置post-commit文件   //此文件在commit时会运用到这个脚本
# cd /home/svn/test/hooks
# cp post-commit.tmpl post-commit
# vi post-commit
在末尾删除原来的,添加上以下参数
REPOS=”$1″
REV=”$2″
/usr/bin/svnnotify –repos-path “$1” –revision “$2” –to project1@a.com –handler “HTML::ColorDiff” –with-diff –smtp mail.a.com –subject-prefix ‘[test SVN]’
//–to project1@a.com为要通知的邮件地址,我们一般会做个邮件组,这个组内包含了这个项目的所有人,–smtp mail.a.com为你的内部邮件服务器地址,必须使用域名,要内部DNS能够解析到,可能需要在内部DNS服务器上手动添加mail主机记录,[test SVN]必须有SVN字段,否则将收不到邮件,注重格式。
# chmod 777 post-commit   //添加可执行权限,作用是linux以外的帐户可以有读写和执行改脚本的权利

apache配置文件中添加SVN仓库的配置:
# vi /etc/http/conf/httpd.conf
<Location /test>
   DAV svn
   SVNPath /home/svn/test
#  AuthzSVNAccessFile /home/svn/test/access        //仓库访问用户的权限文件,此access文件权限必须为777,格式与一样.
   AuthType Basic
   AuthName “test”
   AuthLDAPEnabled on
#开启LDAP认证
   AuthLDAPBindDN “CN=test,OU=Users,DC=a,DC=com”
#绑定一个域中的用户为test,使这个帐户能够得到验证来得到域中的其他的人的帐户和密码,CN的意思”显示名称”,在域中个人帐户信息中可以找到,也就是说CN也必须是test
   AuthLDAPBindPassword “test”
#test的帐户的密码为test
   AuthLDAPURL “ldap://192.168.1.2:389/ou=Users,dc=a,dc=com?sAMAccountName?sub?(objectClass=*)”
   AuthLDAPURL “ldap://192.168.1.1:389/ou=Users,dc=a,dc=com?sAMAccountName?sub?(objectClass=*)”
#ldap://是LDAP通讯的方式,两行是为了当一台服务器荡机了可以查备份的域控制器主机; 389为LDAP协议的端口;ou是组织单元(如果下面还有ou的话,应该在此后面再加上ou=xxx,用逗号隔开);dc=后面跟域名,有多少点就有多少dc=xxx,也要用逗号隔开。sAMAccountName?sub?(objectClass=*)参数是指明所有验证的是windows域中独特的帐户形式sam
   AuthLDAPAuthoritative on  //开启LDAP授权
   Require group cn=project1,ou=Users,dc=a,dc=com
#Require group参数是指定域中可以访问的组,参数还可以改成Require user user1 user2 user3,Require valid-user参数为如果没有权限文件,那会导致域中所有帐户都可以访问
</Location>
# service httpd restart   //重起apache,测试.
当用户每次commit后,每个用户都会执行post-commit脚本里的命令来与邮件服务器进行通讯,借此发送相关邮件。

最后编辑:
作者:lijia
这个作者貌似有点懒,什么都没有留下。

留下一个回复