forc …
force user / force group— 不管谁通过 Samba 写入文件,文件属主都强制变成你指定的用户,这是解决权限混乱最简单的方法valid users— 只有这里列出的用户能访问这个共享create mask / directory mask— 新建文件和目录的默认权限
配置完重启服务:
sudo systemctl restart smb
从 Windows 测试
- 在文件资源管理器输入
\\服务器IP - 提示凭据时,输入用户名
test和刚才设置的 Samba 密码 - 如果成功,会看到共享文件夹

NFS
NFS 是 Linux 和 UNIX 系统之间最常用的文件共享协议。跟 SMB 不同,NFS 在 Linux 客户端上挂载非常自然,配置也简单得多。如果你的文件共享只在 Linux 设备之间进行,NFS 是比 SMB 更轻量的选择。
安装
NFS 分为服务端和客户端。NAS 当然要装服务端:
sudo dnf install nfs-utils
配置导出目录
NFS 通过 /etc/exports 文件来配置哪些目录共享给谁。每条记录的格式是:
/要共享的目录 允许的客户端(选项)
比如我要把 /vol-mfs/媒体 共享给整个局域网:
# 编辑 /etc/exports
/vol-mfs/媒体 192.168.1.0/24(rw,sync,no_subtree_check)
常用选项说明:
rw— 读写权限;ro是只读sync— 写入磁盘后才返回,数据更安全(推荐);async性能更好但可能有数据丢失风险no_subtree_check— 禁用子目录检查,提升稳定性root_squash— 客户端的 root 会被映射成匿名用户(默认开启,安全);no_root_squash允许客户端的 root 保持 root 权限(权限统一但安全性太差,不推荐)
配置多个目录就写多行:
/vol-mfs/资料/1000 192.168.1.0/24(rw,sync,no_subtree_check) # 允许网段设备访问
/vol-mfs/资料/1000 192.168.1.100(rw,sync,no_subtree_check) # 只允许特定设备访问
启动服务
sudo systemctl enable --now nfs-server
客户端挂载
在另一台 Linux 机器上安装客户端(一般发行版都自带,如果没有就装 nfs-utils),然后挂载:
# 先看看服务端有哪些共享
showmount -e 192.168.1.100
# 挂载
sudo mount -t nfs 192.168.1.100:/vol-mfs/资料/1000 /mnt/nas-media
如果希望开机自动挂载,写入 /etc/fstab:
192.168.1.100:/vol-mfs/媒体 /mnt/nas-media nfs defaults 0 0
miniDLNA
DLNA 是电视、游戏机、音箱等设备发现和播放媒体文件的协议。miniDLNA(也叫 ReadyMedia)是一个轻量级的 DLNA 服务端,装上之后,你家里的智能电视就能直接播放 NAS 上的电影和音乐了。
安装
sudo dnf install minidlna
配置
配置文件在 /etc/minidlna.conf。核心要改的就几项:
# 媒体文件目录。可以指定多个,用逗号隔开
media_dir=A,/path/to/music # A=音频
media_dir=P,/path/to/pictures # P=图片
media_dir=V,/path/to/videos # V=视频
# 服务器在网络上显示的名称
friendly_name=My Linux
# 数据库和缓存目录(保持默认就行)
db_dir=/var/cache/minidlna
log_dir=/var/log/minidlna
# 监听的端口,不需要改
port=8200
media_dir 前面的字母告诉 miniDLNA 这个目录里是什么类型的文件,方便客户端分类展示。如果目录里混合了各种媒体,直接用 media_dir=/path/to/media 不加前缀也可以,但分类就不那么准确了。
WebDAV
WebDAV 是 HTTP 协议的扩展,让你可以通过网络像操作本地文件一样对远程文件进行增删改查。
相比 SMB,WebDAV 在外网访问方面更友好(走 443 端口,不会被运营商封),但权限管理不如 SMB 精细。
Apache / Nginx 模块方案
Apache 的 mod_dav 和 Nginx 的 WebDAV 模块都能实现,但配置比较麻烦,已经不推荐自己折腾了。
私有云自带的 WebDAV
可道云、NextCloud、Seafile 等主流私有云网盘都已经内置了 WebDAV 功能,可以直接作为附属服务使用。
用 OpenList 聚合所有 WebDAV(推荐)
OpenList 是一个轻量的 WebDAV 服务端,我比较推荐这个方案,比手动配 Apache 省心很多。
OpenList 作为系统底层的文件共享服务,我建议用非容器方式部署:
一键安装到 /opt/:
curl -fsSL https://res.oplist.org/script/v4.sh > install-openlist-v4.sh && sudo bash install-openlist-v4.sh
这种方式 OpenList 以 root 运行,拥有全部文件访问权限。
也可以手动安装,从 OpenList Releases 下载后:
tar -zxvf openlist-xxxx.tar.gz
chmod +x openlist
./openlist server
./openlist admin
./openlist admin random
./openlist admin set NEW_PASSWORD
然后配置为用户级 systemd 服务,写入 ~/.config/systemd/user/openlist.service:
[Unit]
Description=Openlist WebDAV Service
After=network-online.target
[Service]
WorkingDirectory=/path/to/openlist/
ExecStart=/path/to/openlist/openlist server
Restart=on-failure
[Install]
WantedBy=default.target
启动后进入 OpenList 管理页面,在"存储"中添加"本机存储",注意修改创建文件夹的权限——个人文件设为 700,需要共享的媒体库设为 755 或 775。

