欢迎光临
我们一直在努力

搭建Samba共享Linux和Windows文件夹

配置Linux服务端

1. 安装服务端

1.1 CentOS安装

  1. # 安装服务端
  2. $ yum install -y samba samba-client

1.2 Debian安装

  1. # 安装服务端
  2. $ apt-get install -y samba

2. 创建共享目录

  1. # 创建文件夹
  2. $ mkdir -p /file
  3. # 给予文件夹权限
  4. $ chmod 755 -R /file/

3. 编辑Samba配置文件

Samba完整注释内容在 /etc/samba/smb.conf.example 这个模板文件中,而 /etc/samba/smb.conf 只保留生效的配置参数

  1. $ vim /etc/samba/smb.conf
  2. # See smb.conf.example for a more detailed config file or
  3. # read the smb.conf manpage.
  4. # Run 'testparm' to verify the config is correct after
  5. # you modified it.
  6. [global] # 全局设置
  7. workgroup = SAMBA # 工作组
  8. security = user # 这里指定samba的安全等级。关于安全等级有四种。share:用户不需要账户及密码即可登录samba服务器;user:由提供服务的samba服务器负责检查账户及密码(默认);server:检查账户及密码的工作由另一台windows或samba服务器负责;domain:指定windows域控制服务器来验证用户的账户及密码。
  9. #map to guest=Bad User # 添加此项,开启免密码认证
  10. passdb backend = tdbsam # passdb backend (用户后台),samba有三种用户后台:smbpasswd, tdbsam和ldapsam。smbpasswd:该方式是使用smb工具smbpasswd给系统用户(真实用户或者虚拟用户)设置一个Samba 密码,客户端就用此密码访问Samba资源。smbpasswd在/etc/samba中,有时需要手工创建该文件。tdbsam:使用数据库文件创建用户数据库。数据库文件叫passdb.tdb,在/etc/samba中。passdb.tdb用户数据库可使用smbpasswd –a创建Samba用户,要创建的Samba用户必须先是系统用户。也可使用pdbedit创建Samba账户。pdbedit命令可参考 pdbedit --help
  11. printing = cups
  12. printcap name = cups
  13. load printers = yes # load printers 和 cups options 两个参数用来设置打印机相关。
  14. cups options = raw
  15. #hosts allow = 192.168.20.4 # 用来设置允许的主机,如果在前面加”;”则表示允许所有主机
  16. #netbios name = MYSERVER # 设置出现在“网上邻居”中的主机名
  17. #log file = /var/log/samba/%m.log #定义samba的日志,这里的%m是上面的netbios name
  18. #max log size = 50 # 指定日志的最大容量,单位是K
  19. [homes] # 该部分内容共享用户自己的home目录,也就是说,当用户登录到samba服务器上时实际上是进入到了该用户的home目录,用户登陆后,共享名不是homes而是用户自己的标识符,对于单纯的文件共享的环境来说,这部分可以注视掉。
  20. comment = Home Directories
  21. valid users = %S, %D%w%S
  22. browseable = No
  23. read only = No
  24. inherit acls = Yes
  25. [printers] # 该部分内容设置打印机共享。
  26. comment = All Printers
  27. path = /var/tmp
  28. printable = Yes
  29. create mask = 0600
  30. browseable = No
  31. [print$]
  32. comment = Printer Drivers
  33. path = /var/lib/samba/drivers
  34. write list = @printadmin root
  35. force group = @printadmin
  36. create mask = 0664
  37. directory mask = 0775
  38. [file] # 共享目录显示的名称
  39. comment=hello guest #描述信息(可以自定义)
  40. path=/file #共享的目录
  41. browseable=yes #共享目录是否对所有人可见
  42. guest ok=no #允许匿名用户访问
  43. #writable=yes #匿名用户可写
  44. #public=yes #所有人可见
  45. writable=yes #可写

4. 创建一个用户并转为Samba用户

  1. # 创建一个系统用户
  2. $ useradd -M -s /sbin/nologin guest
  3. # 将系统用户转化成Samba用户
  4. $ pdbedit -a guest
  5. new password:
  6. retype new password:
  7. Unix username: guest
  8. NT username:
  9. Account Flags: [U ]
  10. User SID: S-1-5-21-2500030998-3215874083-1041928306-1001
  11. Primary Group SID: S-1-5-21-2500030998-3215874083-1041928306-513
  12. Full Name:
  13. Home Directory: \\localhost\guest
  14. HomeDir Drive:
  15. Logon Script:
  16. Profile Path: \\localhost\guest\profile
  17. Domain: LOCALHOST
  18. Account desc:
  19. Workstations:
  20. Munged dial:
  21. Logon time: 0
  22. Logoff time: Wed, 06 Feb 2036 10:06:39 EST
  23. Kickoff time: Wed, 06 Feb 2036 10:06:39 EST
  24. Password last set: Mon, 05 Nov 2018 06:23:37 EST
  25. Password can change: Mon, 05 Nov 2018 06:23:37 EST
  26. Password must change: never
  27. Last bad password : 0
  28. Bad password count : 0
  29. Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  30. # 列出所有Samba用户
  31. $ pdbedit -L
  32. guest:1001:

