每天 Shaarli

一天内的所有链接,汇聚在一个页面上。

March 2, 2025

Note: 在 Alpine Linux 上安装和配置 NFS 服务器

在 Alpine Linux 上安装和配置 NFS 服务器可以按照以下步骤进行:

1. 安装 NFS 服务器

使用 apk 安装 nfs-utils

apk add nfs-utils

如果你使用的是 OpenRC(Alpine 默认的 init system),还需要安装 nfs-utils-openrc

apk add nfs-utils-openrc

2. 配置 NFS 共享目录

编辑 /etc/exports 文件,添加要共享的目录。例如:

mkdir -p /mnt/nfs_share
chmod 777 /mnt/nfs_share
echo "/mnt/nfs_share *(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports

参数说明:

  • *:允许所有客户端访问(你可以替换为特定 IP,比如 192.168.1.0/24)。
  • rw:读写权限。
  • sync:数据同步写入磁盘,提高稳定性。
  • no_subtree_check:避免子目录检查,提高访问性能。
  • no_root_squash:允许 NFS 客户端以 root 用户访问(通常默认会将 root 映射到 nobody)。

3. 启动 NFS 服务器

运行以下命令启动 NFS 相关服务:

rc-service nfs start
rc-service rpcbind start

4. 设置开机自启

rc-update add nfs default
rc-update add rpcbind default

5. 重新导出 NFS 目录

如果你修改了 /etc/exports,需要运行以下命令使更改生效:

exportfs -a

6. 在客户端挂载 NFS 共享

假设服务器 IP 是 192.168.1.100,在 NFS 客户端(另一台 Linux 机器)上运行:

apk add nfs-utils
mkdir -p /mnt/nfs_client
mount -t nfs 192.168.1.100:/mnt/nfs_share /mnt/nfs_client

如果要 永久挂载,可以在客户端的 /etc/fstab 添加:

192.168.1.100:/mnt/nfs_share  /mnt/nfs_client  nfs  defaults  0  0

7. 检查 NFS 状态

查看 NFS 服务器导出的共享目录:

exportfs -v

查看 NFS 服务器是否在监听:

rpcinfo -p

8. 防火墙(可选)

如果 Alpine 使用 iptablesfirewalld,确保放行 NFS 相关端口:

iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -j ACCEPT

这样你就成功在 Alpine Linux 上安装并配置了 NFS 服务器!🎉


用户名和密码认证

Alpine Linux 上设置 NFS 服务器 并启用 用户名和密码认证(Kerberos 认证) 需要使用 NFSv4 + Kerberos(sec=krb5),因为 NFS 本身不支持基于用户名/密码的身份验证。默认情况下,NFS 主要依赖客户端和服务器的 UID/GID 进行身份匹配。

如果你只是想实现 基本的身份控制,可以使用 root_squashmap_static 方式。但如果你想要真正的 用户名和密码认证,你需要结合 Kerberos 进行身份验证


方案 1:基于 Kerberos 认证的 NFS(推荐)

1. 安装必要的组件

apk add nfs-utils rpcbind krb5-server krb5

2. 配置 Kerberos

编辑 /etc/krb5.conf

[libdefaults]
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false