OpenList 还能挂载网盘,把各路网盘文件统一到 NAS 上,搭配 rclone 玩法更丰富。
iSCSI
前面讲的 SMB、NFS、WebDAV 都是文件级共享协议,客户端看到的是一个个文件和文件夹。iSCSI 则不同,它是在网络上传送块设备——客户端连接后会多出一块"硬盘",你需要像用本地硬盘一样去格式化、分区、挂载它。
iSCSI 适合什么场景?
- 给 Windows 电脑通过网络加一块"本地硬盘",用来装 Steam 游戏或软件
- 给 VMware / Proxmox 当共享存储
- 需要块级别的访问控制(比如某块盘只能某个客户端使用)
其实就是创建一个虚拟磁盘,然后把这个虚拟磁盘直接共享给其他设备。iSCSI 配置起来比较复杂,使用场景也较少,只有存储游戏,反网络文件夹检测等需求才会用到,了解即可。
- iSCSI 是块级协议,不要在多个设备上同时挂载同一块 iSCSI 盘,否则会损坏文件系统(除非你用了集群文件系统,但那很复杂)
- iSCSI 对网络延迟比较敏感,建议在千兆以上网络中使用
- 如果不想用单独的硬盘,用文件模拟块设备(fileio)完全可以满足日常需求
服务端配置(Target)
在 Fedora 上使用 LIO(Linux-IO Target)作为 iSCSI 目标端:
sudo dnf install targetcli
sudo systemctl enable --now target
targetcli 是一个交互式配置工具,在里面输入命令会实时生效。下面演示如何创建一个 iSCSI target:
sudo targetcli
进入 targetcli 的交互界面后,依次执行:
# 创建块设备(假设你有一块单独的硬盘 /dev/sdb,或者用文件模拟)
> backstores/fileio create disk1 /path/to/disk1.img 500G
# 创建 iSCSI target(IQN 名称需要唯一,格式固定)
> /iscsi create iqn.2026-07.local.nas:target1
# 把块设备和 target 关联起来
> /iscsi/iqn.2026-07.local.nas:target1/tpg1/luns create /backstores/fileio/disk1
# 配置访问控制(只允许特定客户端连接)
> /iscsi/iqn.2026-07.local.nas:target1/tpg1/acls create iqn.2026-07.local.client:initiator1
# 查看配置结果
> ls /
# 退出并保存配置
> saveconfig
> exit
saveconfig 会让配置持久化到 /etc/target/saveconfig.json,重启 target 服务后依然生效。
关于磁盘映像文件:/path/to/disk1.img 不用提前创建,targetcli 的 fileio create 会自动生成一个稀疏文件(sparse file),一开始不占空间,随着写入慢慢增长。
客户端连接(Initiator)
Linux 客户端:
# 安装客户端
sudo dnf install iscsi-initiator-utils
# 发现目标
sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.100
# 连接
sudo iscsiadm -m node --targetname iqn.2026-07.local.nas:target1 --login
连接成功后执行 lsblk 就能看到新硬盘了,像用本地硬盘一样分区格式化即可。
Windows 客户端:
Windows 自带 iSCSI 发起程序,在"管理工具"中找到它:
- 在"目标"输入框填写 NAS 的 IP 地址,点击"快速连接"
- 如果已经配置了 ACL,需要把 Windows 的 Initiator Name 填到服务端的 ACL 中(Windows 的发起程序名称可以在 iSCSI 发起程序属性页面找到)
- 连接成功后,打开"磁盘管理",会看到新加的磁盘,初始化并创建分区即可