一、share服务器实例及详解:
需求分析:如果公司现在用一个工作组workgroup需要天骄samba服务器作为文件服务器,并发布共享目录/share,共享名为public,这个共享目录允许公司所有员工访问。
项目实施:修改samba主配置文件:smb.conf
(1)设置samba服务器工作组名为workgroup
(2)添加samba服务器注释信息为“file server”
(3)设置samba安全级别为share模式,允许匿名用户访问
(4)设置共享目录的共享名为public
(5)设置共享目录的绝对路径为/share
(6)最后我们设置允许匿名用户访问
实施: [public]
comment = public
path = /share
public = yes
重新加载配置:service smb reload
注意:重启使用reload命令,这样就不需要中断服务而重新加载。
测试:在/share目录下建个文件试试:touch /share/test_sharemode_samba.tar
二、user服务器实例详解:
需求分析:如果公司有多个部门,因工作需要,我们就会分门别类的建立相应部门的目录,并将销售部的资料存放在samba服务器的/companydata/sales/目录下,集中管理,以便销售人员浏览,并且该目录只允许销售部员工访问。
项目实施:
1)添加销售部用户和组并添加相应的samba账号
groupadd sales
useradd -g sales sale1
useradd -g sales sale2
passwd sale1
passwd sale2
   接下来为销售部成员添加相应samba账号
