凌峰创科服务平台

CentOS7如何搭建Samba服务器并共享目录?

第一部分:Samba 服务器基础配置

这部分将教你如何快速搭建一个简单的、允许匿名用户访问的共享目录。

CentOS7如何搭建Samba服务器并共享目录?-图1
(图片来源网络,侵删)

安装 Samba

确保你的系统已经更新,然后安装 samba 包。

# 更新系统软件包
sudo yum update -y
# 安装 Samba
sudo yum install samba -y

安装完成后,Samba 的服务 smbnmb 会被创建,但默认是未启动的。

创建共享目录

我们将在 /home 目录下创建一个名为 public_share 的共享目录,并设置适当的权限。

# 创建共享目录
sudo mkdir -p /home/public_share
# 设置目录所有者为 root,组为 samba
sudo chown -R root:samba /home/public_share
# 设置目录权限为 775 (所有者和组成员可读写执行,其他用户可读执行)
sudo chmod -R 775 /home/public_share

配置 Samba

Samba 的主配置文件是 /etc/samba/smb.conf,在修改之前,最好先备份一份。

CentOS7如何搭建Samba服务器并共享目录?-图2
(图片来源网络,侵删)
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

编辑 smb.conf 文件,你可以使用 vinano 等文本编辑器。

sudo vi /etc/samba/smb.conf

在文件末尾添加以下内容,来定义我们的共享 [public_share]

[global]
   # 设置工作组,确保与你的 Windows 工作组一致
   workgroup = WORKGROUP
   # 设置服务器描述,在网络上会显示这个名字
   server string = Samba Server %v
   # 允许客户端查看共享列表
   netbios name = CENTOSSMB
   # 日志文件路径
   log file = /var/log/samba/log.%m
   # 最大日志大小
   max log size = 50
# ======================== 共享定义 ========================
[public_share]
   # 共享的注释说明
   comment = Public Share Directory
   # 共享的路径
   path = /home/public_share
   # 是否允许guest用户访问
   guest ok = yes
   # 将guest用户映射为系统用户nobody
   guest account = nobody
   # 是否允许写入
   writable = yes
   # 新创建的文件/目录的权限掩码
   create mask = 0777
   # 新创建的目录的权限掩码
   directory mask = 0777

配置解释:

  • [global]: 全局设置,影响整个 Samba 服务器。
  • [public_share]: 这是共享的名称,Windows 系统访问时会看到这个名字。
  • path: 共享目录的实际路径。
  • guest ok = yes: 允许匿名用户(guest)访问此共享,无需密码。
  • writable = yes: 允许用户在此共享目录中写入文件。
  • create maskdirectory mask: 设置新创建文件和目录的默认权限。

设置 SELinux 和防火墙

CentOS 7 默认启用 SELinux 和防火墙,这会阻止 Samba 的访问,需要进行相应配置。

CentOS7如何搭建Samba服务器并共享目录?-图3
(图片来源网络,侵删)

临时关闭 SELinux(不推荐,仅用于测试)

# 临时关闭,重启后恢复
sudo setenforce 0

永久关闭 SELinux(不推荐) 编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled,然后重启系统。

正确配置 SELinux(推荐) 这是最安全、正确的方法,我们需要为 Samba 共享目录设置正确的 SELinux 上下文。

# 为共享目录设置正确的 SELinux 上下文
sudo semanage fcontext -a -t samba_share_t "/home/public_share(/.*)?"
# 应用新的 SELinux 上下文
sudo restorecon -R -v /home/public_share
  • samba_share_t 是 Samba 共享文件的标准安全上下文。

配置防火墙

# 永久开放 Samba 服务所需的端口
sudo firewall-cmd --permanent --add-service=samba
# 重新加载防火墙规则使配置生效
sudo firewall-cmd --reload

启动并设置开机自启 Samba 服务

# 启动 Samba 服务
sudo systemctl start smb nmb
# 设置开机自启
sudo systemctl enable smb nmb
# 检查服务状态
sudo systemctl status smb nmb

测试

你的 Samba 服务器已经配置完成。

从 Windows 客户端测试:

  1. 在文件资源管理器的地址栏中,输入 \\<你的CentOS_IP地址>
  2. \\192.168.1.100
  3. 你应该能看到一个名为 public_share 的共享文件夹。
  4. 双击进入,你应该可以无密码地读取和写入文件。

