第一步:安装相关组件
yum install samba4* krb5* -y
samba4是什么就不用说了,krb5是为了以后将samba加入AD域而需要用到
KRB(Kerberos协议)主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(Single Sign On)。由于在每个Client和Service之间建立了共享密钥,使得该协议具有相当的安全性。
第二步:创建共享目录
mkdir /home/share -m 1777
mkdir /home/project -m 1777
mkdir /home/projectmgr -m 1777
mkdir /home/filemgr -m 1777
目录的权限根据自己的需求进行设定,因为这个是根据用户要求也就直接设置为1777
-从这开始是为工作组环境建立的Samba-
第三步:建立组及用户
1、创建组
groupadd mgr //建立mgr组
groupadd periphery //建立Periphery组
groupadd filemgr //建立filemgr组
2、建立用户并加入组
useradd itadmin -s /sbin/nologin -M //创建一个IT管理员,这个不加入组,这只是samba访问用户,所以不用登录系统,也没创建用户的家目录
useradd jason -g project -s /sbin/nologin -M //创建用户jason并将他加入project组
useradd alix -g projectmgr -s /sbin/nologin -M //创建用户alix并将他加入projectmgr组
useradd lili -g filemgr -s /sbin/nologin -M //创建用户lili并将她加入filemgr组
注:如果是之前己创建过的用户可以用
usermod -g mgr lou //将己存在的用户lou加入mgr组
第四步:配置smb.conf
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak //备份一下samba的配置文件,
vim /etc/samba/smb.conf
下面绿色字体为原有的,粟色字体的为增加的,蓝色字体为修改的
#================== Global Settings =====================
[global]
dos charset = GB2312
unix charset = GB2312
display charset = GB2312
# ----------------------- Network Related Options -------------------------
workgroup = MYGROUP --改为--> WORKGROUP //指定机器在网络上所属的NT域名或组名(可改可不改)
server string = Samba Server Version %v //此选项是可选的,主要作用是Samba服务Windows系统注释
netbios name = MYSAMBA //这个改不改随意,它就象windows里的机器名
interfaces = lo eth0192.168.88.35/24 //这里写本机IP地址,如果有多个网络也可以写多个IP
hosts allow = 127.192.168.88. //设定允许访问samba的IP地址或IP地址范围
wins support = yes //设定samba提供WINS服务,通常无特殊原因设为no,除非所处网络上没有主机提供WINS服务且需要samba提供WINS服务是才设yes
dns proxy = yes --改为--> no
name resolve order = wins host lmhosts bcas
bind interfaces only = yes
# --------------------------- Logging Options -----------------------------
log file = /var/log/samba/log.%m // log会在此目录中为每个登陆用户(Samba用户)建立不同的日志文件
log level = 2
max log size = 500
# ----------------------- Standalone Server Options ------------------------
security = user //设定安全级别为user
passdb backend = tdbsam --改为--> smbpasswd:/etc/samba/smbpasswd
# --------------------------- Printing Options -----------------------------
load printers = yes
cups options = raw
#============================ Share Definitions ==============================
#如果注释掉了[homes]则用户就看不到自己的家目录
#[homes]
# comment = Home Directories
# browseable = no
# writable = no
#; valid users = %S
#; valid users = MYDOMAIN\%S
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[share]
comment = Share //定义共享目录名称,可用任意字符串
path = /home/share //设定共享目录路径
public = no //指定该共享是否允许guest账户访问
available = yes //用来指定该共享资源是否可用
admin users = itadmin //指定该共享的管理员,对该共享具有完全控制权限,如果用户验证方式设置成“security=share”时,此项无效。
valid users = +mgr,+periphery,+filemgr //用来指定允许访问该共享资源的用户,单个用户就直接写用户名,组就是“+组名”
writable = yes //是否允许写入,这项对下面的几项来说是首选,这项设置为NO,下面的create mask directory mask 等一系列预设值无效
write list = +mgr,+periphery,+filemgr //指定在该共享下有写入权限的用户
create mask= 0755 //表示新建文件的预设值,文件所有者全部权限,组内用户及其他用户可读可执行
directory mask= 0755 //表示新建目录的预设值,目录所有者全部权限,组内用户及其他用户可读可执行
browseable = no //指定该共享是否可以浏览
[project]
comment = project
path = /home/project
public = no
available = yes
admin users = itadmin
writable = yes
write list = +periphery
valid users = +periphery
create mask= 0755
directory mask= 0755
browseable = no
[projectmgr]
comment = projectmgr
path = /home/projectmgr
public = no
available = yes
admin users = itadmin
writable = yes
write list = +mgr
valid users = +mgr
create mask= 0755
directory mask= 0755
browseable = no
[filemgr]
comment = filemgr
path = /home/filemgr
public = no
available = yes
admin users = itadmin
writable = yes
write list = +filemgr
valid users = +filemgr
create mask= 0755
directory mask= 0755
browseable = no
配置完后通过testparm来检查
说明一点:
samba3.x的早期版本默认使用tdb库也就是smb.conf默认设定为passdb backend = tdbsam,只需要注释掉该行添加smb passwd file = /etec/samba/smbpasswd即可使用smbpasswd存储加密密钥。从samba3.5.6开始samba规范了passdb backend参数的使用,取消了smb passwd file设定,如果简单注释掉passdb backend参数,密钥文件也不会被存储到smbpasswd。所以很多人说怎么修改smb.conf的配置,smbpasswd文件都无法生成,就算手工创建,内容也是0字节。要用传统的文本方式存储只需这样设定passdb backend = smbpasswd:/etc/samba/smbpasswd(后面跟的是绝对路径)>,不要再写smb passwd file = /etc/samba/smbpasswd,该参数已经不适用于新版本的samba了。
启动smb及nmb服务
service smb start
service nmb start
nmb 是Samba 的主要启动服务器,让其它机器能知道此机器共享了什么;如果不打开nmb服务器的话,只能通过IP来访问
注意:在Samba服务器运行其间,更改了配置最好用service smb reload命令,不要用restart,这样可以防止用户在连接的过程中被中断
将smb与nmb加入启动服务
chkconfig --level 35 smb on
chkconfig --level 35 nmb on
查看端口
netstat -antup |grep smb
netstat -antup |grep nmb
第五步:设置用户
smbpasswd -a itadmin
New SMB password:
Retype new SMB password:
Added user itadmin.
注:如果想要让/etc/samba/sabpasswd生效,要先启动samba,不然还是以默认的tdbsam方式来记录密码
删除用户:smbpasswd -x username
更改用户密码:smbpasswd username
第六步:测试用户
linux用户端测试
Smb //192.168.88.35/share -U lili
Enter lili's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.0.0rc4]
Smb: \>ls
. D 0 Sat Aug 24 02:21:22 2013
.. D 0 Sat Aug 24 00:18:49 2013
Windows下测试用户就是在“运行”输入//192.168.88.35/share
这时会弹出一个用户名和密码验证的窗口,输入自己的用户名及密码
第七步:安装changepassword
changepassword是一个可以让客户端通过浏览器来更改samba用户密码的工具,使用组环境来说用这个工具还是方便的
1、安装changepassword运行的环境
yum install gcc httpd -y
gcc是开发包,httpd不用说了
tar -zxvf changepassword-0.9.tar.gz
cd changepassword-0.9
./configure --enable-cgidir=/var/www/cgi-bin --enable-language=Chinese --enable-smbpasswd=/etc/samba/smbpasswd --disable-squidpasswd --enable-logo=opentech.jpg
系统提示:
changepassword 0.9 Configuration
--------------------------------
Samba password file: /etc/samba/smbpasswd
Squid password file: no
Logo p_w_picpath : opentech.jpg
Using Language file: languages/Chinese.h
Apache cgi-bin dir : /var/www/cgi-bin
configure: creating ./config.status
config.status: creating Makefile
Don't forgot to copy opentech.jpg to your website root htdocs
Now, type "make" and "make install"
make && make install
2、安装changepassword
在安装过程中可能会遇到以下一个报错
collect2:ld returned 1 exit status
make:***[changepassword.cgi] Error 1
这是因为缺少一个依赖包的原因,这个依赖包就在changepassword-0.9.tar.gz的目录包里,解压后在目录里有一个smbencrypt的目录,进入该目录,目录里有一个libdes-4.0.tar.gz文件,这个是changerpassword的一个依赖包,解压缩
tar -zxvf libdes-4.0.tar.gz
解压后有一个des目录,进入后
make
cp libdes.a ../
系统提示:
cp:是否覆盖../libdes.a?
Enter确认覆盖,退回changepassword目录
然后再回到changepassword-0.9的目录下再make && make install一次,这时系统会提示:
cp changepassowrd.cgi /var/www/cgi-bin/changepasword.cgi
chmod 4755 /var/www/cgi-bin/changepassword.cgi
changepassword就安装成功了
注:
--enable-cgidir=/var/www/cig-bin:指定http下的cig-bin路径
--enable-language=Chinese:设定语言为中文
--enable-smbpasswd=/etc/samba/smbpasswd:指定smbpasswd路径
--disable-squidpasswd:关闭squid密码(changepassword是支持squid认证用户密码更改的)
swat是对Samba图形化管理的工具,也很方便简单
vim /etc/xinetd.d/swat
将
only_from = 127.0.0.1 改为 only_form = 192.168.88.0/24(这是允话管理的ip地址范围,也可以是单个IP地址)
disable = yes 改为 disable = no
保存并重启xinetd.d
service xinetd restart
第九步:修改samba配置
在smb.conf里增加
pam password change = no
passwd chat = **NEW*UNIX*password* %n\n *Retype*new*UNIX*password* %n\n *successfully*
passwd program = LANG=en_US /usr/bin/passwd %u
unix password sync = yes
增加的上面这些是为Changepassword增加的
保存后重启smb
service smb restart
第十步:更改IPTABLES
iptables -A INPUT -p tcp -s 192.168.88.0/24 --dport 22 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.88.0/24 --dport 137 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.88.0/24 --dport 138 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -s 192.168.88.0/24 --dport 139 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -s 192.168.88.0/24 --dport 445 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -s 192.168.88.0/24 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -s 192.168.88.0/24 --dport 901 -j ACCEPT
重启IPTABLES,启动http
service iptables restart
service httpd start
将httpd加入启动服务
chkconfig --level 35 httpd on
第十一步:测试changepassword及swat
Changepassword
打开浏览器输入:192.168.88.35(youipaddress)/cgi-bin/changepassword.cgi,正确的情况下就可以看到下更改密码的窗口如下
输入旧密码、新密码
SWAT
打开浏览器输入http://ip address:901(图形管理页面的端口是901)
-从这开始是为域环境建立的Samba-
Samba的安装和共享目录的建立过程就不再重复了,看第一步、第二步现在的主要工作是将samba加入己有的AD域中
AD域:yk_wy.local
AD域系统:Windows 2003标准版
下面的配置中绿色字体为原有的内容,红色字体为要修改的内容,蓝色字体为修改的内容,粟色字体为增加内容
首先我关闭了SELINUX并清空了IPTABLES
iptables -F //清空iptables配置
vim /etc/selinux/config
将SELINUX=enforcing 改为 SELINUX=disable //关闭SELINUX
第三步:编辑krb5
cp /etc/krb5.conf /etc/krb5.conf.bak
vim /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm =EXAMPLE.COM --改为-->YK_WY.LOCAL //将默认区域名改为AD域的域名
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
EXAMPLE.COM --改为--> YK_WY.LOCAL = { //改为AD域名
kdc =kerberos.example.com --改为-->192.168.88.2 //改为AD的IP地址
admin_server =kerberos.example.com --改为-->192.168.88.2 //改为AD的IP地址
}
[domain_realm]
.example.com = EXAMPLE.COM --改为-->.yk_wy.local = YK_WY.LOCAL
example.com = EXAMPLE.COM --改为-->yk_wy.local = YK_WY.LOCAL
第四步:编辑nsswitch.conf
我们要将Samba加入windows域需要用到winbind,winbind是一款 Samba 组件,在CentOS它包含在了 samba-common 包中。 winbind 在Linux上实现了微软的RPC调用、可插式验证模块和名字服务切换,通过 samba 接口与windows 域控获得联系,可以使NT域用户能在Linux主机上以Linux用户身份进行操作。通过设定 Linux 服务器的 nss 配置,可以让系统通过 Winbind 程序来解析用户信息。
NSS 是 Sun 公司开发用于定义系统中配置文件查找顺序的工具。他的配置文件在 /etc/nsswitch.conf 。通过他我们可以定义系统在登录时通过 Winbind 来获取用户信息
cp /etc/nsswitch.conf /etc/nsswitch.conf.bak
vim /etc/nsswitch.conf
passwd: fileswinbind //先读files 然后再通过winbind认证
shadow: fileswinbind
group: fileswinbind
第五步:编辑smb.conf
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
vim /etc/samba/smb.conf
[global]
workgroup =MYGROUP--改为-->YK_WY//AD域的域名
password server =192.168.88.2 //AD的IP地址
realm = YK_WY.LOCAL
server string = Samba Server Version %v
netbios name =MYSERVER--改为—> PMSAMBA
interfaces =lo eth0 192.168.12.2/24 192.168.13.2/24 --改为--> lo eth0 192.168.88.40
hosts allow =127. 192.168.12. 192.168.13. --改为--> 127. 192.168.88. 192.168.87.
log file = /var/log/samba/log.%m
max log size = 50
security =user --改为--> ADS
passdb backend = tdbsam
idmap config * : range = 16777216-33554431
idmap config * : backend = tdb
template shell = /sbin/nologin
template homedir = /home/%U
winbind use default domain = Yes
winbind offline logon = Yes
winbind separator = /
winbind enum users = Yes
winbind enum groups = Yes
[homes]
comment = Home Directories
path = /home/%U
valid users =YK_WY.LOCAL/%U
read only = No
browseable = No
root preexec = /bin/mkhome.sh %U %G
注:mkhome.sh脚本感谢51cto的ainbird2,正为此头疼看到他的《Samba通过ad域进行认证并限制空间大小》
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
配置完后通过testparm来检查
一般检测会提示:
WARNING: The setting 'security=ads' should NOT be combined with the 'password server' parameter.
(by default Samba will discover the correct DC to contact automatically).
系统认为己设置了“security = ADS”就不必设置“password server =”因为samba会自己认到,看到没什么影响,我也就没改
注1:在以前用的 idmap uid = 16777216-33554431 和 idmap gid = 16777216-33554431现在己不在使用
注2:mkhome.sh脚本
vim /bin/mkhome.sh
#!/bin/bash
user=$1
group=$2
home=/home/$1
if [ ! -d $home ] ; then
mkdir -p $home
chown $user $home
chgrp $group $home
chmod 700 $home
fi
chmod 700 /bin/mkhome.sh //修改文件权限
启动smb、nmb和winbind
service smb start
service nmb start
service winbind start
将smb和nmb加入启动服务
chkconfig --level 35 smb on
chkconfig --level 35 nmb on
chkconfig --level 35 winbind on
第六步:加入AD域
测试:
kinit administrator@YK_WY.LOCAL
Password for administrator@YK_WY.LOCAL:[输入AD管理员登录密码]
没问题的话会直接回到bash
加入域
net ads join -U administrator@YK_WY.LOCAL
Enter administrator@YK_WY.LOCAL's password:[输入AD管理员登录密码]
Using short domain name -- YK_WY
Joined 'PMSAMBA' to realm 'yk_wy.local'
No DNS domain configured for pmsamba. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
现在到域控上看一下,果然能看到SMB服务器了
但是这并不表明己完全正确的加入到了域
验证:
wbinfo -t //查看与AD主机是否己建立信任关系
checking the trust secret for domain YK_WY via RPC calls succeeded
wbinfo -u //显示AD的用户信息
80114663
dtz0016
80115157
80115140
80114721
80115447
08084394
pmfile-svr-backup
test
wbinfo -g //显示AD的组信息
财务部
客房部
工程部
保卫部
dnsadmins
dnsupdateproxy
人力资源及总务部
getent passwd //显示本地和域中可登录用户
08086126:*:16777220:16777221:Tian, Yu:/home/08086126:/bin/bash
80111214:*:16777221:16777221:lili:/home/80111214:/bin/bash
dtz0006:*:16777222:16777221:liuxa:/home/dtz0006:/bin/bash
80111040:*:16777223:16777221:josno:/home/80111040:/bin/bash
80112196:*:16777224:16777221:tony:/home/80112196:/bin/bash
proxyserver:*:16777225:16777221:proxyserver:/home/proxyserver:/bin/bash
financeserver1:*:16777226:16777221:financeserver1:/home/financeserver1:/bin/bash
getent group //显示本地和域中的组
财务部:x:16777233:80115249,80111024,80111065,financeserver2,80111040,80116007,80464399,80114598,financeserver1
客房部:x:16777234:80111768,80114721,80115538
物业部:x:16777235:80111545,pcpd0106,pcpd0110,pcpd0105,pcpd0107,pcpd0108,80111479,pcpd0109,80114531,ving card,80114663,80115447,80111347
工程部:x:16777236:08086092,08086134,08086142,pcpd0112,80113293,80464225
保卫部:x:16777237:80112246,pcpd0111,80112238,08086043,80112220,80114572,80115157,80112196
dnsadmins:x:16777238:
dnsupdateproxy:x:16777239:
人力资源及总务部:x:16777240:80111156,80111149,80115140,80115926,kaoqin
其它的测试命令如
net ads info //查询AD域基本资料
net getdomainsid //查询AD域ID号码
就不做了
注:退出域的命令是:net ads leave -U administrator
运行退出命令系统会提示:
Delted account for 'PMSAMBA' in realm 'YK_WY.LOCAL'
第七步:IPTABLES设置
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.88.0/24 --dport 137:139 -j ACCEPT
iptables -A INPUT -A INPUT -p tcp -m state --state NEW -s 192.168.88.0/24 -m multiport --dport 137:139,445,80,901 -j ACCEPT
第八步:客户端测试
windows的用户登录域“运行”-“\\192.168.88.30”这时会看到以自己域帐号为名的目录,进入后新建或删除文件都没问题
第九步:windows域用户挂载共享目录
写个BAT文件设置为域用户的登录脚本,当域用户登录时会自行挂载共享目录
@etho off
if exist Z: net use Z: /del /y
net use Z: \\192.168.88.30\%USERNAME%
域环境下的另一种情况
之前的设置是设置了域用户在登录SAMBA之后都会有一个自己的目录,这个目录的建立与mkhome.sh这个脚本相关,如果只是建立了全体共享目录和部门的Share,不想让每个用户都有 自己的目录就不用脚本,或者直接将[homes]全部注释掉,另外在smb.conf的设置里要注意几点:
1、将 winbind separator = / --改为--> winbind separator = +,如果不改为 + 域内部门权限内的用户访问目录时也会要求用户和密码的验证(还没搞明白为什么)
2、在设置部门访问的时候 valid users = YK_WY.LOCAL/%U --改为--> valid users = @YK_WY.LOCAL+[部门]
---配置过程中遇到的问题---
组环境问题一:在编译changepassword时系统提示
cp changepassword.cgi /var/www/cig-bin/changepassword.cgi
cp: 无法创建普通文件"/var/www/cig-bin/changepassword.cgi": 没有那个文件或目录
解决:这个是最不细心的一个表现……,在编译时把/var/www/cgi-bin写成了/var/www/cig-bin
组环境问题二:在浏览器上通过changepassword修改用户密码时,输入正确也提示旧密码错误
解决:这个是在创建samba用户时因想是不用登录系统的用户,所以也忘记给用户设置系统密码了,changepassword如果修改密码,必须和/etc/passwd内的密码同步,如果只设置samba密码,不设置系统密码,该程序是无法修改用户密码的。用户必须具有系统密码,并且这个系统密码要与samba密码一致
组环境问题三:浏览器输入网址看到的是乱码
解决:修改 /etc/httpd/conf/httpd.conf文件中将 AddDefaultCharset UTF-8的值改为 GB2312
组环境问题四:从客户端(windowsXP)访问Samba速度十分慢,在运行里输入命令后得等一分钟时间吧,才会弹出登录认证窗口
域环境问题一:通过 kinit administrator@YK_WY.LOCAL 测试,系统提示
kinit: Clock skew too great while getting initial credentials
解决:查看了一下samba的时钟与AD的钟相差2天时间,对samba进行调整 date 082315142013 再测试就没有提示了
域环境问题二:通过 net ads join -U administrator@YK_WY.LOCAL 命令加入域报错
realm must be set in in /etc/samba/smb.conf for ADS join to succeed.
Invalid configuration. Exiting....
Failed to join domain: Invalid parameter
解决:在smb.conf里没有配置 password server = [ad ip address]和 realm = [ad name]
域环境问题三:通过windows访问SMB服务器,系统报错:
无任何网络提供程序接受指定的网络路径
解决:配置这个域环境的SMB时忘了配置iptables,把SMB相应的端口设置一下就好了
域环境问题四:访问SMB上自己的目录时系统报错:
\\192.168.88.30\08084394无法访问。您可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限。无任何网络提供程序接受指定的网络路径
查看日志:tail /var/log/samba/log.hqb-virtual
[2013/08/024 15:59:17.784198, 0] ../source3/smbd/service.c:828(make_connection_snum)
canonicalize_connect_path failed for service 08084394, path /home/08084394
解决:这又是一个不细心的典型,我把mkhome.sh建在了home目录下,而在smb.conf里却写成了 root preexec = /bin/mkhome.sh %U %G,懒的改了,把mkhome.sh移到bin下好了