1、作用:实现局域网上共享文件和打印机的一种通信协议。不但可以实现linux之间的文件共享,还可以实现windows和linux间的文件共享。
2、Samba服务的主要程序:
smbd:提供对服务器中文件、打印资源的共享访问。端口号:139 445
nmbd:提供基于NetBIOS主机名称的解析。端口号:137138
Samba的服务脚本:
/etc/init.d/smb
Samba的配置目录及文件
/etc/samba
/etc/samba/smb.conf
配置文件检查工具命令:testparm
1、主配置文件:
全局配置区域
[global] workgroup = MYGROUP #定义默认使用的工作组的名称Samba服务是能够跨平台的使用的,如果想要跨平台的使用,让windows平台能够通过工作看到samba上共享出来的目录的话,名称一定要是windows工作组的名称 server string = Samba Server Version %v #当前samba服务在登录时的提示信息。%v可以看到当前登录的版本信息,应该去掉 log file = /var/log/samba/log.%m #日志文件位置。%m 为每个用户提供日志文件log.zhangsan max log size = 500 #最大的日志文件大小,超过大小进行日志轮替 security =share #身份验证的方式(安全级别) #share 表示samba服务允许匿名访问,所有人都能访问 #user 表示允许本地服务器提供的samba用户来让客户端访问 #server 表示允许通过其他主机进行身份认证 #domain 表示允许通过域控制器进行身份认证。域:把计算机逻辑上集中到一起,集中管理 passdb backend = tdbsam #密码的加密方式 load printers = yes #加载打印机(如果本机连接有打印机,是否自动的去加载它) cups options = raw #对打印机的操作是读写操作
用户的家目录区域
[homes] comment = Home Directories #家目录的信息 browseable = no #目录是否被网上邻居可见。如果= yes,共享出来的文件夹是看不到的,但是这个共享文件是存在的,在访问是要使用\\ip地址\文件夹名 才能访问,提高安全性 writable = yes #对共享目录的权限(可写) [printers] #打印机配置区域 comment = All Printers #描述信息 path = /var/spool/samba #打印机的配置存放位置 browseable = no #是否网上邻居可见 printable = yes guest ok = no #允许所有人访问共享目录 (权限默认只读)。等价于 public = yes read only = yes writable = yes #对共享目录的权限(可写) printable = yes #是否启动打印机
用户自定义配置区域
[share] comment = share #描述信息 path = /public #共享目录路径。真实目录的名称不一定要和定义的名称一样,[share]叫做共享名,/public是真实的共享目录,用户应该使用共享名进行访问提高安全性 guest ok = yes #有访问权限才能有写入之类的权限 browseable = no #网上邻居不可见 writable = yes #允许所有用户以写入的方式进行访问除了受到服务的影响还受到目录权限的限制(取两个中比较严格的权限) 把一个权限设置到最大,通过另一个来限制权限对访问权限进行控制: valid users = zhangsan[,lisi,@zhangsan] #合法用户,只有声明的用户和组才能登录指定的共享目录,用户名不在valid后面的登录不了。@组名 指定组 write list = 用户名[,@组名] #合法用户中,那些用户拥有写权限 read only = yes #所有用户只读访问 writable = yes #允许所有用户可以写入
*linux客户端访问时访问要确保安装了samba-client包
1、匿名访问:
smbclient -L 172.16.100.111 #查看服务器上有哪些共享文件夹
smbclient //172.16.100.111 #登录
smblient //172.16.100.111/share #登录并进入share这个共享目录中
get 文件名 #下载。下载到当前目录下
put 文件名 #上传
2、本地用户访问
先要创建系统用户,然后将该用户升级成samba用户
usradd 用户名
smbpasswd -a 用户名 #升级成samba用户(设定密码)
pdbedit -a 用户名 #添加samba用户 (新版)
pdbedit -L #查看有哪些samba用户
smbclient -U 用户名 -L IP地址 #查看共享目录
smbclient -U 用户名 //IP地址/文件名
注:windows下文件夹的缓存,虽然我已经将以前访问过的文件夹窗口都关掉了,但在后台还保持着它的连接,通过net use */del 清空文件夹的缓存,把以前后台的连接全部中断。
3、访问控制(在配置文件的global区域添加)
1)hosts allow 和 hosts deny
hosts allow =192.168.1.1,192.168.2. (全部拒绝,添加允许)
hosts deny =192.168.1.1
2)EXCEPT 添加例外
hosts allow =192.168.1. EXCEPT 192.168.1.1
在/etc/smbusers 中添加
zhangsan = zhang
在主配置文件的global区域添加
username map =/etc/samba/smbusers
1、作用:将网络上的共享文件夹映射到本地,当做本地文件夹使用,这样用户就不用每次都要登录了!
2、windows下的实现方法
在文件夹管理窗口的工具下的映射网络驱动器,如下图:
3、Linux下的实现方法
1)在linux下创建一个本地目录,之后将网络共享文件夹挂到本地目录:
mount -t cifs -o username=用户名,password=密码 //服务器地址/共享名 /本地目录
2)如果想让开机自动挂载,则:
修改/etc/fstab文件,添加如下:
//172.16.100.111/public /share cifs defaults,username=zhangsan,password=123 0 0
1、创建3个文档目录:
/var/share/public,存放公共数据
/var/share/training,存放技术培训资料
/var/share/devel,存放项目开发资料
1)将/var/share/public目录共享为public
所有员工可匿名访问,但是只能读取文件,不能写入
2)将/var/share/training目录共享为peixun
只允许管理员admin及技术部的员工只读访问
3)将/var/share/devel/目录共享为kaifa
技术部的员工都可以读取该目录中的文件
但是只有管理员admin及下xdl项目组的员工有写入权限
答案:
[global] workgroup = WORKGROUP server string = SambaServer Version %v log file = /var/log/samba/log.%m security = user max log size = 50 passdb backend =tdbsam load printers = yes cups options = raw #obtain list ofprinters automatically on SystemV [homes] comment = HomeDirectories browseable = no writable = yes [printers] comment = All Printers path =/var/spool/samba browseable = no guest ok = no writable = no printable = yes [public] comment = public path = /var/share/public public = yes [peixun] comment = training path = /var/share/training valid users = admin,@jishubu read only = yes [kaifa] comment = devel path = /var/share/devel valid users = admin,@xdl,@jishubu write list = admin,@xdl