【已解决】NFS客户端写入NFS共享文件夹出错:Permission denied

2023-11-09

原文地址:https://www.crifan.com/nfs_client_write_to_nfs_server_share_folder_error_permission_denied/


【背景】

折腾:

【已解决】在远程Ubuntu服务器中开通NFS服务供别人访问服务器上的文件

期间,NFS服务器端已经配置了写权限:

?
1
/home/share/image *(rw, sync )

然后客户端去mount:

?
1
mount -t nfs 121.41.120.185: /home/share/image /root/nfs_client_root/

可以看到文件了:

?
1
2
3
4
5
root@chantyou:nfs_client_root # ls -l
total 240
-rw-r--r-- 1 root root 70545 May 28  2013 mmexport1369703131812.jpg
-rw-r--r-- 1 root root 82168 Sep 12  2013 mmexport1378988706739.jpeg
-rw-r--r-- 1 root root 85510 Nov 18  2013 p_large_0fOT_43d9000068f01263.jpg

但是却无法写入:

?
1
2
root@chantyou:nfs_client_root # sudo touch test_client_write.txt
touch : cannot  touch ‘test_client_write.txt’: Permission denied

【解决过程】

1.搜:

NFS client Permission denied

参考:

linux – How to properly set permissions for NFS folder? Permission denied on mounting end. – Server Fault

去检查一下服务器端的确自己本身有写的权限:

?
1
2
3
4
5
6
7
8
9
root@iZ23lqgttauZ:image # ls /home/share/ -l
total 4
drwxr-xr-x 2 root root 4096 Jul 23 15:16 image
root@iZ23lqgttauZ:image # ls /home/share/image/ -l
total 240
-rw-r--r-- 1 root root 70545 May 28  2013 mmexport1369703131812.jpg
-rw-r--r-- 1 root root 82168 Sep 12  2013 mmexport1378988706739.jpeg
-rw-r--r-- 1 root root 85510 Nov 18  2013 p_large_0fOT_43d9000068f01263.jpg
root@iZ23lqgttauZ:image #

好像:

NFS服务器端,没有给文件夹:

/home/share/image/

开通,g=group,o=other的写的权限。

所以去开通试试:

?
1
2
3
4
5
root@iZ23lqgttauZ:image # chmod go+w /home/share/image/
root@iZ23lqgttauZ:image # ls /home/share/ -l     
total 4
drwxrwxrwx 2 root root 4096 Jul 23 15:16 image
root@iZ23lqgttauZ:image #

然后NFS客户端再去试试写入是否可行:

真的可以了:

?
1
2
root@chantyou:nfs_client_root # sudo touch test_client_write.txt
root@chantyou:nfs_client_root #

 

【总结】

NFS的server端,虽然当前用户root,对于NFS共享出来的文件夹是有自己的写入权限,但是没有开通自己组group和其他人other的写权限:

?
1
2
3
root@iZ23lqgttauZ:image # ls /home/share/ -l
total 4
drwxr-xr-x 2 root root 4096 Jul 23 15:16 image

所以NFS客户端,去写入,应该属于other的权限,没法写出,出现Permission denied

解决办法是:

NFS客户端的共享出来的文件夹,开通other的写入权限:

?
1
2
3
4
root@iZ23lqgttauZ:image # chmod go+w /home/share/image/
root@iZ23lqgttauZ:image # ls /home/share/ -l     
total 4
drwxrwxrwx 2 root root 4096 Jul 23 15:16 image

然后NFS的客户端就可以正常写入了:

?
1
2
root@chantyou:nfs_client_root # sudo touch test_client_write.txt
root@chantyou:nfs_client_root #

就是权限的问题。

 

【后记】

不过,后来看到了:

nfs 客户端操作 Permission denied – 崛望的生鱼片 – ITeye技术网站

说是加了no_root_squash,也可以解决问题。

那估计是:

参考:

How To Set Up an NFS Mount on Ubuntu 14.04 | DigitalOcean

  • rw: This option gives the client computer both read and write access to the volume.
  • sync: This option forces NFS to write changes to disk before replying. This results in a more stable and consistent environment, since the reply reflects the actual state of the remote volume.
  • no_subtree_check: This option prevents subtree checking, which is a process where the host must check whether the file is actually still available in the exported tree for every request. This can cause many problems when a file is renamed while the client has it opened. In almost all cases, it is better to disable subtree checking.
  • no_root_squash: By default, NFS translates requests from a root user remotely into a non-privileged user on the server. This was supposed to be a security feature by not allowing a root account on the client to use the filesystem of the host as root. This directive disables this for certain shares.