[realms]
 EXAMPLE.COM = {
  kdc = your-kerberos-server
  admin_server = your-kerberos-server
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

注意

  • EXAMPLE.COM 请改为你的域名。
  • your-kerberos-server 替换为你的 Kerberos 服务器 IP 或主机名。

3. 生成密钥表

Kerberos KDC 服务器 上创建一个 nfs/服务器名 的主机密钥:

kadmin.local
addprinc -randkey nfs/server.example.com
ktadd -k /etc/krb5.keytab nfs/server.example.com

然后,将 /etc/krb5.keytab 复制到 NFS 服务器客户端

4. 配置 NFS 服务器

编辑 /etc/exports

/mnt/nfs_share 192.168.1.0/24(rw,sec=krb5p,sync,no_subtree_check)

sec=krb5p 表示 使用 Kerberos 进行身份验证,你也可以改为:

  • sec=krb5 仅验证身份
  • sec=krb5i 验证身份+数据完整性
  • sec=krb5p 验证身份+数据完整性+加密

然后重启服务:

rc-service nfs restart
rc-service rpcbind restart
exportfs -ra

5. 在客户端挂载 NFS

客户端 确保已经安装了 nfs-utilskrb5,然后运行:

mkdir -p /mnt/nfs_client
mount -t nfs4 -o sec=krb5 server.example.com:/mnt/nfs_share /mnt/nfs_client

方案 2:使用 map_static 进行用户映射(非用户名/密码)

如果你只是想让 特定的用户名匹配到 NFS 服务器上的某个 UID/GID,可以使用 map_static

1. 创建映射文件

在 NFS 服务器上,创建 /etc/idmapd.conf 并添加:

[General]
Domain = example.com

[Mapping]
Nobody-User = nfsnobody
Nobody-Group = nfsnobody

然后,创建 /etc/nfsidmap.conf

echo "nfsuser:1001:1001" > /etc/nfsidmap.conf

这里 nfsuser 是客户端的用户名,它将被映射到服务器上的 UID/GID 1001

重启 idmapd

rc-service rpcidmapd restart

然后,在客户端:

mount -t nfs4 -o sec=sys server.example.com:/mnt/nfs_share /mnt/nfs_client

总结

方式 是否支持用户名/密码 适用场景 复杂度
NFS + Kerberos ✅ 是 需要安全验证的环境
map_static ❌ 否(映射 UID) 控制用户权限但不需要密码
默认 NFS 方式 ❌ 否(UID/GID 匹配) 内网无特殊认证要求

如果你想在 Alpine Linux 上真正使用用户名和密码进行 NFS 认证,推荐使用 Kerberos


在 Windows 10 上挂载 NFS 共享,可以按照以下步骤进行:


1. 启用 NFS 客户端

默认情况下,Windows 10 需要手动安装 NFS 客户端:

方法 1:使用 "启用或关闭 Windows 功能"

  1. 打开"控制面板" → 选择 "程序和功能"
  2. 点击左侧 "启用或关闭 Windows 功能"
  3. 在弹出的窗口中,找到 "NFS 客户端"(Client for NFS)。
  4. 勾选它,然后点击 "确定",等待安装完成。
  5. 重启计算机。

方法 2:使用 PowerShell 安装

你也可以用 PowerShell 快速安装:

Enable-WindowsOptionalFeature -Online -FeatureName ServicesForNFS-ClientOnly -NoRestart

安装完成后,建议重启 Windows。


2. 挂载 NFS 共享

方法 1:使用 "net use" 命令

打开 命令提示符 (cmd),运行:

net use X: \\192.168.1.100\mnt\nfs_share /persistent:yes
  • X: 是你希望映射的本地磁盘盘符,可以换成 Z: 或其他未使用的盘符。
  • 192.168.1.100 是 NFS 服务器的 IP 地址,需要替换成你的实际 NFS 服务器 IP。
  • /persistent:yes 让 NFS 共享在重启后仍然保持挂载状态。

方法 2:使用 "mount" 命令

如果 net use 方式不工作,可以尝试:

mount -o anon \\192.168.1.100\mnt\nfs_share X:

如果 NFS 服务器要求身份认证,你可以使用:

mount -o username=your_user,password=your_password \\192.168.1.100\mnt\nfs_share X:

方法 3:通过 "文件资源管理器"

  1. 打开文件资源管理器 → 右键 "此电脑""映射网络驱动器"

  2. 选择一个盘符,例如 X:

  3. 文件夹 位置输入:

    \\192.168.1.100\mnt\nfs_share
  4. 取消勾选 "使用不同的凭据连接"(NFS 默认使用匿名访问)。

  5. 点击 "完成",等待挂载成功。


3. 验证挂载

挂载成功后,你可以:

  • 文件资源管理器 中查看 X: 盘是否正常访问。

  • 运行 net use 查看挂载状态:

    net use
  • 运行 mount 命令查看 NFS 挂载:

    mount
    • *

4. 取消 NFS 挂载

如果不需要 NFS 共享了,可以卸载:

net use X: /delete

或者:

umount X:

5. 可能的故障排除

问题 1:找不到 NFS 共享

  • 确保 Windows 10 的 NFS 客户端 已安装并启用。

  • 确保 NFS 服务器的 IP 地址正确,可以 ping 测试:

    ping 192.168.1.100
  • 在服务器端运行:

    exportfs -v

    确保 NFS 共享已正确导出。

问题 2:Windows 访问 NFS 目录时报 "权限不足"

  • 在 NFS 服务器上,尝试设置 no_root_squash 以允许 Windows 访问:

    echo "/mnt/nfs_share *(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports

    然后重新加载:

    exportfs -ra
  • 在 Windows 端,尝试使用 管理员权限 运行 cmd 进行挂载。

    • *

这样,你就能在 Windows 10 上成功挂载 NFS 共享了!🚀


官网参考

https://wiki.alpinelinux.org/wiki/Setting_up_an_NFS_server

Alpine Linux 官网提供的方法更简便,并且更符合 Alpine 的设计哲学。相比之前介绍的步骤,它减少了一些手动配置,依赖 OpenRC 进行管理,适用于 Alpine 的 轻量级环境


对比分析

方法 是否简便 适用场景 主要区别
官网方法(推荐) ✅ 是 适合 Alpine 的 OpenRC 体系 使用 nfs-utils 默认的 OpenRC 服务,减少手动操作
传统方法 ❌ 复杂 适用于通用 Linux 发行版(如 Debian、RHEL) 手动配置 rpcbindidmapd

✅ Alpine 官方方法的优势

  1. 减少手动操作,直接使用 rc-update 管理 NFS 服务。
  2. 更符合 Alpine Linux 的 OpenRC 体系,避免使用 systemctl 等非 Alpine 工具。
  3. 不需要额外的 rpcbind 配置(NFSv4 默认不需要 rpcbind)。

按照官网方法安装 NFS 服务器

1. 安装 nfs-utils

apk add nfs-utils

2. 配置 NFS 共享

编辑 /etc/exports

/data 10.10.10.0/24(rw,nohide,no_subtree_check,no_root_squash)

3. 重新加载导出设置

exportfs -afv

4. 启动 NFS 服务

rc-service nfs start

5. 设置开机自启

rc-update add nfs

按照官网方法安装 NFS 客户端

1. 确保安装 nfs-utils

apk add nfs-utils

2. 在 /etc/fstab 中添加自动挂载

10.10.10.1:/data /mnt/nfs_share nfs4 rw,_netdev 0 0

3. 启用自动挂载

rc-update add nfsmount
rc-service nfsmount start

官方方法设置 Kerberos 认证(可选)

如果你需要 Kerberos 认证,官网方法也更简洁:

1. 在 NFS 服务器上

apk add krb5-server
kadmin.local
addprinc -randkey nfs/nfs1.example.com@EXAMPLE.COM
ktadd -k /etc/krb5.keytab nfs/nfs1.example.com

编辑 /etc/exports

/data 10.10.10.0/24(rw,nohide,no_subtree_check,sec=krb5p,no_root_squash)

重新加载:

exportfs -afv

2. 在 NFS 客户端上

apk add krb5
rc-update add rpc.gssd
rc-service rpc.gssd start

然后挂载:

mount -t nfs4 -o sec=krb5 10.10.10.1:/data /mnt/nfs_client

结论

✅ Alpine 官网的方法 更简便、更轻量级,而且利用了 Alpine OpenRC 进行管理,建议直接按照官网方法操作!🚀