使用Samba共享文件

前言

最近因为很多原因需要共享一个 Ubuntu 系统下的文件夹供他人访问,于是决定使用 samba 。

关于samba

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。 SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API)。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(Common Internet File System),并且加入了许多新的特色。

环境

Ubuntu 16.04
4.13.0-43-generic

Samba 安装

# sudo apt install samba

Samba 配置参数说明

Samba 服务的配置文件位于 /etc/samba/smb.conf

全局文件配置参数

[global]
    config file = /etc/samba/smb.conf.%U       #可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件 不存在,则该项无效。
    workgroup = WORKGROUP                      #工作组名称
    server string = Samba Server Version %v    #主机的简易说明
    netbios name = MYSERVER                    #主机的netBIOS名称,如果不填写则默认服务器DNS的一部分,workgroup和netbios name名字不要设置成一样
    interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24  
                                               #设置samba服务器监听网卡,可以写网卡名称或IP地址,默认注释
    hosts allow = 127. 192.168.12. 192.168.13. #设置允许连接到samba服务器的客户端,默认注释
    hosts deny = 192.168.12.0/255.255.255.0    #设置不允许连接到samba服务器的客户端,默认注释
    log level = 1                              #日志文件安全级别,0~10级别,默认0
    log file = /var/log/samba/%m               #产生日志文件的命名,默认以访问者IP地址命名
    max log size = 50                          #日志文件最大容量50,默认50,单位为KB,0表示不限制

自定义共享文件配置参数

[share]                                        # 自定义共享名
    comment = Home Directories                 # 描述符,是给系统管理员看的

    path = /tmp                                # 共享的路径
    public = yes                               # 是否公开,也就是是否能在网上邻居看到该共享
    browseable = yes                           # 共享的目录是否让所有人可见
    writable = yes                             # 是否可写
    guest ok = no                              # 是否拒绝匿名访问,仅当安全级别为 share 时才生效
    workgroup = WORKGROUP                      # 工作组,要设置成跟 Windows 的工作组一致
    server string = Samba Server Version %v    # 其他 Linux 主机查看共享时的提示符
    netbios name = MYSERVER                    # 用于在 Windows 网上邻居上显示的主机名
    hosts allow = 127. 192.168.12. 192.168.13. EXCEPT 192.168.13.13   # 指定允许访问 samba 服务器的主机
    security = share                           # 定义安全级别
    log file = /var/log/samba/log.%m           # 定义日志文件,每个访问的主机会产生独立的日志文件,%m 是客户端主机名
    max log size = 50                          # 定义单个日志的最大容量(KB)
    passdb backend = tdbsam                    # Samba 用户的存储方式,smbpasswd 表示明文存储,tdbsam 表示密文存储
    deadtime = 10                              # 客户端在10分钟内没有打开任何 Samba 资源,服务器将自动关闭会话。
    display charset = UTF8                     # 设置显示的字符集
    max connections = 0                        # 设置最大连接数,0表示无限制,如果超过最大连接数则拒绝连接
    guest account = nobody                     # 设置匿名账户为nobody
    load printers = yes                        # 是否在启动 Samba 时就共享打印机
    cups options = raw                         # 设置打印机使用的方式
    valid users = user1 user2 user3            # 指定哪些用户可以访问,如果不指定则所有用户都可访问
    invalid users = user1 user2                # 指定哪些用户不可以访问
    create mask = 0775                         # 客户端上传文件的默认权限
    directory mask = 0775                      # 客户端创建目录的默认权限
    write list = user1 user2 user3             # 设置可对文件进行写操作的用户
    admin users = user1                        # 设置共享目录的管理员,具有完全权限
    force create mode = 0775                   # Windows 与 Linux 具有不同的文件和文件夹默认权限,Windows下新建的文件是
    force directory mode = 0775                # 可执行的,所以必须强制设定其权限

关于安全级别

share :表示匿名用户,不需要 samba 账户就可登陆 samba 服务器
user :系统账户要先添加进 samba 库然后变成 samba 用户,使用 samba 用户来登陆,简单来讲就是需要使用用户密码登录
server :由另外一台 samba 服务器来对用户进行身份验证
domain :把 samba 服务器加入到 NT 域,由 NT 的域控制器来进行身份验证
ADS :(Active Directory Service,活动目录服务),是 samba3.0 中新增的身份验证方式,采用 ADS 验证方式,samba 服务器集成到活动目录中

Samba 配置

实用的配置

可以用此配置共享一个服务器上的所有文件,使浏览数据更加方便。但这样做会产生一定的安全风险。

[share]
    path = /
    public = yes
    writable = yes
    valid users = user
    create mask = 0775
    force create mode = 0775
    directory mask = 0775
    force directory mode = 0775
    available = yes

设置登录密码

# sudo touch /etc/samba/smbpasswd
# sudo smbpasswd -a                             # 根据设置的valid user,设置用户密码。

重启 Samba 服务使配置生效

# sudo /etc/init.d/samba restart

连接

通过 Windows 连接

在文件资源管理器输入

\\(ip)

通过 Linux 连接

在 connect to server,输入

smb://(ip)