前言

局域网如果里有一台24小时开机的低功耗linux主机,那自然是要给它装上samba开启文件共享功能,把它作为一个文件服务器来用。可能有人会问,想开共享文件夹,直接给主机装casaos不就好了,就算不用samba也可以用filebrowser、alist、dufs、chfs之类。emmm,说的很对,但那不是少了很多手动挡的乐趣嘛。而且自己手搓一边,也方便更好的理解samba。

在记录安装和配置的内容时,确实会发现很多细节没法具体一一记录,只能记录下符合我的需求的配置。这时候就会觉得类似casaos这种webui上直接鼠标点点就开启共享的方式方便多了。


前期准备

  • 一台24小时开机的低功耗linux主机,我这里用的是赚钱宝二代(ws1508)
  • linux系统有一个非root的低权限账户,这里假定:jack
  • 如果系统安装了防火墙,记得放行samba服务

samba的安装

debian仓库里就有samba,直接一键安装

apt install samba

安装完成后,可以执行systemctl status smbd看下服务的运行状态。

● smbd.service - Samba SMB Daemon
     Loaded: loaded (/lib/systemd/system/smbd.service; enabled; preset: enabled)
     Active: active (running) since Sun 2023-07-16 13:44:59 CST; 11min ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
    Process: 4040 ExecCondition=/usr/share/samba/is-configured smb (code=exited, status=0/SUCCESS)
    Process: 4043 ExecStartPre=/usr/share/samba/update-apparmor-samba-profile (code=exited, status=0/SUCCESS)
   Main PID: 4044 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 4 (limit: 986)
     Memory: 4.9M
        CPU: 9.725s
     CGroup: /system.slice/smbd.service
             ├─4044 /usr/sbin/smbd --foreground --no-process-group
             ├─4046 /usr/sbin/smbd --foreground --no-process-group
             ├─4047 /usr/sbin/smbd --foreground --no-process-group
             └─4153 /usr/sbin/smbd --foreground --no-process-group

samba添加用户

想要访问通过samba共享的文件夹,需要在samba中添加一个用户并设定密码。这里有一个注意事项,添加到samba的用户,必须是linux系统已经存在的用户。上面假定了linux系统存在一个用户jack,这里把它添加到samba中。

# 添加后会要求设定密码
smbpasswd -a jack

注意这里设定的用户密码,就是之后访问共享文件夹的账户&密码。这里假定密码是123456


samba添加共享文件夹

上面两步完成了samba服务的安装和samba访问账户的添加,接下去就是最后一步了,添加共享文件夹。

samba的配置文件路径,默认是/etc/samba/smb.conf。smb.conf的配置参数多如牛毛,这里就不做一一介绍,有兴趣可以访问【samba官方文档】进行了解。这里只贴出快速上手的配置项。

smb.conf中分成两个部分,一个是[global]标签下的全局设置项。注意下面贴出的配置都禁止了访客、禁止了匿名访问,必须通过账号密码登录后才可以访问到共享文件夹中的内容。

[global]
   #工作组
   workgroup = WORKGROUP

   # log日志设定
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file

   # 安全设定
   security = user
   server role = standalone server

   # 禁止匿名访问设定
   map to guest = never

   # 最低smb协议版本设定
   server min protocol = SMB2

另一个就是共享文件夹的设定,假定添加共享文件夹[movie],路径是/data/movie。其中的权限0744这里不做赘述,可以找其它文章了解。

[movie]
   # 共享文件夹备注
   comment = blog file folder
   # 文件夹的真实路径
   path = /data/movie
   # 新建文件的权限
   create mask = 0744
   # 文件夹的权限
   directory mask = 0744
   # 有效的访问用户
   valid users = jack
   # 局域网内是否可见
   browseable = yes
   # 是否可写
   writable = yes
   # 是否只读
   read only = no
   # 是否公开(指是否可以无账号访问)
   public = no
   # 是否访客开放(指是否可以无账号访问)
   guest ok = no

大功告成

完成smb.conf的配置以后,重启samba服务。

systemctl restart smbd

然后在局域网的其它电脑上,就可以访问到这个共享文件夹了。访问的账户是假定的jack,密码是假定的123456