5. 重启SMB服务,并设置开机自启动

  1. $ systemctl restart smb
  2. $ systemctl enable smb

6. 开启Samba端口

  1. # 开启137、138、139、445端口
  2. $ firewall-cmd --add-port=137/udp --zone=public --permanent
  3. $ firewall-cmd --add-port=138/udp --zone=public --permanent
  4. $ firewall-cmd --add-port=139/tcp --zone=public --permanent
  5. $ firewall-cmd --add-port=445/tcp --zone=public --permanent
  6. $ firewall-cmd --reload
  7. # 或者直接关闭防火墙
  8. $ systemctl stop firewalld
  9. $ systemctl disable firewalld

配置Linux客户端

1. 安装Linux客户端工具

  1. $ yum install -y samba-client

2. 登录用户并扫描资源

  1. # 查看共享目录
  2. $ smbclient -U guest -L //192.168.20.4
  3. # 查看共享文件
  4. $ smbclient -U guest //192.168.20.4/file

3. 挂载Samba

  1. # [文件格式] [/smb_file共享目录][挂载到/mnt] [username=smb用户名][password=smb密码]
  2. $ mount -t cifs //192.168.20.4/file /file -o username=guest,password=guest
  3. $ df -h
  4. 文件系统 容量 已用 可用 已用% 挂载点
  5. //192.168.20.4/file 50G 13G 38G 26% /file

配置Windows客户端

1. 开启SMB配置

Win+R 输入control 打开控制面板

在控制面板内找到 程序 -> 启用或关闭windows功能 然后勾选上SMB相关功能

自动草稿

2. 挂载Samba

在我的电脑中选择添加映射网络驱动器

自动草稿

输入之前配置过的Samba地址和配置的账户

自动草稿

完事~

自动草稿

docker-compose配置Samba服务端

1. 安装并启动docker

1.1 安装docker

1.1.1 CentOS安装docker

更新软件源

  1. $ yum update -y

卸载旧的docker(按需)

  1. $ yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

安装yum工具

  1. $ yum install -y yum-utils

添加docker源

  1. $ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装docker及相关插件

  1. $ yum install -y docker-ce docker-ce-cli containerd.io

启动docker并设为开机自启

  1. $ systemctl start docker && systemctl enable docker

创建个人网络

  1. $ docker network create veddy-base-net

配置docker国内镜像源

  1. $ cat <<EOF>> /etc/docker/daemon.json
  2. {
  3. "registry-mirrors": ["https://t0gam4iy.mirror.aliyuncs.com"]
  4. }
  5. EOF

重启docker

  1. $ systemctl restart docker

下载docker-compose

  1. $ wget -O /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64

给与docker-compose权限

  1. $ chmod 777 /usr/local/bin/docker-compose

查看docker以及docker-compose版本

  1. $ docker --version
  2. Docker version 20.10.17, build 100c701
  3. $ docker-compose version
  4. Docker Compose version v2.6.1

2. docker-compose配置

  1. version: "3.7"
  2. networks:
  3. veddy-base-net:
  4. driver: bridge
  5. services:
  6. samba:
  7. image: dperson/samba
  8. container_name: samba
  9. restart: on-failure
  10. networks:
  11. - veddy-base-net
  12. command: '
  13. -u "guest;guest123"
  14. -s "shared;/shared;no;no;no;guest"'
  15. volumes:
  16. - /shared:/shared
  17. ports:
  18. - 137:137/udp
  19. - 138:138/udp
  20. - 139:139/tcp
  21. - 445:445/tcp

Samba更改默认端口

1. 服务端配置

  1. # 修改Samba配置文件
  2. $ vim /etc/samba/smb.conf
  3. # 在[global]选项下加入以下内容
  4. smb ports = 1314
  5. # 保存配置后重启Samba
  6. $ systemctl restart smb

2. windows客户端使用端口转发