从 Linux 客户端测试: 你可以使用 smbclient 命令行工具进行测试。

# 安装 smbclient (如果还没有)
sudo yum install samba-client -y
# 匿名访问测试
smbclient //localhost/public_share -U guest

成功连接后,会看到 smb: \> 提示符,你可以使用 getputls 等命令来操作文件。


第二部分:创建用户共享目录(需要密码验证)

上面的配置是匿名的,不安全,在实际生产环境中,我们通常希望为不同用户创建私有目录,并通过密码访问。

创建 Samba 用户

Samba 用户必须是系统用户,我们首先创建一个系统用户 sambauser

# 创建系统用户
sudo useradd sambauser
# 为该用户设置一个系统登录密码(可选)
sudo passwd sambauser

使用 smbpasswd 命令为该用户创建一个 Samba 专用的密码。

# -a 选项表示添加一个 Samba 用户
sudo smbpasswd -a sambauser
# 接着输入两次你想要的 Samba 密码

创建用户私有共享目录

# 创建用户私有目录
sudo mkdir -p /home/private_share
# 设置目录所有者为 sambauser
sudo chown -R sambauser:sambauser /home/private_share
# 设置目录权限为 700 (仅所有者可读写执行)
sudo chmod -R 700 /home/private_share

修改 smb.conf 文件

smb.conf 文件中添加一个新的共享定义 [private_share]

[private_share]
   comment = Private Share for sambauser
   path = /home/private_share
   # 不允许匿名访问
   guest ok = no
   # 允许写入
   writable = yes
   # 设置可以访问此共享的用户或组
   valid users = sambauser
   # 新创建的文件/目录的所有者
   force user = sambauser
   # 新创建的文件/目录的组
   force group = sambauser

配置解释:

  • guest ok = no: 禁止匿名访问。
  • valid users = sambauser: 指定只有 sambauser 这个用户可以访问此共享。
  • force user = sambauser: 无论哪个用户登录,在此共享中创建的文件所有者都将是 sambauser,这是一个很好的安全实践,可以防止用户创建不属于自己或组权限的文件。

重启 Samba 服务

sudo systemctl restart smb

测试

从 Windows 客户端测试:

  1. 在文件资源管理器中访问 \\<你的CentOS_IP地址>
  2. 双击 private_share,系统会提示你输入用户名和密码。
  3. 输入 sambauser 和你设置的 Samba 密码。
  4. 登录成功后,你就可以对这个目录进行读写操作了,但其他用户无法看到或访问它。

第三部分:排错与管理

常见问题

  1. 无法访问,提示“找不到网络路径”或“拒绝访问”

    • 检查防火墙:确认 firewall-cmd 已开放 samba 服务。
    • 检查 SELinux:确认 semanage fcontextrestorecon 已正确执行,可以使用 ls -Z /home/public_share 查看上下文是否为 samba_share_t
    • 检查服务状态systemctl status smb,确保服务正在运行。
    • 检查日志/var/log/samba/ 目录下的日志文件是排错的关键,特别是 log.smbd
  2. 权限问题

    • 使用 ls -l 检查共享目录及其内部文件的 Linux 权限和所有者。
    • 如果是用户共享,确保 valid users 设置正确,并且用户密码正确。

常用管理命令

# 添加 Samba 用户
sudo smbpasswd -a <username>
# 删除 Samba 用户
sudo smbpasswd -x <username>
# 修改 Samba 用户密码
sudo smbpasswd <username>
# 列出所有 Samba 用户
sudo pdbedit -L -v
# 查看共享列表
smbclient -L localhost -U <username>
# 测试配置文件语法
testparm -s /etc/samba/smb.conf

通过以上步骤,你已经学会了在 CentOS 7 上配置一个既支持匿名共享也支持用户密码验证的 Samba 服务器。

  • 基础配置:适用于临时文件共享,简单快捷。
  • 用户配置:适用于需要安全、私有访问的场景,是生产环境中的标准做法。
  • 安全要点:SELinux 和防火墙是 CentOS 环境下必须正确配置的两个关键点,也是最常见的排错点。

希望这份详细的教程对你有帮助!

分享:
扫描分享到社交APP
上一篇
下一篇