1. 实验需求:
1) 使用RPM包安装samba服务
2) 实现匿名访问,验证可以读写文件、目录
3) 实现指定用户的访问
4) 实现指定用户的访问,并为用户赋予不同的权限
5) 实现用户的别名访问,并测试权限
6) 实现对特定的访问地址进行限制
7) 实现访问windows系统中的共享资源
2. 实验环境:
Linux服务器系统版本:Red Hat Enterprise Linux 6.5 IP:192.168.10.3
Windows客户机系统版本:Windows 7 Ultimate x64 IP:192.168.10.2
Samba软件版本:samba-3.6.9
3. 实验步骤:
基本安装操作
A. 挂载系统光盘并安装samba
要安装samba服务需要从rpm软件包安装,rpm安装包一般放在系统光盘中的Packages目录中,我们首先用mount命令看一下是否挂载了光盘到系统中
如果没有挂载,将光盘手动挂载到系统的mnt目录下
查看光盘已经被挂载
在Packages目录下找到samba服务的软件包并安装
B. 查看samba配置文件
安装好samba之后我们要想服务器能够按照我们的意愿工作就要去修改配置文件了
可以用rpm -qc来查看一个已经安装软件的文档安装位置
发现并没有显示conf配置文件,但根据经验一般conf配置文件都会放在/etc目录下,查找/etc/samba/目录,找到主配置文件smb.conf
[root@localhost~]# more /etc/samba/smb.conf 查看文件里面的内容,发现内容很长,并且有很多#号的注释
我们为了看起来方便,可以过滤掉所有带#号的行,并把过滤过后的文件内容保存为另外一个文件smb.con:
[root@localhost ~]# grep -v"#" /etc/samba/smb.conf > /etc/samba/smb.con
查看发现已经有了smb.con文件,建议原来以.conf结尾的配置文件也不要删除,可以给它改个名字做个备份,以防将来配置出错还可以把它继续拿来修改
[root@localhost ~]# cd /etc/samba #切换到samba目录
[root@localhost samba]# mv smb.confsmb.conf.back #将conf文件备份
[root@localhost samba]# mv smb.consmb.conf #将smb.con改名为smb.conf
实现匿名访问,验证可以读写文件、目录
[root@localhostsamba]# vi smb.conf #打开主配置文件
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
; netbios name = MYSERVER
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
; hosts allow = 127. 192.168.12. 192.168.13.
log file = /var/log/samba/log.%m
max log size = 50
security = share
passdb backend = tdbsam
以上为[global]全局模式的配置内容,其他保持默认即可,我们关心的是如果要实现匿名访问,只需要修改 security 使安全级别为share(默认的为user)
下面是对share共享目录进行配置,在配置文件的末尾插入以下行
[share] #指定目录的共享名称
path= /opt/share #指定共享share这个目录
public= yes #public=guest ok,设为yes允许匿名用户访问
browseable= yes #让匿名用户可以看到共享内容
writable= yes #设置可以有写入的权限
createmask = 0644 #设置新建文件的权限,表示属主具有读写权限,其他人都只有只读权限(rw-r--r--)
directory mask = 0755 #设置新建目录的权限,表示属主具有读写执行权限,其他人没有写入权限(rwxr-xr-x)
A. 修改后的脚本:
[root@localhostsamba]# mkdir /opt/share #创建share共享目录
[root@localhostsamba]# chmod 777 /opt/share #修改权限为777
[root@localhostsamba]# service smb start #启动samba服务
[root@localhostsamba]# netstat -ant #查看网络端口状态
139和445两个samba服务的端口正在被监听,samba服务是正常的,下面就可以去客户机上测试了。测试之前,必须把防火墙和selinux关掉
[root@localhost samba]# service iptables stop
iptables:将链设置为政策ACCEPT:filter [确定]
iptables:清除防火墙规则: [确定]
iptables:正在卸载模块: [确定]
[root@localhost samba]# setenforce 0
B. 效果验证:
在客户机上测试能否ping通服务器
在【开始】菜单的搜索框中输入\\192.168.10.3,可以看到名为share的共享文件夹
进入文件夹,可以新建文件和文件夹,文件里可以写入任何内容,文件夹下也能够再新建文件,和配置文件里的设置是一样的,匿名访问成功。
回到服务器,我们查看共享文件夹下匿名用户访问时新建的文件,发现属主和属组都是nobody,新建的文件权限是644,文件夹的权限是755
nobody是一个系统账号,匿名访问新建的就会显示为nobody
实现指定用户的访问
因为是要指定用户进行访问了,所以[global]全局模式里面只需要修改 security
使默认安全级别为user
security = user
下面是根据具体的共享目录进行配置,在配置文件的末尾插入以下行,新建一个test 的目录的共享配置,不让他匿名访问,只有指定用户才能访问
[test] #指定目录的共享名称
path= /opt/test #指定共享test目录
browseable= yes #设置可以看到共享内容
writable= yes #设置可以有写入的权限
createmask = 0644 #设置新建文件的权限,表示属主具有读写权限,其他人都只有只读权限(rw-r--r--)
directory mask = 0755 #设置新建文件夹的权限,表示属主具有读写执行权限,其他人没有写入权限(rwxr-xr-x)
系统当中的用户当然也可以访问共享目录,但是我们这里希望用samba自己的账户来访问,新建两个用于samba的账户不设置他们的密码,这样他们可以作为samba用户使用但是不能够登陆系统
[root@localhost samba]# useradd jery #创建账户jery和jene
[root@localhost samba]# useradd jene
[root@localhost samba]# smbpasswd -ajery #设置账户为samba用户并设置密码
New SMB password:
Retype new SMB password:
Added user jery.
[root@localhost samba]# smbpasswd -ajene
New SMB password:
Retype new SMB password:
Added user jene.
[root@localhost samba]#
[root@localhost samba]# pdbedit -L #查看新建的samba账户信息
jery:500:
jene:501:
[root@localhost samba]# mkdir /opt/test #创建共享目录test
[root@localhost samba]# chmod 777/opt/test #修改权限为777
[root@localhost samba]# service smbrestart #重启samba服务,这里也可以使用reload,但是reload是重新加载配置并不会和客户机彻底断开连接,这里为了测试用了restart
关闭 SMB 服务: [确定]
启动 SMB 服务: [确定]
A. 修改后的脚本
B. 效果验证
测试之前先要在客户机上清除之前的连接否则会因为缓存而直接进入共享目录
在【开始】菜单的搜索框中输入\\192.168.10.3\test,跳出对话框,输入jery的账号和密码
jery这个用户可以登陆并且对test共享目录可以进行读写操作
在共享目录里面新建了一个名为jery的文件,回到服务器查看这个文件的权限,显示为jery
实现指定用户的访问,并为用户赋予不同的权限
接着为了测试访问的用户的不同权限,在[test]配置中加入以下两行
valid users =jery, jene #允许这两个用户可以访问
write list =jene #只允许jene这个用户可以写入
A. 修改后的脚本
B. 效果验证
[root@localhostsamba]# service smb restart #重启服务
关闭SMB 服务: [确定]
启动SMB 服务: [确定]
客户机上net use * /d清除连接
这次以jery登陆,测试写入文件
这个时候明明我们设置了只有jene可以写入为什么用jery登陆进去的时候还是可以写入文件呢?我们回到服务器上检查配置文件
所以要使配置生效就必须删除writable = yes这一行配置
[root@localhostsamba]# service smb restart #重启服务
关闭SMB 服务: [确定]
启动SMB 服务: [确定]
清除连接(net use * /d),还是以jery 的身份登陆,发现创建文件的时候被拒绝
回到服务器,写入一行内容到test文件中:
[root@localhostsamba]# echo "this is test" > /opt/test/test.txt
客户机上已经有名为test的文件了,当打开这个文件,为它加上一行内容时被拒绝
退出jery,清除连接,再用jene登陆,jene写入文件和文件夹成功。
实现用户的别名访问,并测试权限
samba目录下有一个smbusers的文件,这个文件就是设置别名的
[root@localhostsamba]# vi smbusers
打开这个文件,在文件的末尾加上一行 jene = t01 t02 t03 相当于给jene起了三个别名,将后面三个的用户名都映射到jene,密码不变,实际登陆的账号还是jene
接着在主配置文件的[global]中添加:username map = /etc/samba/smbusers配置映射关联,用户名就指向了smbusers这个文件中设置的内容
A. 修改后的脚本
B. 效果验证
[root@localhostsamba]# service smb restart #重启服务
关闭SMB 服务: [确定]
启动SMB 服务: [确定]
客户机清除连接(net use * /d)
用t01账号登陆 \\192.168.10.3
看到多了一个名为jene的共享文件夹,是因为全局配置中有[homes]家目录的配置,谁登陆就会把自己的家目录共享,因为t01映射的还是jene账号,所以jene登陆时也会看到自己的家目录也被共享了,在家目录的共享文件夹中是可以进行任何操作的
在test文件夹中新建一个名为iamt01的文件,回到服务器查看这个文件的属性,属主和属组是jene证明登陆的还是jene,t02和t03登陆也是这样,这里就不多做测试了
实现对特定的访问地址进行限制
若要拒绝谁访问,只需要在主配置文件的[test]中添加一行:hosts deny = 192.168.10. 10.0.0. #192.168.10.表示192.168.10.0这个网段,让这个网段的所以主机都不可以访问,这里设置拒绝两个网段192.168.10.0和10.0.0.0
A. 修改后的脚本
B. 效果验证
[root@localhostsamba]# service smb restart #重启服务
关闭SMB 服务: [确定]
启动SMB 服务: [确定]
客户机清除连接(net use * /d)
这次使用t02这个账号来访问,可以访问其他共享文件夹但是因为客户机ip地址为192.168.10.2,在test共享文件夹拒绝访问的网段里面所以当打开test文件夹时提示了拒绝访问
实现访问windows系统中的共享资源
我们在客户机(win7系统)上共享了一个名为LAMP的文件夹
[root@localhost samba]# smbclient -L192.168.10.2 #列出客户机中的共享资源
[root@localhost samba]# mount.cifs//192.168.10.2/LAMP /tmp/ #如果想要访问这个LAMP文件夹,可以将LAMP挂载到服务器的tmp目录下
[root@localhost ~]# df -hT #查看挂载情况,已挂载
查看挂载后的tmp目录下的内容,LAMP里面都是tar压缩包
[root@localhost samba]# cp/tmp/apr-1.4.6.tar.gz ~ #将其中一个压缩文件拷贝到根目录下(根目录可以是/root也可以直接写成~)
[root@localhostsamba]# umount /tmp #把挂载的LAMP从tmp目录下卸载掉
卸载之后查看tmp目录显示了原来tmp目录下的文件和目录
4. 实验总结:
1) samba服务在Linux的系统中实现了微软的SMB/CIFS 网络协议,在部署windows、Linux混合平台的企业环境时,能够很好的解决不同系统之间的文件互访问题,使文件共享变得更加容易,是非常强大的功能
2) samba服务提供了几种很实用的访问共享权限,也提供了服务器客户端的访问控制,在修改配置文件时一定要注意各个权限的配置是否冲突或者遗漏,平时可多做权限方面的测试