客户端通过访问本地445然后将端口转发成访问远程端的8445端口

  1. netsh interface portproxy add v4tov4 listenport=445 listenaddress=127.0.0.1 connectport=8445 connectaddress=192.168.20.4

后续连接至本地445就可以了 我的后缀是/file你们改成自己的即可

自动草稿

Samba Example示例文件翻译

部分参数注释为机翻 我也不太清楚具体作用 还请各位大佬加以指正

  1. # ======================= 全 局 参 数 =======================
  2. [global]
  3. # ----------------------- 网络相关选项 -----------------------
  4. # 设定Samba所要加入的工作组或者域
  5. workgroup = WORKGROUP
  6. # 设定Samba Server的注释 %v代表版本 一般不建议显示版本号 以防针对某一版本漏洞进行攻击
  7. server string = Samba Server Version %v
  8. # 设置Samba Server的NetBIOS名称 用于指定不与主机名绑定的服务器名称 最多15个字符 如果不填 则默认会使用该服务器的DNS名称的第一部分 netbios name和workgroup名字不要设置成一样
  9. netbios name = MYSERVER
  10. # 设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址
  11. interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
  12. # 表示允许连接到Samba Server的客户端 多个参数以空格隔开 可以用一个IP表示 也可以用一个网段表示
  13. hosts allow = 127. 192.168.12. 192.168.13.
  14. # ----------------------- 日志记录选项 -----------------------
  15. # 日志路径 %m 是一个变量 标识Netbios主机名
  16. log file = /var/log/samba/log.%m
  17. # 日志最大大小 单位是kb
  18. max log size = 50
  19. # ---------------------- 独立服务器选项 ----------------------
  20. # 指定samba的安全等级 关于安全等级有四种
  21. # share:用户不需要账户及密码即可登录samba服务器
  22. # user:由提供服务的samba服务器负责检查账户及密码(默认)
  23. # server:检查账户及密码的工作由另一台windows或samba服务器负责
  24. # domain:指定windows域控制服务器来验证用户的账户及密码。
  25. security = user
  26. # passdb backend(用户后台)samba有三种用户后台:smbpasswd, tdbsam和ldapsam
  27. # smbpasswd:该方式是使用smb工具smbpasswd给系统用户(真实用户或者虚拟用户)设置一个Samba密码 客户端就用此密码访问Samba资源 smbpasswd在/etc/samba中 有时需要手工创建该文件
  28. # tdbsam:使用数据库文件创建用户数据库 数据库文件叫passdb.tdb在/etc/samba中 passdb.tdb用户数据库可使用smbpasswd –a创建Samba用户 要创建的Samba用户必须先是系统用户 也可使用pdbedit创建Samba账户 pdbedit命令可参考pdbedit --help
  29. # ldapsam:该方式则是基于LDAP的账户管理方式来验证用户 首先要建立LDAP服务 然后设置passdb backend = ldapsam:ldap://LDAP Server
  30. passdb backend = tdbsam
  31. # ---------------------- 域成员选项 ----------------------
  32. # 配置注解如上
  33. security = domain
  34. # 配置注解如上
  35. passdb backend = tdbsam
  36. # 所有的成员必须在一个realm中 并且realm必须为大写
  37. realm = MY_REALM
  38. # 默认值为* 通过赐选项指定域控制器名称 可以让Samba使用特定远程服务器进行用户名/密码验证
  39. # 示例值 password server = windc.mydomain.com:389 192.168.1.101 *
  40. password server = *
  41. # ---------------------- 域控制选项 ----------------------
  42. # 配置注解如上 域控制必须为user
  43. security = user
  44. # 配置注解如上
  45. passdb backend = tdbsam
  46. # 将该Samba指定为域主 允许Samba整理多个子网之间的浏览列表 控制器只能存在一个 如果已经有一个的话就不要启动该选项
  47. domain master = yes
  48. # 允许Samba为windows提供网络登录服务
  49. domain logons = yes
  50. # 指定再客户端登陆时运行的脚本 脚本名必须在NETLOGON的共享中提供
  51. # %m为机器名
  52. logon script = %m.bat
  53. # 存储用户配置文件的位置
  54. logon path = \\%L\Profiles\%u
  55. # 可以在域控制器上或者单机上使用脚本来做出相应的添加上山账户
  56. add user script = /usr/sbin/useradd "%u" -n -g users
  57. add group script = /usr/sbin/groupadd "%g"
  58. add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
  59. delete user script = /usr/sbin/userdel "%u"
  60. delete user from group script = /usr/sbin/userdel "%u" "%g"
  61. delete group script = /usr/sbin/groupdel "%g"
  62. # ---------------------- 浏览控制选项 ----------------------
  63. # 设置为no时Samba不会成为你网络上的主浏览器 设置为yes时将会正常的选举应用
  64. local master = no
  65. # 选举优先级
  66. os level = 33
  67. # 首选服务器 当设置为yes时Samba在启动时强制进行本地浏览器选举并给自己更高的选举机会
  68. preferred master = yes
  69. # ------------------------ 名称解析 ------------------------
  70. # 名称解析是对windows internet名称服务(WINS)的支持
  71. # 设置为yes时 Samba的NMBD组将将启用其WINS服务器
  72. wins support = yes
  73. # 告诉Samba的NMBD组件将要成为WINS客户端
  74. wins server = w.x.y.z
  75. # 设置为yes时Samba代表不支持WINS客户端回答名称解析查询 为此网络上必须至少有哦一个WINS服务器 默认为no
  76. wins proxy = yes
  77. # 设置为yes时Samba会尝试通过DNS nslookups解析NetBIOS名称
  78. dns proxy = yes
  79. # ------------------------ 打印选项 ------------------------
  80. # 设置为yes时将会自动加载打印机列表而不是单独设置他们
  81. load printers = yes
  82. # 允许将选项传递给CUPS库 例如设置值为raw允许在windows客户端上使用驱动程序
  83. cups options = raw
  84. # 用于指定替代的printcap文件
  85. printcap name = /etc/printcap
  86. # 在 UNIX System V 系统上自动获取打印机列表
  87. printcap name = lpstat
  88. printing = cups
  89. # ------------------------ 文件系统 ------------------------
  90. # 如果文件系统支持扩展属性并启用了这些属性(通常通过user_xattr挂载选项) 则可以取消注释本届中的选项 这些选项允许管理员指定DOS属性存储在扩展属性中并确保Samba不会更改权限位
  91. # 这些选项可以在每个分享上使用 在该全局属性[global]中使用他们将成为所有共享的默认值
  92. map archive = no
  93. map hidden = no
  94. map read only = no
  95. map system = no
  96. store dos attributes = yes

