搭建samba服务器

由于网上的配置都是非常多而且乱,所以我自己翻了一下manual,整理了一份自己的配置。

我需要在Windows和Linux之间共享文件,Samba是UNIX下的CIFS实现,也就是让Linux也可以使用Windows的局域网文件共享。文件共享的 方案有很多,有NFS,Samba,FTP,SFTP等等,但是说到底,鉴于我需要和多个版本的Windows(Windows Thin PC, Windows 7, Windows 10) 共享文件,因此Samba的兼容性仍然是最棒的,就选它了。

首先要安装Samba:

$ sudo pacman -S samba

接着加好防火墙,由于我的ufw没有直接支持samba,所以新建一个文件/etc/ufw/applications.d/samba4,内容是:

[Samba4]
title=Samba 4
description=Samba 4 as domain controller
ports=139/tcp|445/tcp

然后配置防火墙:

$ sudo ufw reload
$ sudo ufw allow from 192.168.122.0/24 to any app Samba4

接着设置好开机自启:

$ sudo systemctl enable smb.service

但是还不能启动,因为需要一份配置 /etc/samba/smb.conf

# Global parameters
[global]
	dns proxy = No
	log file = /usr/local/samba/var/log.%m
	map to guest = Bad User
	max log size = 50
	server role = standalone server
	server string = Jiajun's Samba Server
	idmap config * : backend = tdb
	create mask = 0644
	force create mode = 0644
	force directory mode = 0755
	smb encrypt = desired

[public]
        comment = Jiajun's Public Disk Space
        path = /data/public
        read only = no
        writeable = yes
        browseable = yes
        public = yes
        guest ok = yes
        guest only = yes
        create mask = 0644
        directory mask = 0744
        force user = jiajun
        force group = jiajun

接下来解释一下上面的配置:

  • samba的配置文件按节分,一个 [xxx] 是一节配置,有三个比较特殊的,分别是 global, homes, printers,分别是全局配置, 登录家目录用的,还有打印机。由于我只要局域网内匿名共享,因此只要global这个特殊的配置,再加上我自己的public配置就可以了。

  • global 配置中,比较特殊的,需要注意的有,map to guest 这个如果要使用匿名共享的话,必须要。create mask 这些可有 可无,看个人需要。smb encrypt 是指期望使用加密,毕竟局域网也要安全嘛。

  • public 配置中,path 指定要共享出去的目录,read only 表示是否只读。注意guest帐号,对应到UNIX系统,默认就会使用 nobody这个用户和组。

综上,至于要登录的配置嘛,我暂时没有需要,因此没有研究。



更多文章
  • Web开发系列(六):关系型数据库,ORM
  • Web开发系列(七):缓存,CDN
  • Web开发系列(八):单点故障,负载均衡
  • Web开发系列(五):form, json, xml
  • Web开发系列(四):Flask, Tornado和WSGI
  • Web开发系列(三):什么是HTML,CSS,JS?
  • Web开发系列(二):HTTP协议
  • Web开发系列(一):从输入网址到最后,这个过程经历了什么?
  • SNI: 让Nginx在一个IP上使用多个证书
  • Haskell: infixl, infixr, infix
  • Haskell简明教程(五):处理JSON
  • Haskell简明教程(四):Monoid, Applicative, Monad
  • HTTPS 的详细流程
  • OAuth2 为什么需要 Authorization Code?
  • 任务队列怎么写?python rq源码阅读与分析