Linux与windows系统之间的文件共享方案-Samba

Linux与Windows系统之间的文件共享方案-Samba

1. samba 介绍

samba 是一种开源软件套件,允许 Linux 和 Unix 系统与 Windows 系统进行文件和打印共享。它实现了 SMB/CIFS 协议,能够使非 Windows 系统出现在 Windows 网络中,并能够与 Windows 系统共享文件和资源。samba 还支持域控制器功能,使其能够管理 Windows 域中的计算机和用户。

2. samba 安装

2.1 在 Ubuntu/Debian 上安装 samba

  1. 更新软件包列表:
sudo apt update
  1. 安装 samba:
sudo apt install samba
  1. 检查安装是否成功:
sudo smbstatus

2.2 在 CentOS/RHEL 上安装 samba

  1. 更新软件包列表:
sudo yum update
  1. 安装 samba:
sudo yum install samba
  1. 检查安装是否成功:
sudo smbstatus

# 本文部署的版本
[root@smb ~]# smbstatus

samba version 4.10.16
PID     Username     Group        Machine                 Protocol Version  Encryption           Signing
---------------------------------------------------------------------------------------- ---------------------

Service      pid     Machine       Connected at           Encryption   Signing
---------------------------------------------------------------------------------------------

No locked files

说明:

Centos/RHEL镜像源仓库中的samba 包仅支持将 Samba 作为域成员和 NT4 PDC 或 BDC 使用,不提供用于将 Samba 作为 AD DC 运行的包。作为替代方案可选如下:

  • 从源代码构建 Samba。有关详细信息,请参见从源代码构建 Samba
  • 使用来自可信来源的支持 AD 的第三方包。

3. samba 实战

3.1 配置共享目录

  1. 创建共享文件夹:
sudo mkdir -p /srv/samba/public
sudo mkdir -p /srv/samba/share
  1. 设置目录权限:
# 创建系统用户和组,后续用于samba认证
sudo groupadd smbgroup -g 6000
sudo useradd smbuser -u 6000 -g 6000 -s /sbin/nologin -d /dev/null

# 设置权限
sudo chmod -R 2777 /srv/samba/public
sudo chown -R smbuser:smbgroup /srv/samba/public

sudo chmod -R 2777 /srv/samba/share
sudo chown -R smbuser:smbgroup /srv/samba/share
  1. 编辑 samba 配置文件 /etc/samba/smb.conf,添加共享设置:
[global]
        workgroup = samba
        security = user
        passdb backend = tdbsam
        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
        # global区域增加下面配置,配置无账号密码访问
        map to guest = bad user	# global区域增加配置

...

# 增加public共享,无需认证
[public]
        path = /srv/samba/public
	    read only = No
        # 配置无账号密码访问
        guest ok = yes
        guest only = yes
 
# 增加share共享,需要用户名密码认证
[share]
        path = /srv/samba/share
        browseable = No
        read only = No
        valid users = @smbgroup
        write list = @smbgroup
        read list = @smbgroup
        create mode = 0774
        force create mode = 0774
        force directory mode = 0774

关于smb.conf 配置文件内容的更多选项和说明可以参考示例文件/etc/samba/smb.conf.example

  1. 使用命令testparm测试配置文件是否正确:
