Samba文件服务器
了解Samba服务
什么是Samba服务?
Samba是目前比较流行了文件服务器之一,能够将Linux本机的某个磁盘空间共享出来,其他机器能够访问Linux共享出来的地址。
主要作用: 把Linux机器变成Windows/macOS/其他Linux都能访问的文件共享与打印服务器,支持权限控制、审计、配额、与AD域集成、回收站等高级功能。
Samba的端口:
nmbd:137,138(NetBIOS协议) smbd:139(SMB协议) 445(CIFS协议)
Samba服务搭建
安装Samba所需要的软件包
- samba-3.6.9-164.el6.x86_64:这个软件提供了smb服务所需的各项服务程序
- samba-common-3.6.9-164.el6.x86_64:这个工具主要提供的是samba的服务端和客户端都需要的数据,包括samba的主要配置文件(smb.conf),语法检验指令(testparm)等等。
- samba-client-3.6.9:这个软件提供了当linux作为Samba客户端时,所需要的工具指令
- samba4-libs-4.0.0-58.el6.rc4.x86_64:库包
- samba-winbin-clients-3.6.9-164.el6.rc4.x86_64:支持Windows功能
- samba-winbin-3.6.9-164.el6.x86_64:支持Windows功能
应用安装
CentOS系统安装
yum -y install samba samba-client
Ubuntu系统安装
apt -y install samba samba-client
Samba配置应用
安全模式选项详解
security = user(这里指定samba的安全等级)
关于安全等级有四种:
- share:用户不需要账户及密码即可登录samba服务器
- user:由提供服务的samba服务器负责检查账户及密码(默认)
- server:检查账户及密码的工作由另一台windows或samba服务器负责
- domain:指定windows域控制服务器来验证用户的账户及密码
配置文件详解
Samba配置文件:/etc/samba/smb.conf
一个简单的配置文件,如下所示:
[global]
workgroup = lalala # 工作组名称
serverstring = Samba Server # 主机名称,跟hostname不是一个概念,在同一个组中,netbios name必须唯一
# 字符集
unix charset = UTF-8
dos charset = CP850
log file = /var/log/samba/log.%m # 日志文件的存储文件名,%m代表的是client端Internet主机名,就是hostname
max log size = 100 # 日志文件最大的大小为100Kb
# 访问控制(可选:限制网段)
# interfaces = lo eth0 192.168.1.0/24 # 绑定网卡和网段
# bind interfaces only = yes # 开启绑定网卡和网段功能
# hosts allow = 192.168.1.127 # 允许该ip访问
# hosts deny = 192.168.1.127 # 拒绝该ip访问
security = user # 指定samba的安全等级
passdb backend = tdbsam # 打印机加载方式
load printer = no # 不加载打印机
[public]
comment = Temporary file space # 简单的解释,内容无关紧要
path = /data/public
browsable = yes # 可以被所有用户浏览到资源名称
read only = no # 该共享目录可以读写写,等同writable = yes
guest ok = yes # 可以让用户随意登录
Samba服务管理
# 启动samba服务
systemctl start smbd
# 设置自启动samba服务
systemctl enable smbd
# 查看samba服务状态
systemctl status smbd
测试阶段
查询网上邻居的数据信息,并使用客户端连接
smbclicent -L
smbclicent -U zhangsan //192.168.1.100/data/test
挂载使用共享
mount -o username=zhangsan //192.168.1.100/data/test /test
还可以使用Windows电脑访问,要求保持网络能通,账号密码使用Linux系统账号即可。
账户与权限管理
Samba依赖本地(或域)身份。先有系统用户,再转为Samba用户。
Samba账户管理工具
pdbedit工具
# 添加用户为共享用户
pdbedit -a -u 【用户名】
# 查询已存在的共享用户
pdbedit -L
smbpasswd工具
smbpasswd 【选项】【用户名】
命令选项:
-h:显示命令的帮助信息。
-a:添加用户。
-d:禁用某个用户。
-e:启用某个用户。
-n:设置用户密码为空。
-x:删除某个用户
添加用户
1.首先,先创建系统用户
useradd -m -G fileshare test
passwd test
2.添加系统用户为共享用户
smbpasswd -a test
smbpasswd -e smbpasswd
用户映射配置
为什么要做用户映射?
这样做安全,添加虚拟用户登录,让别人不知道自己账户名。
开始用户映射配置
创建用户文件(可以是任何创建的文件):
# /etc/samba/smbusers
# 把Windows的boss映射为Linux的root用户
root = boss administrator admin
# 将user1、user2映射成Linux的test用户
test = user1 user2
修改配置文件,添加username map配置。
[global]
......
username map = /etc/samba/smbusers
特别注意:
1.客户端用user1登录Samba时,Samba 会把他映射成 Linux用户test,然后以 test的身份访问文件。
2.映射到 root 要非常谨慎,几乎等于开后门。
高级配置应用
用户白名单
[white]
path = /data/white
read only = yes
valid users = zhangsan,lisi,wangwu # 允许访问的用户或组(组前加 @)
write list = zhangsan # 但允许写的用户名单
如果是拒绝的话就是用invalid users = zhangsan,lisi,wangwu。
温馨提示:如果写了
read only = no或者writable = yes就等于所有人都能写了,那么配置write list也就没有用了。
部门读写(组控权限)
[projects]
path = /data/projects
valid users = @fileshare # 仅组内可访问
read only = no
create mask = 0664 # 新文件权限
directory mask = 2775 # 新目录权限(含 setgid)
force group = fileshare # 统一属组
inherit permissions = yes
带回收站功能
[teamdocs]
path = /data/teamdocs
valid users = @fileshare
read only = no
vfs objects = recycle
recycle:repository = .recycle/%U
recycle:keeptree = yes
recycle:versions = yes
recycle:touch = yes
recycle:maxsize = 0
AD域集成使用
[global]
security = ads
realm = EXAMPLE.COM
workgroup = EXAMPLE
winbind use default domain = yes
idmap config * : backend = tdb
idmap config * : range = 3000-7999
idmap config EXAMPLE : backend = rid
idmap config EXAMPLE : range = 10000-999999
template shell = /bin/bash