返回

SMB文件共享

配置samba/ksmbd--简易NAS

SMB文件共享

SMB是一种常见的文件共享协议,由微软开发,在Windows以外也有广泛使用。

其他常见的文件共享协议有ftp, webdav, nfs等。

samba

安装samba

# Debian\Ubuntu\...
sudo apt install samba

# Manjaro\Arch
sudo pacman -S --needed samba

配置SMB

编辑配置文件/etc/samba/smb.conf,自行替换名称、目录、用户等

# 全局配置
[global]
   # 工作组
   workgroup = WORKGROUP
   # 这个貌似是服务器的介绍字符串
   server string = Arch SMB Server
   # 这个名称将会显示在我们的本地网络当中
   netbios name = Arch-SMB
   # 匿名访问需要这个
   map to guest = bad user
   # 设定匿名账户在本地的映射,在 manjaro 上 nobody 本身就存在,照写就好了
   guest account = nobody
   # 日志文件位置,这个不多说,如果后面服务出问题请尽早在这里找找
   log file = /var/log/samba/%m.log
   # 日志文件的大小, 单位是kb,设置为0就是不限制了
   max log size = 50
   # 这个安全模式不多介绍,顺便一提,网上很多文章所提到的 share 模式已经弃用了
   security = user
   # 不太记得这行当时为什么写的了
   # encrypt passwords = yes
   # 关闭 dns 代理
   # dns proxy = yes   

# 这里是我的需求1,要完全访问磁盘
# 这是共享文件夹名称
[Home]
   # 共享文件夹的简介字符串,在windows会鼠标悬浮时显示
   comment = 树莓派共享的home
   # 这是服务器本机实际的具体路径,在这里就是我磁盘挂载的实际位置,这里有坑,后面谈
   path = /home/zjh
   # browseable 表示是否显示在共享文件中,与可访问性无关
   browseable = yes
   # 这里我把自己设置为管理员,kaoru是我的本地账户,
   # SMB服务账户和Linux本地账户是绑定的,但是密码可以是不一样的
   # admin users = zjh
   valid users = zjh
   # 这里设置可写属性
   writeable = yes


[MyNas]
   # 共享文件夹的简介字符串,在windows会鼠标悬浮时显示
   comment = 树莓派共享的硬盘
   # 这是服务器本机实际的具体路径,在这里就是我磁盘挂载的实际位置,这里有坑,后面谈
   path = /mnt/diskZ/
   # browseable 表示是否显示在共享文件中,与可访问性无关
   browseable = yes
   # 这里我把自己设置为管理员
   # SMB服务账户和Linux本地账户是绑定的,但是密码可以是不一样的
   # admin users = zjh
   valid users = zjh
   # 这里设置可写属性
   writeable = yes

测试配置文件是否正确

testparm /etc/samba/smb.conf

添加SMB用户,并设置密码

sudo smbpasswd -a zjh

启动samba服务

#然后设置为开机自启并启动,--now表示立即启动
systemctl enable --now smb nmb   #开机自启、网络发现 主机名ip转换

参考页面:samba Archwiki

全部命令

pacman -S --needed samba

echo "
# 全局配置
[global]
   # 工作组
   workgroup = WORKGROUP
   # 这个貌似是服务器的介绍字符串
   server string = Arch SMB Server
   # 这个名称将会显示在我们的本地网络当中
   netbios name = Arch-SMB
   # 匿名访问需要这个
   map to guest = bad user
   # 设定匿名账户在本地的映射,在 manjaro 上 nobody 本身就存在,照写就好了
   guest account = nobody
   # 日志文件位置,这个不多说,如果后面服务出问题请尽早在这里找找
   log file = /var/log/samba/%m.log
   # 日志文件的大小, 单位是kb,设置为0就是不限制了
   max log size = 50
   # 这个安全模式不多介绍,顺便一提,网上很多文章所提到的 share 模式已经弃用了
   security = user
   # 不太记得这行当时为什么写的了
   # encrypt passwords = yes
   # 关闭 dns 代理
   # dns proxy = yes   

# 这里是我的需求1,要完全访问磁盘
# 这是共享文件夹名称
[Home]
   # 共享文件夹的简介字符串,在windows会鼠标悬浮时显示
   comment = 共享的home
   # 这是服务器本机实际的具体路径,在这里就是我磁盘挂载的实际位置,这里有坑,后面谈
   path = /home/zjh
   # browseable 表示是否显示在共享文件中,与可访问性无关
   browseable = yes
   # 这里我把自己设置为管理员
   # SMB服务账户和Linux本地账户是绑定的,但是密码可以是不一样的
   # admin users = zjh
   valid users = zjh
   # 这里设置可写属性
   writeable = yes


[MyNas]
   # 共享文件夹的简介字符串,在windows会鼠标悬浮时显示
   comment = 共享的硬盘
   # 这是服务器本机实际的具体路径,在这里就是我磁盘挂载的实际位置,这里有坑,后面谈
   path = /mnt/diskZ/
   # browseable 表示是否显示在共享文件中,与可访问性无关
   browseable = yes
   # 这里我把自己设置为管理员
   # SMB服务账户和Linux本地账户是绑定的,但是密码可以是不一样的
   # admin users = zjh
   valid users = zjh
   # 这里设置可写属性
   writeable = yes
" | sudo tee /etc/samba/smb.conf

testparm /etc/samba/smb.conf

sudo smbpasswd -a zjh

#设置为开机自启并启动,--now表示立即启动
systemctl enable --now smb nmb   #开机自启、网络发现 主机名ip转换

ksmbd

ksmbd在linux内核5.15版本加入。

安装ksmbd-tools

yay -S ksmbd-tools

内核加载ksmbd

modprobe ksmbd

创建ksmbd配置目录

sudo mkdir /etc/ksmbd

添加SMB用户,并设置密码

ksmbd.adduser -a <username>

配置ksmbd

两种方法都可以

直接编辑ksmbd配置文件

sudo nano /etc/ksmbd/smb.conf
配置参考:smb.conf.example
配置说明:configuration

通过命令修改ksmbd配置文件

e.g.:

ksmbd.addshare -a myshare -o "guest ok = yes, writable = yes, path = /mnt/data"

Note: share options (-o) must always be enclosed with double quotes ("...").

启动ksmbd共享

ksmbd.mountd

参考页面:ksmbd-toosl Github

作为客户端

sudo mount.cifs //192.168.6.5/f /mnt/diskZ -o user=xxx,password=yyy