no_root_squash意思是:

NFS的服务器,默认会把从别处(NFS的客户端)来的请求,中的用户(此处是NFS客户端的超级用户root,拥有超级权限的)变成没有(超级)特权的用户

->从而导致了,NFS客户端的用户root,去访问NFS服务器端共享出来的文件夹的时候,就变成普通的一般的用户了,

然后根据NFS服务器上文件夹的权限设置drwxr-xr-x ,对于group和other是没写入权限的。

所以NFS客户端无法访问。

 

去验证此猜想:

(1)先恢复之前的权限:

?
1
2
3
4
root@iZ23lqgttauZ:image # chmod go-w /home/share/image/
root@iZ23lqgttauZ:image # ls /home/share/ -l          
total 4
drwxr-xr-x 2 root root 4096 Jul 23 15:42 image

客户端去访问,确保没权限:

?
1
2
root@chantyou:nfs_client_root # sudo touch test_client_write_2.txt
touch : cannot  touch ‘test_client_write_2.txt’: Permission denied

然后NFS服务器端,只给文件夹开通other的write权限:

?
1
2
3
4
root@iZ23lqgttauZ:image # chmod o+w /home/share/image/ 
root@iZ23lqgttauZ:image # ls /home/share/ -l         
total 4
drwxr-xrwx 2 root root 4096 Jul 23 15:42 image

然后客户端再去写入试试:

?
1
2
root@chantyou:nfs_client_root # sudo touch test_client_write_2.txt
root@chantyou:nfs_client_root #

果然可以了

->验证了,从NFS客户端来到NFS服务器端的用户,属于other组;

(2)再恢复之前权限:

?
1
2
3
4
5
root@iZ23lqgttauZ:image # chmod o-w /home/share/image/
root@iZ23lqgttauZ:image # ls /home/share/ -l         
total 4
drwxr-xr-x 2 root root 4096 Jul 23 15:55 image
root@iZ23lqgttauZ:image #

然后NFS服务器端加上那个no_root_squash

->这样NFS客户端来的用户就是root了

->root就可以访问服务器端的所有文件夹的权限了,应该是

->重启exportfs和重启NFS服务器:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
root@iZ23lqgttauZ:image # vi /etc/exports
 
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/home/share/image *(rw, sync ,no_root_squash)
~                                                                                                                                           
"/etc/exports" 11L, 433C written                                                                                 
root@iZ23lqgttauZ:image # exportfs -a
exportfs:  /etc/exports [1]: Neither  'subtree_check' or  'no_subtree_check' specified  for export "*:/home/share/image" .
   Assuming default behaviour ( 'no_subtree_check' ).
   NOTE: this default has changed since nfs-utils version 1.0.x
 
root@iZ23lqgttauZ:image # service nfs-kernel-server
  * Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}
root@iZ23lqgttauZ:image # service nfs-kernel-server restart
  * Stopping NFS kernel daemon  [ OK ]
  * Unexporting directories  for NFS kernel daemon... [ OK ]
  * Exporting directories  for NFS kernel daemon... 
      exportfs:  /etc/exports [1]: Neither  'subtree_check' or  'no_subtree_check' specified  for export "*:/home/share/image" .
   Assuming default behaviour ( 'no_subtree_check' ).
   NOTE: this default has changed since nfs-utils version 1.0.x [ OK ]
  * Starting NFS kernel daemon  [ OK ]
root@iZ23lqgttauZ:image #

->然后NFS客户端再去访问试试:

结果死掉了。。。

?
1
root@chantyou:nfs_client_root # sudo touch test_client_write_3.txt

即,无法正常的写入NFS服务器,没有写入的权限。

不过稍等片刻,就好了,就生效了,有写入权限了:

?
1
2
3
root@chantyou:nfs_client_root # sudo touch test_client_write_4.txt
^Croot@chantyou:nfs_client_root # sudo touch test_client_write_5.txt
root@chantyou:nfs_client_root #

服务器端可以看到新写入的文件了:

?
1
2
3
4
5
6
7
8
9
root@iZ23lqgttauZ:image # ls -l
total 240
-rw-r--r-- 1 root   root    70545 May 28  2013 mmexport1369703131812.jpg
-rw-r--r-- 1 root   root    82168 Sep 12  2013 mmexport1378988706739.jpeg
-rw-r--r-- 1 root   root    85510 Nov 18  2013 p_large_0fOT_43d9000068f01263.jpg
-rw-r--r-- 1 nobody nogroup     0 Jul 23 15:55 test_client_write_2.txt
-rw-r--r-- 1 root   root        0 Jul 23 16:02 test_client_write_5.txt
-rw-r--r-- 1 nobody nogroup     0 Jul 23 15:42 test_client_write.txt
root@iZ23lqgttauZ:image #

注意,新写入的测试5文件的用户是root和root

->就是从NFS客户端来的root用户。

 

【总结】

之前两种办法,都可以解决此处的NFS客户端没有写入NFS服务器共享出来的文件夹的权限的问题:

(1)给NFS服务器端的文件夹添加other组的write权限:

?
1
chmod o+w  /home/share/image/

(2)给NFS服务器端的文件夹配置选项增加no_root_squash:

?
1
/home/share/image *(rw, sync ,no_root_squash)

记得要:

重新导出配置,再重启NFS服务:

?
1
2
exportfs -a
service nfs-kernel-server restart

并且再稍等一小会,才能真正生效。

转载请注明:在路上 » 【已解决】NFS客户端写入NFS共享文件夹出错:Permission denied


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【已解决】NFS客户端写入NFS共享文件夹出错:Permission denied 的相关文章

  • Jetty Plugin 9启动不喜欢icu4j-2.6.1.jar

    我对 mortbay 的 Maven jetty 插件 6 有相同的配置
  • 将 docker-compose.yml 中的包安装到 docker 容器中

    我是 docker 和 docker compose 的初学者 我需要你的帮助 我正在使用 docker compose 制作 PHP NGINX PostgresQL symfony 开发环境 这里是 web image nginx 1
  • Nginx 安全链接模块不适用于 php 文件,但适用于静态文件

    我在用http nginx org en docs http ngx http secure link module html http nginx org en docs http ngx http secure link module
  • 您可以在不暴露任何端口的情况下使用 nginx 反向代理到 docker 容器吗?

    我想知道是否可以将 nginx 与 docker compose 一起使用作为 api 网关 反向代理 ssl 终止点 而不暴露其后面容器上的任何端口 IE 当容器链接到通过 nginx 进行通信时 我只想使用 docker compose
  • Kibana 5.5.1 位于 nginx 1.13 代理之后(dockerized)

    Goal 我想在 docker 容器中运行 elk 堆栈 能够通过 nginx 代理访问 ELK Stack 以绕过服务的各个端口 Kibana 服务 默认端口 5601 http
  • 如何与使用 child_process.spawn 创建的新创建的服务器交互

    我正在尝试为我的私人托管的 反恐精英全球攻势 服务器制作一个前端 当我点击运行服务器时 在前端 一切正常 服务器启动并记录到控制台 但是如何查看服务器IP地址 服务器中的玩家等信息呢 这是我到目前为止运行服务器的内容 router post
  • Java TCP Echo 服务器 - 广播

    我有一个简单的回显服务器 我希望当连接的用户向服务器键入任何内容时 所有其他客户端和该客户端都会收到消息 MOD 它现在不会发送给所有客户端 但它应该发送 而且我只是不知道我的代码出了什么问题 所以现在它只会将消息 MOD 发送给发送消息的
  • 在龙卷风 v4+ 下,WebSocket 连接被拒绝并显示 403

    我有一个旧的龙卷风服务器 可以处理普通的 WebSocket 连接 我通过 Nginx 将这些连接从 wss info mydomain com 代理到 wss mydomain com 8080 以便绕过阻止非标准端口的客户代理 最近升级
  • 在 nginx 后面使用 GitLab 启用 basic_auth?

    我已经成功安装了 GitLab 来管理私有存储库 这真是太棒了 我遇到的问题是默认情况下 当任何人访问我的子域时都会显示 Gitlab 登录信息 我想在用户获得 GitLab 登录屏幕之前使用 basic auth 层保护整个区域 不幸的是
  • 防止 NGINX 中的一个 WebSocket 连接泛滥?

    我使用这个配置来防止我的服务器上出现类似 DOS 的洪水 limit req zone binary remote addr zone one 10m rate 10r s limit req zone binary remote addr
  • nginx proxy_pass 省略路径

    我已经配置了 nginx 反向代理 location root var www html index index html location login proxy pass http 127 0 0 1 9080 proxy set he
  • nginx 504 网关超时

    我正在 nginx 上使用 phusion passenger 运行 Rails3 0 7 项目 当我正在做 ajax 时 大约需要 15 分钟来处理 调用 ajax 10 分钟后 它会跳出一个 Firebug 错误 显示 504 Gate
  • 设置 nginx 具有多个 IP

    我的 nginx 配置文件位于 etc nginx sites available 下 有两个上游说 upstream test1 server 1 1 1 1 50 server 1 1 1 2 50 upstream test2 ser
  • Nodejs 异步函数是否使用所有 CPU 核心?

    如果我使用异步函数或带有回调的函数 例如本机 fs 模块 http 等 它们会默认在所有 cpu 核心上运行吗 或者整个系统只使用 1 个核心 Node js 中的一些异步操作 例如文件 I O fsmodule 将通过 libuv 中的线
  • 部署解耦的前端+后端应用程序

    我使用两个完全解耦的组件编写了一个网络应用程序 一个基于 Place Framework 并服务以下请求的 API 类型 api 任何客户 基于解耦的前端AngularJS建造使用grunt build 现在 前端与API但我希望这两个单元
  • 使用 Django 管理界面的 Node.js 应用程序

    我想使用 node js 构建一个新应用程序 但它需要相当多的后端管理 而我宁愿不必构建 我在 django 中有一些现有代码 并且非常喜欢用于处理后端管理的内置管理界面 我是否可以使用 nginx 之类的东西将所有流量定向到我的 node
  • GitLab 发布临时 IP 禁令 - 403 禁止

    我的 GitLab 实例设置有时会对我们自己的 IP 地址实施 IP 禁令 导致办公室中的所有用户在任何网页或 git 请求上都会收到 403 Forbidden 该禁令的实施是由于身份验证重复出现错误 这完全是一个单独的问题 但我想防止我
  • Nuxt.js 使用 https 调用服务器端 API 的问题

    当我使用 HTTP 时 我遇到 nuxt 服务器端 API 调用问题S 在客户端 一切都很好 当我通过链接在客户端切换页面时 API 可以工作 但是当我按下 Ctrl f5 并且数据将在服务器端预取时 实际上没有 API 调用 也没有提供数
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上
  • 无法从外部访问在 docker swarm 上运行的容器

    我正在 docker swarm 上运行我的容器 资产前端service 是我的前端应用程序 它在容器内运行 Nginx 并公开端口 80 现在如果我这样做 curl http 10 255 8 21 80 http 10 255 8 21

