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