Samba文件服务器

TOC

了解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