随机推荐

  • WIN10安装MYSQL教程

    1 下载安装包 地址 https www mysql com cn downloads 拉到最下面 找到MySQL Community Edition GPL 注 GPL版本为开源 非商用 commercial为商用版 点击链接进入后 会有
  • eclipse安装lombok插件

    1 下载lombok jar lombok jar官方下载地址 https projectlombok org download 如果下载不了的话 下面是我个人的百度云资源 链接 https pan baidu com s 1Eiwy0Kb
  • 实现今日头条-西瓜视频-抖音视频自动化上传(如希望无人值守长期定时执行的话,需自行优化代码)

    业务合作请联系 13958075150 1 首次登录使用selenium登录并将cookies存为文件 实现免密登录 并便于后期维护cookie 首次使用selenium登录 并将cookies存为文件 from selenium impo
  • 力扣 3. 无重复字符的最长子串

    一 题目 二 示例 三 思路与代码 1 思路 1 采用滑动窗口算法 2 滑动窗口收缩的关键 当当前移入窗口的字符其计数已经超过1时 则进行窗口的收缩 3 无重复子串长度更新的时机 当窗口中没有重复字符时 更新长度 4 具体见代码解析 2 代
  • 红黑树——RBTree

    红黑树的概念 红黑树 是一种二叉搜索树 但是 在每个节点上增加一个存储位表示节点的颜色 可以是red或者black 通过对任何一条从根到叶子的路径上各个节点着色方式的限制 红黑树确保没有一条路径会比其他路径长出两倍 因而是接近平衡的 红黑树
  • ngrok实现内网穿透,让家里的笔记本也能做服务器

    背景 家里淘汰了一台笔记本 windows系统装起来很卡 于是装了个linux系统 这台笔记本有2G内存 奔腾双核处理器 配置比我在阿里云上买的ECS高多了 于是想着给它利用起来 研究了一下 发现ngrok内网穿透能实现这个功能 刚好我也有
  • 临界区锁 InitializeCriticalSection()

    首先 文章主体经过以下两篇文章整理而成 http blog csdn net lys07962000 article details 41707213 http blog csdn net bytxl article details 465
  • char** 和const char** 问题

    目录 1 char 和const char 问题 2 NUL和NULL问题 3 sizeof返回值问题 4 malloc下的strlen问题 1 char 和const char 问题 今天看书看到一个很有意思的问题 不过在看问题之前 首先
  • 求最短回文串长度

    今天写了一道题 是这个题噢 让求最短回文串长度 我用马拉车写了半天呢 写着写着想 马拉车求得不是最长回文串的长度吗 然后看了一下题解 因为这题数据量不大 所以这样直接就过了 include
  • 基于c语言实现 字符串排序

    基于c语言实现 字符串排序 一 简单的字符串排序 举例实现 题目 代码 一 简单的字符串排序 给定有限个字符串 将其按照大小顺序排列 此时的大小顺序简单来说我们可以先认为是ASCLL码的大小顺序 由此我们只需要比较字符串的ASCLL码的大小
  • 统计数据上的因果推断--关于Yule-Simson Paradox

    在 高 维 列 联 表 分 析 中 有 一 个 很 有 名 的 例 子 叫 做 Yule SimpsonParadox 此悖论表明 X和 Y 边缘上正相关 但是给定另外一个变量 Z后 在 Z的每一个水平上 X和 Y可能负相关 下面表 1 就
  • ChatGPT常用的指令(prompts)系列十——房地产经纪人、物流人员、牙医、网站设计

    系列文章目录 内容翻译自 https github com f awesome chatgpt prompts 并加入自己的实践内容 1 ChatGPT常用的提示语 prompts 系列一 2 ChatGPT常用的提示语 prompts 系
  • rancher 与 kubernetes的关系(1)

    rancher 和 kubernetes 有什么区别 总体来说 rancher 和 k8s 都是用来作为容器的调度与编排系统 但是rancher不仅能够管理应用容器 更重的一点是能够管理k8s集群 rancher2 x 底层基于k8s调度引
  • TCP连接、Http连接与Socket连接的区别

    文章目录 HTTP Socket TCP的区别 Socket 套接字 Socket长连接 什么时候用长连接 短连接 TCP连接和HTTP连接的区别 TCP连接与Socket连接的区别 HTTP连接与Socket连接的区别 常见问题 什么时候
  • 嵌入式岗位Makefile常见面试题(1)

    第一题 变量使用 解析 Makefile中变量的引用格式就是 变量名 这是没什么好讲的 记住就行 在Makefile中有一些特殊的宏定义需要记住 表示生成的目标 lt 表示生成依赖的文件 是执行上一条指令的返回值 可以参考博客 Makefi
  • IPv6 时代如何防御 DDoS 攻击?

    在互联网世界 每台联网的设备都被分配了一个用于标识和位置定义的 IP 地址 20 世纪 90 年代以来互联网的快速发展 联网设备所需的地址远远多于可用 IPv4 地址的数量 导致了 IPv4 地址耗尽 因此 协议 IPv6 的开发和部署已经
  • devC++强制关机代码shutdown(DAY 26)

    文章目录 1 代码实现 2 运行结果 恶搞同学 这种方式只用改个头文件 再在文章中间加一行输出即可 1 代码实现 2 运行结果 恶搞同学 增加编程乐趣 这种方式只用改个头文件 再在文章中间加一行输出即可
  • MMDetection——GPU训练

    预先知识 CONFIG FILE config 里面的文件 config faster rcnn r50 fpn 1x coco py CHECKPOINT FILE 模型权重所在位置 checkpoints faster rcnn r50
  • elk笔记17--alias

    elk笔记17 alias 1 别名简介 2 创建别名 2 1 创建索引时候创建别名 2 2 为已有索引添加别名 3 查看索引 4 删除别名 4 1 直接删除别名 4 2 使用actions删除别名 5 说明 1 别名简介 索引 别名 就像
  • 【已解决】NFS客户端写入NFS共享文件夹出错:Permission denied

    原文地址 https www crifan com nfs client write to nfs server share folder error permission denied 背景 折腾 已解决 在远程Ubuntu服务器中开通N