smbpasswd -a sale1
smbpasswd -a sale2
2)修改samba主配置文件smb.conf
(1)设置user安全级别模式
(2)设置销售部共享目录为sales
(3)指定共享目录为绝对路径/companydata/sales
(4)设置可以访问的用户为sales组成员
[sales]
comment = sales data
path = /companydata/sales
valid users = @sales
重新加载:service smb reload
测试:
三、samba高级服务器配置:
1、用户账号映射
samba的用户账号信息是保存在smbpasswd文件中的,而且可以访问samba服务器的账号也必须对应一个同名的系统账号。这样不安全,容易被***。
用户账号映射这个功能需要建立一个账号映射关系表,里面记录了samba账号和虚拟账号的对应关系,客户端访问samba服务器时就用虚拟用户来登。
1)编辑主配置文件/etc/samba/smb.conf
在global下添加一行字段username map = /etc/samba/smbusers开启用户账号映射功能(在server string下添加)
2)编辑/etc/samba/smbusers
smbusers文件保存账号映射关系,格式:samba账号 = 虚拟账号(映射账号)
eg:redking = 51cto 51blog
账号redking就是我们上面建立的samba账号(同时也是linux的系统账号),51cto及51blog就是映射的账号名,我们在访问共享目录时只要输入51cto或51blog就可以成功访问了,但实际上访问samba服务器的还是我们的redking账号,这样一来就解决了安全问题。
3)重启samba服务:service smb restart
4)验证效果:
注意:出于安全考虑,建议不要将samba用户的密码与本地系统用户的密码设置成一样
2、客户端访问控制
前面我们已经说过用valid users字段去实现用户访问控制,但如果企业庞大,用户量大的时候,这种方法就比较麻烦,比如samba服务器共享出一个目录来访问,但是要禁止某个ip子网或某个域的用户端访问此资源,这样是用valid users显然就无法实现。
解决的方法是使用hosts allow和hosts deny两个字段,用好这两个字段的关键在于熟悉和清楚他们的使用方法和作用范围。
1)hosts allow 和 hosts deny 字段的使用:
hosts allow 字段定义允许访问的客户端
hosts deny 字段定义禁止访问的客户端
2)使用ip地址进行限制
需求分析1:公司内部samba服务器上共享了一个目录sales,这个目录是存放销售部的共享目录,公司规定192.168.0.0/24这个网段的ip地址禁止访问此sales共享目录,但是其中192.168.0.24这个ip地址可以访问。
项目实施:
先将安全级别模式由user改为share
这里我们添加hosts deny和hosts allow字段
[sales]
comment = share directory of sales
path = /sales
hosts deny = 192.168.0.
hosts allow = 192.168.0.24
测试效果:
需求分析2:如果想同时禁止多个网段的ip地址访问此服务器可以这样设置
项目实施:
hosts deny = 192.168.1. 172.16. 表示拒绝所有192.168.1.0网段和172.16.0.0网段的ip地址访问sales这个共享目录。
hosts allow = 10. 表示允许10.0.0.0网段的ip地址访问sales这个共享目录。
注意:当需要输入多个网段ip地址的时候用空格分开。
3)使用域名进行限制:
需求分析:公司samba服务器上共享了一个目录public,公司规定.sale.com域和.net域的客户端不能访问,并且主机名为free的客户端也不能访问。
项目实施:
[public]
comment = public data
path = /public
writable = yes
hosts deny = .sale.com .net free
4)使用通配符进行访问控制
需求分析:samba服务器共享了一个目录security,规定所有人不允许访问,只有主机名为boss的客户端才可以访问。
hosts deny = ALL 表示所有客户端,常用的通配符还有 * ? LOCAL
还有一种很有意思的情况,如果我们规定所有人不能访问security目录,只允许192.168.0.0的网段ip地址访问,但192.168.0.100及192.168.0.78的主机是要禁止访问的。
我们可以使用hosts deny禁止所有的用户访问,在设置hosts allow允许192。168.0.0网段的主机,但当hosts deny 和 hosts allow 同时出现而且冲突的时候,hosts allow生效,这样的话,那么就允许192.168.0.0网段的ip地址可以访问,但是192.168.0.100及192.168.0.78的主机禁止访问就无法生效了,我们可以使用EXCEPT进行设置:
hosts allow 192.168.0. EXCEPT 192.168.0.100 192.168.0.78 表示允许192.168.0.0网段的ip地址访问,但是192.168.0.100和192.168.0.78的除外。
hosts allow 和 hosts deny 的作用范围:
hosts allow 和hosts deny 设置在不同的位置上,它们的作用范围是不一样的。如果设置在global里,表示对samba服务器全局生效,如果设置在目录下面,表示只对此目录生效。
3、设置samba的权限:
需求分析:我们已经可以对客户端访问进行有效地控制,但是对于能访问的客户端来说,我们还是不能灵活方便的控制它们访问共享资源的权限,比如boss和gm这样的账号可以对某个共享目录具有完全控制权限,其他账号只有只读权限。如果只用writeable字段则无法满足这个实例的要求,当writeable = yes时,表示所有人都可以写入了,而=no时,则所有人都不可以写入。这时就需要用write list字段。
项目实施:
write list = boss,@tech 表示只有boss账号和tech组成员才可以对tech共享目录有写入权限。
4、samba的隐藏共享
我们要把samba上技术部共享目录隐藏,我们可以这样设置:
browseable = no
现在就看不到tech目录了。
如果我们直接输入\\192.168.0.188\tech就可以访问。
需求分析:samba服务器上有个security目录,此目录只有boss用户可以浏览访问,其他人都不可以访问。因为samba的主配置文件只有一个,所有账号访问都要遵守该配置文件的规则,如果隐藏了该目录,就像上面显示的那样,你得输入\\192.168.0.188\tech才可以访问技术部的资料。如果这样的话,boss得记很多目录名称,他会发火的哦!问题出在samba服务的主配置文件只有一个,而sam.conf没有提供字段允许部分人可以浏览隐藏目录的功能。换个角度思考,既然单一的配置文件无法实现要求,那我们可以为不同需求的用户或组分别建立相应的配置文件并单独配置后实现其隐藏目录的功能,现在我们为boss账号建立一个配置文件,并且让其访问的时候能够读取这个单独的配置文件。
项目实施:
(1)建立独立的配置文件
vi /etc/samba/smb.conf
cp smb.conf smb.conf.boss
ls
(2)编辑smb.conf主配置文件
在[global]中加入config file = /etc/samba/smb.conf.%U,表示samba服务器读取/etc/samba/smb.conf.%U文件,其中%U代表当前登录用户。命名规范与独立配置文件匹配。
(3)编辑smb.conf.boss独立配置文件
[tech]
comment = tech data
path = /tech
write list = boss,@tech
(4)重启服务:service smb restart
注意:目录隐藏了并不是说不共享了,只要知道共享名,并且有相应的权限,还是可以访问的,就像上面一样,可以输入\\192.168.0.188\tech的方法就可以访问隐藏共享了。
四、samba客户端配置
1、linux客户端访问samba共享
1)在linux中,samba客户端使用smbclient这个程序来访问samba服务器时,先要确保客户端已经安装了samba-client这个rpm包。
smbclient可以列出目标主机共享目录列表
smbclient命令格式:smbclient -L 目标ip地址或主机名 -U 登录用户名%密码
如果想使用samba账号看samba服务器共享了什么目录,我们可以加上-U参数,后面跟上用户名%密码。eg:smbclient -L 192.168.0.188 -U boss%boss
我们还可以在使用smbclient命令行共享访问模式浏览共享的资料。
smbclient //目标ip地址或主机名/共享目录 -U 用户名%密码
另外smbclient登录samba服务器后,我们可以使用help查询所支持的命令。
2)使用mount命令挂载共享目录
命令格式:mount -t cifs //目标ip地址或主机名/共享目录名称 挂载点 -o username=用户名
eg:mount -t cifs //192.168.0.188/tech /mnt/sambadata/ -o username=boss%boss
这表示挂在192.168.0.188主机上的共享目录tech到/mnt/sambadata目录下,cifs就是samba说使用的文件系统。
2、windows客户端访问samba共享
1)在开始--运行里面使用UNC路径直接进行访问
2)映射网络驱动器访问samba服务器共享目录。如图:

输入tech共享目录的地址。如图:

输入可以访问tech共享目录的samba账号和密码。如图:

这时在我的电脑的网络驱动器中就可以看到映射的Z盘啦!如图:

打开Z盘就可以访问tech共享目录里面的资源。
五、samba的打印服务
默认情况下,samba的打印服务是开放的,所以我们只要把打印机安装好后客户端的用户就可以使用打印机了。
1)设置global配置项
修改smb.conf全局配置,开启打印共享功能
[printers]
comment = All printers
path = /usr/spool/samba
browsebale = no
# set public = yes to all user 'guest account' to print
guest ok = no
writable = no
printable = yes
使用默认设置就可以让客户端正常使用打印机了,需要注意的就是printable一定要设置成yes,path字段定义打印机队列,可以根据需要自己定制,另外共享打印和共享目录不一样,安装完打印机后必须重新启动samba服务,否则客户端可能无法看到共享的打印机。如果只允许部分员工使用打印机,我们可以使用valid users、hosts allow或hosts deny 字段来实现。
六、samba企业实战与应用
1、企业环境及需求
samba服务器目录:
企业数据目录:/companydata
公共目录:/companydata/share
销售部目录:/companydata/sales
技术部目录:/companydata/tech
企业员工情况:
总经理:gm
销售部:销售部经理 redking、员工 sky、员工 jane
技术部:技术部经理 michael、员工 bill、员工 joy
搭建samba文件服务器,建立公共共享目录,允许所有人访问,权限为只读,为销售部和技术部分别建立单独的目录,只可以总经理和相应的部门员工访问,并且公司员工禁止访问非本部门的共享目录。
2、需求分析
对于建立公共目录public字段就可以实现匿名用户访问,员工只能访问本部门的共享目录,禁止访问非本部门的共享目录,我们可以通过设置目录共享字段“browseable = no”及字段“valid users”来实现其隐藏功能和相应的访问权限。这样设置不能很好得解决同一目录多种需求的权限设置,所以我们需要建立独立配置文件,为每个部门建立一个组后并为每个组建立配置文件来实现隔离用户权限会比较灵活。
3、解决方案
1)建立各部门专用共享目录。如图:

     同时设置/companydata共享目录的用户权限。如图:

2)添加samba服务器描述及设置smbpasswd文件。如图:

   默认/etc/samba/目录下没有smbpasswd文件,我们要先关闭samba的tdbsam验证。
   解决方法:在smb.conf文件中注释掉passdb backend = tdbsam一行,为了指定samba用户的验证我们加上这一条smb passwd file = /etc/samba/smbpasswd,然后保存退出。如图:

3)添加用户和组
   先建立销售部组sales,技术部组tech,然后使用useradd命令添加总经理账号gm及各个员工的账号并加入相应的组。如图:

     接着使用smbpasswd命令添加用户。如图:


4)配置smb.conf文件
(1)建立单独配置文件
用户配置文件使用用户名命名,组配置文件使用组名命名。如图:

(2)设置主配置文件smb.conf
这里我们配置smb.conf主配置文件,在global中添加相应字段,确保samba服务器的主配置文件可以调用独立的用户配置文件和组配置文件。如图:

include = /etc/samba/%U.smb.conf 表示使samba服务器加载/etc/samba目录下格式为“用户名.smb.conf”的配置文件
include = /etc/samba/%G.smb.conf 表示使samba服务器加载/etc/samba目录下格式为“组名.smb.conf”的配置文件
设置共享目录/companydata/share。如图:

(5)设置总经理gm配置文件
vi /etc/samba/gm.smb.conf 如图:

(6)设置销售部组sales配置文件
vi /etc/samba/sales.smb.conf 如图:

(7)设置技术部组tech配置文件
vi /etc/samba/tech.smb.conf 如图:

(8)开启samba服务:service smb start
(9)测试:
我们先用gm账号登录测试。如图:

可以看到全部共享目录。如图:

/companydata/share 目录只读。如图:

注意:最好禁用linux中的selinux功能,否则会出现些莫名其妙的问题,比如下面的账号gm明明对共享目录sales和tech是777的权限,但就是只能创建文件却不能创建文件夹。如图:

关闭selinux,打开selinux配置文件/etc/selinux/config配置selinux=disabled后保存退出并重新启动系统。如图:

查看selinux当前状态 sestatus -v
现在我们就可以创建文件夹了。如图:

现在我们以其他账号测试,就用技术部joy吧。如图:

这里技术部的员工就看不到销售部的共享目录。同时对public目录只读权限,对tech目录有读写权限。如图:

因为禁止对共享目
录sales访问,就算知道了\\rhel5\sales的路径也是不能访问的。如图:

七、samba排错
1)linux服务一般的排错方法
(1)错误信息
一般仔细看下显示的错误信息,根据错误提示一般的问题就可以判断问题出在什么地方了。
(2)配置文件
有时可能误操作导致配置错误,服务无法正常运行,我们可以通过检查配置文件来确认问题。现在很多服务的软件包有自带配置文件检查工具,我们可以通过这些工具对配置文件进行检查。
(3)日志文件
如果服务出现问题,我们还可以使用tail命令来动态监控日志文件(在CLI状态下可以使用Ctrl+alt+f1~f6切换到另一个CLI文字终端下查看)。
tail -F /var/log/messages
2)samba服务故障排错
(1)使用testparm命令检查
上面提到软件包子自带的配置工具,我们可以使用testparm命令检测smb.conf文件的语法,如果报错,说明smb.conf文件设置有错误,这样我们可以根据提示信息来修改主配置文件和独立配置文件。
testparm /etc/samba/smb.conf
(2)使用ping命令检查
(3)使用smbclient命令进行测试
     使用netstat -a检查netbios使用的139端口是否处于监听状态。
(4)检查smb服务
     开启smb服务
     netbios-ssn 会话管理
     netbios-ns 名字解析
     netbios-dgm 数据报   如图:

       有时也会受到比如“Your server software is being unfriendly”错误信息,提示服务器软件存在问题,这个故障一般是因为配置smbd时使用了错误的参数或者启用smbd时遇到的类似严重的破坏错误,我们可以使用testparm来检查相应的配置文件并同时检查相关日志文件。
八、
1、结束资源管理器:由于存在其他用户已经打开了服务器的链接情况,新用户登录前需要结束打开的窗口:ntsd -c q -pn explorer.exe 如图:
2、检查资源管理器是否被重新自动打开:
tasklist /fi "imagename eq explorer.exe" | find "explorer.exe" 如图:

3、结束所有打开的网络连接:net use * /delete /y 如图:

4、重新打开到smb服务器的链接:explorer \\rhe15   (此处与上文中 rhe15是该linux的主机名)如图:

我们可以将以上的4点做成一个批处理命令后,就可以打包成一个批处理文件:
ntsd -c q -pn explorer.exe
:waitexplorer
tasklist /fi "imagename eq explorer.exe" | find "explorer.exe"
if errorlevel 1 goto waitexplorer
net use * /delete /y
explorer /root,\\rhe15
使用:waitexplorer是等待资源管理器重启用后再执行下一步命令。
附上我已经打包好的批处理文件,如果你的samba服务器名为rhe15,就可以直接使用这个批处理文件,不是的话就改名。
还有一条:修改完selinux后不想重启就输入setenforce 0