# 输入命令后,回车进行检查。
[root@smb ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        map to guest = Bad User
        printcap name = cups
        security = USER
        workgroup = samba
        idmap config * : backend = tdb
        cups options = raw


[homes]
        browseable = No
        comment = Home Directories
        inherit acls = Yes
        read only = No
        valid users = %S %D%w%S


[printers]
        browseable = No
        comment = All Printers
        create mask = 0600
        path = /var/tmp
        printable = Yes


[print$]
        comment = Printer Drivers
        create mask = 0664
        directory mask = 0775
        force group = @printadmin
        path = /var/lib/samba/drivers
        write list = @printadmin root


[public]
        guest ok = Yes
        guest only = Yes
        path = /srv/samba/public
        read only = No


[share]
        browseable = No
        create mask = 0774
        force create mode = 0774
        force directory mode = 0774
        path = /srv/samba/share
        read list = @smbgroup
        read only = No
        valid users = @smbgroup
        write list = @smbgroup
  1. 重启 samba 服务:
# 重启服务
sudo systemctl restart smb

# 查看服务状态
sudo systemctl status smb

3.3 创建 samba 用户

如果需要进行身份验证,可以为用户创建 samba 账户:

# 创建samba用户,该用户需要先在系统用户中创建。
sudo smbpasswd -a smbuser	# 设置密码

# 启用用户
sudo smbpasswd -e smbuser
Enabled user smbuser.

3.4 关于samba的防火墙配置

确保你的防火墙允许 samba 的流量。

对于 ufw(适用于 Ubuntu):

sudo ufw allow 'samba'

对于 firewalld(适用于 RHEL/CentOS):

sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

说明:

samba使用的端口和协议,确保流量经过的防火墙放行。

  • tcp/139,445端口;
  • udp/137,138端口;

3.5 在 客户端访问 samba 共享

3.5.1 windows客户端中访问samba共享

打开文件资源管理器或者win+r运行窗口。

访问share共享,认证后进入:\\samba服务器ip\share

访问public共享,无需认证:\\samba服务器ip\public

3.5.2 linux客户端中访问samba共享

linux下访问samba共享需要安装相关客户端:

# yum
sudo yum install -y cifs-utils samba-client

# apt
sudo apt install cifs-utils smbclient
  1. 通过smbclient访问:
# 通过smbaclient挂载,smbclient //<sambaserver-ip>/<share-dir> -U <sambausername>
[root@client ~]# smbclient //10.252.216.2/share -U smbuser
Enter samba\smbuser's password:		# 输入密码验证
Try "help" to get a list of possible commands.

[root@client ~]# smbclient //10.252.216.2/public
Enter samba\root's password:		# 直接回车进入
Try "help" to get a list of possible commands.
smb: \> list
0:      server=10.252.216.2, share=public
smb: \> dir
  .                                   D        0  Fri Sep  6 10:15:18 2024
  ..                                  D        0  Fri Sep  6 09:42:09 2024
  asdf                                D        0  Fri Sep  6 09:57:34 2024
  aaa.txt                             A        0  Fri Sep  6 09:57:39 2024
  bbb.txt                             A        0  Fri Sep  6 10:15:17 2024

                41921540 blocks of size 1024. 37915996 blocks available
smb: \> mkdir test
smb: \> ls
  .                                   D        0  Fri Sep  6 10:32:23 2024
  ..                                  D        0  Fri Sep  6 09:42:09 2024
  asdf                                D        0  Fri Sep  6 09:57:34 2024
  aaa.txt                             A        0  Fri Sep  6 09:57:39 2024
  bbb.txt                             A        0  Fri Sep  6 10:15:17 2024
  test                                D        0  Fri Sep  6 10:32:23 2024
smb: \> exit
  1. 通过mout挂载

通过mount命令行直接挂载使用:

# 访问需要认证的共享
sudo mkdir /share
sudo mount.cifs //10.252.216.2/share /share -o username=smbuser,password=smbuser	# 命令行传递认证信息
# 通过认证文件传递
sudo vi /.smb-credentials.txt	
username=xxx	# 写入用户名和密码
password=xxx
sudo chmod 644 /.smb-credentials.txt # 设置权限
sudo mount.cifs //10.252.216.2/share /share -o credentials=/.smb-credentials.txt

# 无认证共享访问挂载仍然会提示输入密码,直接回车即可。
sudo mkdir /public
sudo mount.cifs //10.252.216.2/public /public
  1. 通过fstab文件实现开机自动挂载:
[root@client share]# cat /etc/fstab
...
//10.252.216.2/share  /share cifs _netdev,user,iocharset=utf8,nofail,credentials=/.smb-credentials.txt 0 0
//10.252.216.2/public /public cifs _netdev,user,guest,iocharset=utf8,nofail 0 0

挂载选项说明:

  • _netdev: 表示此挂载依赖于网络,确保网络可用时才尝试挂载,避免在系统启动前挂载时产生问题。
  • user :表示允许普通用户(非 root 用户)执行挂载操作。
  • guest: 以匿名用户的身份挂载(用于无需认证的 samba 共享)。
  • nofail :表示如果开机时挂载失败时系统不会进入紧急维护模式,如果已经设置了 noauto,则无需设置。
  • credentials: 用于需要认证的samba共享,配置认证文件路径。
  • username:用于认证的用户名,username=your_username,与credentials选项配置一种即可。
  • password:用于认证的密码,password=your_password,与credentials选项配置一种即可。
  • noauto: 表示不在系统启动时或通过 mount -a 时自动挂载这些文件系统,当配置改选项后,需要手动mount挂载。

修改完 fstab 后可以通过 mount -a 重新挂载或者直接重启进行验证。

linux下除了上述的挂载方式之外,还可以借助autofs等工具实现自动挂载,有兴趣的可以自行研究。

3.6 查看samba服务器状态

[root@smb ~]# smbstatus

samba version 4.10.16
PID     Username     Group        Machine                                   Protocol Version  Encryption           Signing
----------------------------------------------------------------------------------------------------------------------------------------
77753   smbuser      smbgroup     10.252.254.190 (ipv4:10.252.254.190:56914) SMB3_11           -                    partial(AES-128-CMAC)

Service      pid     Machine       Connected at                     Encryption   Signing
---------------------------------------------------------------------------------------------
share        77753   10.252.254.190 Fri Sep  6 09:51:28 AM 2024 CST  -            -
IPC$         77753   10.252.254.190 Fri Sep  6 09:57:24 AM 2024 CST  -            -
public       77753   10.252.254.190 Fri Sep  6 09:57:32 AM 2024 CST  -            -

Locked files:
Pid          User(ID)   DenyMode   Access      R/W        Oplock      SharePath   Name   Time
--------------------------------------------------------------------------------------------------
77753        6000       DENY_NONE  0x100081    RDONLY     NONE        /srv/samba/share   .   Fri Sep  6 09:57:24 2024
77753        99         DENY_NONE  0x100081    RDONLY     NONE       /srv/samba/public   .   Fri Sep  6 09:57:40 2024

备注:

如果访问失败,除了samba服务、配置、网络检查之外,确保samba服务器关闭selinux或者AppArmor,selinux开启会影响samb客户端访问。

4. 相关资料

  1. Samba 官方文档主页
  2. Samba 安装手册
  3. Samba 参考手册
  4. Samba Wiki 用户文档
  5. SELinux/samba - Fedora Project Wiki
  6. Samba 配置示例
  7. Samba 性能调整和最佳实践
  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值