Linux中Samba服务配置与使用指南

Linux中Samba服务配置与使用指南

一、Samba服务核心组件

进程 功能描述 端口
smbd 管理共享目录/打印机、认证、SMB资源共享 139, 445
nmbd NetBIOS域名解析、共享资源浏览服务 137, 138

二、Samba工作原理

  1. 连接请求
    客户端发送协议版本请求 → 服务器验证请求有效性(失败则终止连接)。
  2. 协议协商
    服务器返回支持的协议版本和端口信息。
  3. 认证阶段
    客户端提交认证信息 → 服务器验证(失败则终止连接)。
  4. 资源访问
    认证成功后,客户端通过命令访问共享资源。

三、独立服务器选项

1. security 认证模式
参数值 描述
user 使用Samba自有数据库验证用户身份
share 无需密码,任何人可直接访问共享资源
server 由其他SMB服务器代理验证(已弃用)

2. passdb backend 用户数据库类型
参数值 描述 存储位置
tdbsam 使用数据库文件 passdb.tdp /etc/samba/passdb.tdb
ldapsam 使用LDAP方式进行验证 外部LDAP服务器
smbpasswd 使用 smbpasswd 为系统用户设置samba密码 /etc/samba/smbpasswd

四、共享目录设置常见参数

参数名 描述 可选值 默认值 使用示例/说明
comment 共享描述信息 任意字符串 comment = this is a directory
path 定义具体的共享目录 共享目录的绝对路径 必填项path = /smbshare
browseable 是否可以浏览 yes / no yes browseable = no(隐藏共享)
read only 共享权限是否只读 yes / no yes writable冲突,优先级低于writable
writable 共享权限是否可写 yes / no no writable = yes(开启写权限)
write list 具体读写共享权限的用户列表 用户或组名 write list = username1, @groupname1
guest ok 是否允许匿名 yes / no no guest ok = yes
valid users 可以访问共享的samba用户列表 用户或组名 所有用户 valid users = username2, @groupname2
public 是否为公共共享 yes / no no public = yes

五、Samba服务部署流程

1、Samba服务器端

前提

  1. 已经配置好本地的 yum 仓库
  2. 已经禁用 firewall(防火墙)
  3. 已经禁用 selinux
  1. 下载软件包(samba,samba-client)

    bash 复制代码
    yum -y install samba samba-client		# 下载 samba samba-client
  2. 创建共享目录和测试文件

    bash 复制代码
    mkdir /smbshare							# 创建共享目录
    
    touch /smbshare/file1					# 在共享目录下创建测试用文件
    touch /smbshare/file2
  3. 创建并设置为samba用户

    将用户设置为不可登录状态,防止系统用户直接登录系统或通过ssh登录系统

    bash 复制代码
    useradd -s /sbin/nologin rose			# 创建用户,设置为不可登录状态
    useradd -s /sbin/nologin marry
    
    smbpasswd -a rose						# 设置 samba 用户
    smbpasswd -a marry
    
    pdbedit -L								# 查看 samba 用户
  4. 设置用户权限

    bash 复制代码
    setfacl -m u:rose:r-x /smbshare/		# 设置用户 rose 对 /smbshare 的权限为读,执行
    setfacl -m u:marry:rwx /smbshare/		# 设置用户 marry 对 smbshare 的权限为读写,执行

    注意:应当要保证samba用户的访问权限和服务设置的权限一致

    保证用户访问权限与服务设置权限一致,是系统安全和稳定运行的核心原则

  5. 编辑配置文件(/etc/samba/smb.conf)

    bash 复制代码
    vim /etc/samba/smb.conf					# 编辑配置文件
    
    	[myshare]							# 名称,可自定义
            	path = /smbshare			# 路径
            	browseable = yes			# 可以浏览
            	valid users = rose,marry	# 可访问用户列表
            	write list = marry			# 可读写用户列表
            	
    systemctl restart smb nmb				# 重启服务
    systemctl enable smb nmb				# 下次开机自启

2、Samba客户端使用

samba对应的文件系统:

bash 复制代码
cd /usr/lib/modules/3.10.0-957.el7.x86_64/kernel/fs/cifs/
  1. 下载软件包(samba-client cifs-utils)

    bash 复制代码
    yum -y install samba-client cifs-utils		# 下载 samba-client cifs-utils
  2. 匿名用户浏览 samba 服务器共享资源列表

    bash 复制代码
    smbclient -L 192.168.100.10					# 匿名访问,直接回车,不需要输入密码
  3. 匿名用户浏览 samba 服务器共享资源(无法访问)

    bash 复制代码
    smbclient //192.168.100.10/myshare			# 匿名用户不需要密码
  4. samba 用户 rose(只读)浏览 samba 服务器共享资源

    bash 复制代码
    smbclient //192.168.100.10/myshare -U rose	# 输入 rose 的密码,只读权限
  5. samba 用户 marry(读写)浏览 samba 服务器共享资源

    bash 复制代码
    smbclient //192.168.100.10/myshare -U marry	# 输入 marry 密码,读写权限
  6. 将samba服务器共享资源临时挂载到本地目录

    bash 复制代码
    mount -t cifs -o username=marry //192.168.100.10/myshare /smbmount/
    # 交互式挂载
    
    mount -t cifs -o username=marry,password=marry,sec=ntlmssp //192.168.100.10/myshare /smbmount/
    # 非交互式挂载

    注意 :重新挂载前,先使用 umonut 命令卸载挂载

  7. 将samba服务器共享资源永久挂载到本地目录

    bash 复制代码
    vim /etc/fstab		# 编辑配置文件
    
    	//192.168.100.10/myshare /smbmount cifs username=rose,password=rose,sec=ntlmssp 0 0
    	# 路径 挂载路径 类型 用户名,密码,安全认证选项 0 0
    	
    mount -a			# 根据配置文件自动挂载所有文件系统
  8. 将samba服务器共享资源永久挂载到本地目录,多用户挂载

    bash 复制代码
    vim /etc/fstab		# 编辑配置文件
    
    	//192.168.100.10/myshare /smbmount cifs multiuser,username=rose,password=rose,sec=ntlmssp 0 0
    	# 路径 挂载路径 类型 多用户挂载选项,用户名,密码,安全认证选项 0 0
    	
    mount -a			# 根据配置文件自动挂载所有文件系统
  9. 普通用户临时切换Samba权限

    bash 复制代码
    su - yanyvhang								# 切换用户为 yanyvhang
    cifscreds add 192.168.100.10 -u marry		# 使用 marry 凭证

    普通用户 yanyvhang 使用 cifscreds 命令向 samba 服务器提交 samba 用户 marry 的凭证

    此时普通用户 yanyvhang 临时具有 samba 用户 marry 的权限,实现其对 myshare 共享具有 marry 的读写权限