踩坑

客户端

1. 查看共享文件时ls报错NT_STATUS_ACCESS_DENIED listing \*

自动草稿

原因是因为被SELinux阻挡了

Samba的example文件中也有SELinux相关说明

  1. # If you create a new directory, such as a new top-level directory, label it
  2. # with samba_share_t so that SELinux allows Samba to read and write to it. Do
  3. # not label system directories, such as /etc/ and /home/, with samba_share_t, as
  4. # such directories should already have an SELinux label.
  5. # Run the "ls -ldZ /path/to/directory" command to view the current SELinux
  6. # label for a given directory.
  7. # Set SELinux labels only on files and directories you have created. Use the
  8. # chcon command to temporarily change a label:
  9. # chcon -t samba_share_t /path/to/directory
  10. # Changes made via chcon are lost when the file system is relabeled or commands
  11. # such as restorecon are run.
  12. # Use the samba_export_all_ro or samba_export_all_rw Boolean to share system
  13. # directories. To share such directories and only allow read-only permissions:
  14. # setsebool -P samba_export_all_ro on
  15. # To share such directories and allow read and write permissions:
  16. # setsebool -P samba_export_all_rw on
  17. # To run scripts (preexec/root prexec/print command/...), copy them to the
  18. # /var/lib/samba/scripts/ directory so that SELinux will allow smbd to run them.
  19. # Note that if you move the scripts to /var/lib/samba/scripts/, they retain
  20. # their existing SELinux labels, which may be labels that SELinux does not allow
  21. # smbd to run. Copying the scripts will result in the correct SELinux labels.
  22. # Run the "restorecon -R -v /var/lib/samba/scripts" command as the root user to
  23. # apply the correct SELinux labels to these files.

有关于SELinux的介绍: https://blog.csdn.net/qq_43710889/article/details/108459729

解决办法

关闭SELinux(不推荐)

  1. $ setenforce 0

改变SELinux(推荐)

  1. $ chcon -t samba_share_t /file

2. 更改了默认端口以及设置了windows端口转发后依旧无法连接上Samba

解决办法1

请检查是否开启了Samba服务端 如果开启请关闭

自动草稿

解决办法2

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《搭建Samba共享Linux和Windows文件夹》
文章链接:https://www.xpn.cc/5750/fy.html
分享到: 更多 (0)

热门推荐

评论 抢沙发

登录

忘记密码 ?