前 言
终于完成了,由于自己菜的原因,这个整合花了我好多时间啊!一开始UID同步,但密码不同步,现在密码都是用smbpasswd 同步管理的。现在把自己的成果分享给大家,哪里写错或解释错请纠正,有问题可在BLOG中留言,我看到后第一时间会回复的。
本教程的系统平台:centOS 5.1 ,所使用到的全部包都用yum 来安装的,也是目前官方源上最新的版本!
首先来安装需要的包
# yum install openldap* subversion* vsftpd* samba*
其实可以用光盘做源来安装,安装完后再用 yum update 来更新这些包,这是最快的。
安装完成后检查一下
# rpm -qa |grep openldap
openldap-servers-2.3.27-8.el5_2.4
openldap-devel-2.3.27-8.el5_2.4
openldap-servers-sql-2.3.27-8.el5_2.4
openldap-2.3.27-8.el5_2.4
openldap-clients-2.3.27-8.el5_2.4
rpm -qa |grep subversion
subversion-1.4.2-2.el5
subversion-perl-1.4.2-2.el5
subversion-ruby-1.4.2-2.el5
subversion-javahl-1.4.2-2.el5
subversion-devel-1.4.2-2.el5
# rpm -qa |grep vsftpd
vsftpd-2.0.5-12.el5
# rpm -qa |grep samba
samba-common-3.0.28-1.el5_2.1
samba-swat-3.0.28-1.el5_2.1
samba-client-3.0.28-1.el5_2.1
system-config-samba-1.2.39-1.el5
samba-3.0.28-1.el5_2.1
复制samba.schema 到ldap 的安装目录下的schema 目录,以便ldap 整合samba
# cp /usr/share/doc/samba-3.0.28/LDAP/samba.schema /etc/openldap/schema/samba.schema
复制DB_CONFIG数据文件到ldap指定的数据目录,默认在/var/lib/ldap下
# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
开始编辑openldap的config 文件
# vim /etc/openldap/slapd.conf
在include /etc/openldap/schema/XXX.schema 下添加以下一行
include /etc/openldap/schema/samba.schema #加载samba模块
把suffix、rootdn、rootpw修改为,
suffix "dc=rookie,dc=com" #基本dc 信息
rootdn "cn=root,dc=iaspec,dc=com" #管理员信息
rootpw iaspec123 #管理员密码,默认已被注释,可去掉’#’
OK,保存退出!
导入初始数据
请自己创建一个初始数据的文件
# vim /data/data.ldif
dn: dc=rookie,dc=com
objectclass: dcObject
objectclass: organization
o: company
dc: rookie
dn: cn=root,dc=rookie,dc=com
objectclass: organizationalRole
cn: root
保存退出后导入刚刚创建的数据(导入前先启动ldap)
# ldapadd -x -D "cn=root,dc=rookie,dc=com" -w root123 -f /data/data.ldif
看到以下信息就证明导入成功了
adding new entry "dc=rookie,dc=com"
adding new entry "cn=root,dc=rookie,dc=com"
再创建一个ou
# vim ou.ldif
dn: ou=user,dc=rookie,dc=com
objectClass: top
objectClass: organizationalUnit
ou: user
再导入
# ldapadd -x -D "cn=root,dc=rookie,dc=com" -w root123 -f /data/ou.ldif
添加ldap 系统日志
# vim /etc/syslog.conf
在最后添加一行
local4.* /var/log/ldap.log
保存退出后重启syslog,OK!
这个服务没什么设置的,简单修改一下配置文件
# vim /etc/vsftpd/vsftpd.conf
安全考虑,把匿名关闭
anonymous_enable=NO
开启ftp 日
xferlog_file=/var/log/vsftpd.log 把默认注释“#”去掉
在文件最底添加以下几行
local_root=/data #作用是指定用户登录后的目录
chroot_local_user=YES #用户不能离开自家目录
Ok,保存退出!
编辑smb 的配置文件
# vim /etc/samba/smb.conf
修改以下行
workgroup = WORKGROUP #设定工作组
passdb backend = ldapsam:ldap://127.0.0.1 #指定用户验证的LDAP服务器地址
添加以下行
ldap admin dn = "cn=root,dc=rookie,dc=com" #指定管理员
ldap suffix = dc=rookie,dc=com #指定搜索后缀
ldap user suffix = ou=user #指定信息存放的目录路径
ldap delete dn = no #不允许删除DN
log file = /var/log/samba/smbd.log #添加samba 日志文件
保存退出,把cn=root,dc=rookie,dc=com 管理员的密码保存到secrets.tdb中,以便samba 与ldap 通讯
格式:smbpasswd –w [密码]
# smbpasswd -w root123
如果我需要把某个文件夹共享出来,共享名为share,可以在smb.conf 最下面加上
[share]
comment = share files #目录的描述
path = /home/file #共享的目录路径
browseable = yes #是否在浏览器中显示目录
writable = yes #是否有写的权限
svn 不需要改配置文件,只需要建了资料库和导入数据就行了!
创建资料库
# svnadmin create /data/repository
当看到/data/repository 目录下自动生成了几个文件就证明资料库创建成功了!
把数据导入到SVN的资料库
# svn import /data/program/ file:///data/repository -m "program data"
说明一下,前面的路径是你要导入数据的路径,后面的路径是你前面创建的资料库路径,-m 后面只是一个描述文字。
运行# authconfig-tui
user information 选择 [Use LDAP]
authentication 选择 [Use MD5 Passwords] [Use Shadow Passwords] [Use LDAP Authentication] [Use SMB Authentication]
下一步之后,LDAP Setting 框中的 Base DN 填入服务器的DN
dc=rookie,dc=com
再下一步,SMB Settings 柜中Servers 填入服务器IP
127.0.0.1
因为SELINUX开启的原因,可能会有不少出错,现在把SELINUX关闭
# vim /etc/selinux/config
SELINUX=enforcing 改成 SELINUX=disabled
保存退出,关闭了selinux 后要重启才能生效。
除了关闭selinux ,使用某些服务的时候还是有限制,如果出现限制问题,查看自己Firewall 里相应的端口有没有打开,从安全角度上看,做为服务器Firewall 是不能关的,如果作为配置学习,可以暂时把Firewall 关闭。
修下一下apache 的配置,到时在LDAP中添加一个UID用户,方便在浏览器中浏览svn 的库文件(这一步可有可无)。
# vim /etc/httpd/conf/httpd.conf
在最后的位置加上
DAV svn //开启sbuversion
SVNPath /data/ repository //库的目录
AuthType Basic //使用基本的密码认证
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://127.0.0.1:389/ou=user,dc=rookie,dc=com " //LDAP访问目录
AuthName "read only" //网站说明文字
Require valid-user //允许合法用户登录
安装一个组件,否则启动httpd 的时候会报以下错误
Starting httpd: Syntax error on line 993 of /etc/httpd/conf/httpd.conf:
Unknown DAV provider: svn
# yum install mod_dav_svn
现在svn整合了apache 了,但不是标题说到的那种密码同步的整合,这一小节的整合目的只是提供用户能在浏览器上查看一下版本库的资料,前提是在openldap 的客户端添加一个uid,才能在浏览器中登录svn资料库。
安装SSH的目的是希望svn 能与ssh 整合成一个访问模式,通过svn+ssh 访问才能同步系统用户的用户名和密码。
# yum install ssh*
简单配置一下ssh
# vim /etc/ssh/sshd_config
#PermitEmptyPasswords no 改成 PermitEmptyPasswords no #不允许空密码登录
保存退出
每次开始都要server XXX start 多麻烦啊,不过,可以把他们设成开机自动运行
# ntsysv
启动服务管理窗口后,在以下服务前的[]加上*号(按空格键)
[*]httpd
[*]ldap
[*]smb
[*]vsftpd
[*]sshd
OK后退出
随便提一下,有时开启会在加载IPV6的时候等很久
applying ip6tables firewall rules:
我们其实可以把IPV6停了,把ip6tables 前面的* 去掉就行了!
[ ]ip6tables
由于 SAMBA 的用户由 smbpasswd 来管理,而在LDAP中新建的svn UID用户的密码又不能由smbpasswd 来设置,所以只能用户和密码都由 smbpasswd 来管理了,换句话说,用户和密码都在终端里创建的。
SAMBA用到的用户必须是系统用户,所以建SAMBA用户前要先建系统用户
也为了方便管理,我们把使用在subversion,samba,vsftpd的用户放在同一个组里,有需要的话也可以按照部门来分
# groupadd team 建立一个team 的组
# useradd rookie –g team 建立一个属于 team 组的 rookie 用户
新建一个 rookie 的系统用户后,就可以新建一个相应的samba 用户
# smbpasswd –a rookie
输入密码后,提示 Added user rookie ,证明成功建立了smb用户
如果需要修改密码就输入 smbpasswd [用户],就能修改相应的用户密码,而且同时把subversion、vsftpd 的登录密码也修改了
希望用户能自行修改密码,但又不希望他能访问服务器其它目录。
通过svn+ssh 登录的用户同时也可以通过远程登录服务器终端,不能直接限制用户拒绝登录终端,否则svn+ssh 登录也失败了,但可以修改一下用户的配置文件,使他们通过终端登录服务器后只能修改用户密码,修改完成后就马上退出。
转到home 目录下的某一用户目录里,ls –a 可以发现几个隐藏的文件,执行以下命令可以实现一登录服务器就修改当前用户密码(注意,bash 前有个小点)
# echo "smbpasswd">>.bash_profile
把exit 放到.bash_profile文件里的最后一行,实现修改完密码后就退出
# echo "exit">>.bash_profile
现在,被加入exit 的用户通过终端登录服务器,一登录就退出了。但为了不被该用户删除和修改这个配置文件,把home 目录下所有的.bash_profile 改成只读
# find /home -name .bash_profile |xargs chmod 400
如果在samba 中传了中文名的文件,在ftp 中会显示乱码。因为ftp 使用的是gbk 编码,samba 使用的是utf-8 编码,windows 可以识别gbk ,所以现在需要把samba 转成gbk 编码。
# vim /etc/samba/smb.conf
在[global]里加上以下三行
display charset = gbk
dos charset = gbk
unix charset = gbk
如果原来的samba 已经存在一些文件的话,可以用convmv 转换一下,前提是要先安装convmv
# yum install convmv
进入到samba 存放文件的目录,运行
# convmv -f utf8 -t gbk --notest -r ./
重启smb 后就不会存在乱码的问题了。
quota 前提是所做的分区是单独的一个partition,现在我希望samba 一个分区,ftp 一个分区,而且samba 的用户限定他们1G的空间,ftp 限定他们500M的空间
添加file system 的quota 支持
# vim /etc/fstab
在希望做配额的分区一行中,defaults 后加上” ,usrquota,grpquota” (不包括两个双引号),切记不要写错,写错的话有可能会重启加载分区的时候失败而无法开机的。
/dev/md1 / ext3 defaults 1 1
/dev/md4 /var ext3 defaults 1 2
/dev/md3 /home ext3 defaults,usrquota,grpquota 1 2
/dev/md2 /srv ext3 defaults 1 2
/dev/md0 /boot ext3 defaults 1 2
/dev/md5 /ftp ext3 defaults,usrquota,grpquota 1 2
添加完后,确定无误,可以选择重启电脑reboot 或 umount 卸载quota 分区,再mount quota 分区 或mount –o remount [分区],这三种方法使quota 生效。
使用quotacheck 扫描一下quota 分区
# quotacheck -avug
成功的话,在相应的quota 分区下会多了aquota.group aquota.user 两个文件
现在可以启动quota 了
# quotaon -avug
/dev/md5 [/ftp]: group quotas turned on
/dev/md5 [/ftp]: user quotas turned on
看到turned on 就证明启动成功了!
需要开机自动运行quota的,输入以下命令,不运行就没有配额功能,即使设置了用户配额,用户在没有开启quota 的情况下所存的数据不会记录在quota 的blocks中
# echo "quotaon -avug">>/etc/rc.d/rc.local
现在开始用户磁盘空间限制了
edquota –u [用户] #修改用户配额
edquota –p [用户] [用户2] #把[用户]配额复制至[用户2]
edquota –t #设置宽限时间
edquota –g [组] #设置组配额
如现在需要配置rookie 用户的配额,samba 分区1G,ftp 分区500M,在hard 下改相应的数字(以KB为单位)
# edquota –u rookie
Disk quotas for user zhang.hao (uid 10026):
Filesystem blocks soft hard inodes soft hard
/dev/md3 16 0 0 4 0 0
/dev/md5 20 0 0 1 0 0
改为
Disk quotas for user zhang.hao (uid 10026):
Filesystem blocks soft hard inodes soft hard
/dev/md3 16 0 1000000 4 0 0
/dev/md5 20 0 500000 1 0 0
如果需要软配额可以设置soft 项,因为我不需要,所以没设。
之后的用户如果限额一样,可以通过edquota –p [用户] [用户2] 命令来复制限额。
要安装的都安装了,想知道整合是否成功,reboot后测试一下就可以知道了!
万事俱备,只欠测试了!
在本机或其它已安装
samba-client linux 的客户端上输入
# smbclient -U rookie -L 10.44.100.160
再输入相应的密码,当你看到一些共享的文件时候,证明登录成功了!
Domain=[LOCALHOST] OS=[Unix] Server=[Samba 3.0.28-1.el5_2.1]
Sharename Type Comment
--------- ---- -------
share Disk share files
IPC$ IPC IPC Service (welcome)
rookie Disk Home Directories
Domain=[LOCALHOST] OS=[Unix] Server=[Samba 3.0.28-1.el5_2.1]
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP
在WINDOWS平台上更容易,在开始->运行中输入要访问的samba 服务器IP
如 //10.44.100.160
提示输入用户名和密码的时候,正常输入刚刚设置的用户名和密码,能正常登录就成功了!
在本机或其它linux 终端和windows DOS 提示符下输入
# ftp 10.44.100.160
正常填写用户名和密码,提示Login successful. 就登录成功了!
在本机或其它安装了SVN的linux 机器上输入
# svn list svn+ssh://[email protected]/data/repository
其中rookie 是登录的用户名,10.44.100.160是登录的服务器IP,后面的是库文件的路径
密码输入正常后就能显示库中的文件
为了便于使用,介绍一款常用的svn 客户端软件 TortoiseSVN,目前最新版本是
安装完成后,随便在一个文件夹点击右键,你会发现多了“SVN检出”和 “TortoiseSVN”两个选项,选择“TortoiseSVN”,再选择“版本库浏览器”
弹出一个要求你输入URL的新窗口,输入svn服务器的URL,注意,前面要加上svn+ssh
svn+ssh://[email protected]/data/repository
有点麻烦的是,要输入几正确的密码才能登录的!但检收,更新,提交等操作就只需要输入一次密码就OK了!
密码输入后,如果能显示相关的库文件就证明认证成功了!
LDAP 整合教程到此完成,随着实际使用的需要和技术的提高,我会不断更新教程!
^_^
注:
部分论坛可能没上传图片,如需查看图片可浏览我的BLOG
http://blog.163.com/buypc_hao/blog/static/1079207752009227101622780/edit/
或E-mail联系我,有PDF教程
更新于:2010年11月18日
后来发现[用户修改密码+安全设置]章节中,即使把.bash_profile 改权限也可以被用户删除的.因为linux的权限是看上一级目录的,home目录的用户有700的权限,所以既然home目录下的文件只有400,也可以被用户删除,因为上级目录已经赋予700的权限给下下级的目录和文件了.
为避免用户修改.bash_profile 登录服务器,可使用chattr +i 这个命令为文件附加一个不能修改和删除的权限,chattr +i 后管理员也无权删除,只有chattr -i 把i 属性去掉才可以.
所以,我们应该把
# find /home -name .bash_profile |xargs chmod 400
改为
# find /home -name .bash_profile |xargs chattr +i