早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了NFS开源文件共享程序:NFS(NetworkFile System)是一个能够将多台Linux的远程主机数据挂载到本地目录的服务,属于轻量级的文件共享服务,不支持Linux与 Windows系统间的文件共享。
随后在1991年时大学生Tridgwell为了解决Linux与Windows系统之间共享文件的问题,便开发出了SMB协议与Samba服务程序。
SMB(Server Messages Block)协议:实现局域网内文件或打印机等资源共享服务的协议。
当时Tridgwell想要注册SMBServer这个商标,但却被因为SMB是没有意义的字符被拒绝了,经过Tridgwell不断翻看词典,终于找到了一个拉丁舞蹈的名字——SAMBA,而这个热情舞蹈的名字中又恰好包含了SMB(SAMBA),于是这便是Samba程序名字的由来。
Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,实现了Linux与Windows系统间的文件共享。
Samba服务器角色与安全等级:
Samba服务器有3种服务器角色,可以使用server role参数进行指定,分别如下。
standalone:独立服务器模式。在此模式下,用户验证由本机负责,登录用户的口令数据库存储在本机。
member server:成员服务器模式。在此模式下,用户验证由Windows或Samba域控制器负责。
domain controller:域控制器模式。在此模式下,本机为Windows和Samba客户提供登录验证服务。
Samba有3种安全等级,可以使用security参数进行指定,分别如下。
user:由本机负责验证用户及口令(是Samba默认的安全等级)。
domain:验证账户及口令的工作由其他的Windows或Samba域控制器负责。需要使用password server指令指定验证服务器。
ads:验证账户及口令的工作由支持Kerberos验证的Windows活动目录服务器负责。需要使用realm指令指定Kerberos领域。
Samba账户数据库
当设置了user的安全等级后(此为默认设置),将由本地系统对访问Samba共享资源的用户进行认证。Samba使用的账户数据库是与系统账户文件分离的。要通过Samba服务器本身进行用户认证,需要Samba的账户数据库,默认使用TDB格式的口令数据库,初始情况下账户数据库文件并不存在。为了创建Samba的口令数据库文件,管理员可以在添加Samba账户的同时进行创建。
使用smbpasswd命令可以配置Samba账号并设置其口令。
mbpasswd命令的常用方法
smbpasswd -a 增加用户(要增加的用户必须以是系统用户)
smbpasswd -d 冻结用户,就是这个用户不能在登录了
smbpasswd -e 恢复用户,解冻用户,让冻结的用户可以在使用
smbpasswd -n 把用户的密码设置成空.
要在global中写入 null passwords -true
smbpasswd -x 删除用户
samba服务配置文件各参数含义:
[global] | #全局参数。 | |
workgroup = MYGROUP | #工作组名称。 | |
server string = Samba Server Version %v | #服务器介绍信息,参数%v为显示SMB版本号。 | |
log file = /var/log/samba/log.%m | #定义日志文件存放位置与名称,参数%m为来访的主机名。 | |
max log size = 50 | #定义日志文件最大容量为50Kb。 | |
security = user | #安全验证的方式,总共有4种。 | |
#share:来访主机无需验证口令,更加方便,但安全性很差。 | ||
#user:需由SMB服务验证来访主机提供的口令后才可建立访问,更加的安全。 | ||
#server:使用独立的远程主机验证来访主机提供的口令(集中管理帐号)。 | ||
#domain:使用PDC来完成验证 | ||
passdb backend = tdbsam | #定义用户后台的类型,共有3种。 | |
#smbpasswd:使用SMB服务的smbpasswd命令给系统用户设置SMB密码。 | ||
#tdbsam:创建数据库文件并使用pdbedit建立SMB独立的用户。 | ||
#ldapsam:基于LDAP服务进行帐户验证。 | ||
load printers = yes | #设置是否当Samba服务启动时共享打印机设备。 | |
cups options = raw | #打印机的选项 | |
[homes] | #共享参数 | |
comment = Home Directories | #描述信息 | |
browseable = no | #指定共享是否在“网上邻居”中可见。 | |
writable = yes | #定义是否可写入操作,与"read only"相反。 | |
[printers] | #打印机共享参数 | |
comment = All Printers | ||
path = /var/spool/samba | #共享文件的实际路径(重要)。 | |
browseable = no | ||
guest ok = no | #是否所有人可见,等同于"public"参数。 | |
writable = no | ||
printable = yes |
标准的Samba共享参数是这样的:
参数 | 作用 |
[linuxprobe] | 共享名称为linuxprobe |
comment = Do not arbitrarily modify the database file | 警告用户不要随意修改数据库 |
path = /home/database | 共享文件夹在/home/database |
public = no | 关闭所有人可见 |
writable = yes | 允许写入操作 |
案例1:
为所有用户配置只读共享和读写共享
服务器端配置:
Windows下连接samba服务器:
进入public目录创建文件:
服务器上可以看到新建的文件及文件的所属组和所属用户
进入cdrom目录,尝试创建文件被拒绝。
Windows下清空连接缓存,重新连接服务器,使用smbuser2登录。清空缓存需要在cmd里执行net use * /del指令。
此条命令运行后,会有一定的延时才能成功。
net use * /del /y---解决访问共享时提示多重连接的问题
解决不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接
用net use命令可以查看你当前与网络资源的连接,例如驱动器映射、IPC连接。使用该命令后,应该可以看到你和有资源连接。然后可以用net use * /del /y命令中断开所有连接。最后,你再次访问,应该就不会有这个提示了
删除已有的连接,避免出现“一个用户使用...多重连接”的问题。
net use * /delete
如果提示“列表是空的”,表示当前没有任何关联连接;如果提示“您有如下远程连接... 继续运行会取消连接”,输入“Y”或者“y”
此条命令运行后,会有一定的延时才能成功。
进入public目录,创建文件user2f2.txt
服务器上可以看到新建的文件及文件的所属用户和所属组
删除文件user1f1.txt失败(sticky起的作用),可以删除自己创建的文件。
为指定用户配置samba读写共享
检测配置文件语法,并使其生效。
为指定用户和组配置samba共享
资料来源: