Linux连接(NFS)群晖NAS遇到的问题(最终选SetGID+umask)

news/2025/1/10 18:17:49/文章来源:https://www.cnblogs.com/iSun520/p/18663534

 

说明:公司在寻找存储服务器,分布式太贵,后来找来厂家提供服务器试用一段时间,可以的话再买更高型号的来用,此文章记录整个过程,可能比较杂,等以后有时间再来整理吧。

需求:想要在服务器之间共同访问并操作这里的存储,并且还要再Windows上查看(需求又改了Windows上也会做增删改的操作。。)

实际情况分析:客户端类型:CentOS、Ubuntu、Windows(注:每台服务器上都有多个账号,这点很重要也是遇到的最主要的问题),根据需求只要Linux间实现权限统一并赋予对应账号的读写权限就好了,Windows端只读就好。

 操作:

1.1、设置并挂载存储

拿到服务器后,第一时间在群晖中配置 NFS作为服务器间的共享

(NFS(Network File System,网络文件系统)是Unix系统族中的一个分布式文件系统协议,广泛用于Linux和Unix操作系统之间共享文件和目录。跨平台性上不如SMB协议。)

NFS挂载:

挂载也很简单mount -t nfs <NAS的IP>:<群晖上对应的路径>  <Linux上的挂载路径>

示例:mount -t nfs 192.168.123.22:/volume1/test /data/testnfs

根据后边的改动会改成(增加acls的管控:mount -t nfs -o acl 192.168.123.22:/volume1/test /data/testnfs

(注:如果没装nfs相关程序需要装下

sudo apt-get update
sudo apt-get install nfs-common

 

 

 

 

 

 

1.2、问题:好的,不出意外的话,这时候出现了问题~~ 

由于是多终端并且多账号,NFS权限管理不到这么细(NFS实现多服务器共同增删改查同一个文件的话,需要每台服务器上账号的uid是一样的(/etc/passwd文件中有,修改方法我写在下边,注意这里先不用改!!!)。

这里没办法实现uid相同 因为每台服务器上都有多个账号,最多做到gid相同,那就试下通过gid来控制权限吧!

1.3、修改用户GID

Linux修改用户UID和GID的方法:

1、查看用户的相关信息:

  cat /etc/passwd

2、停止该用户下所有的进程、取消此账号的所有挂载(避免不必要的报错)

  注:不清楚的话 此操作一定要向相关人员询问清楚!!!

  sudo kill -9 进程ID

  sudo umount 挂载路径 (可通过df -h来查看)

3、修改此用户的UID和GID

  #修改test用户的UID,由1000修改成1001
  sudo usermod -u 1001 test
  #修改test用户的GID,由1000修改成1001

  (注:-g会退出原来的“默认”群组,非必要建议使用-ag,这样会导致用户再创建文件时候,群组权限还是原来的群组这个我后边会说-

使用①设置SETGID位(针对组)、②使用默认ACL(访问控制列表)③调整umask值)

  sudo usermod -g 1001 test

  (usermod参数说明:-a:将用户添加到新的组中,而不会从其他组中移除用户;-g:群组id;-G:指定要添加的群组名称)

4、重新给test用户目录赋权限

  sudo chown -R test:test /home/test

5、其他问题,再次启动test用户下的进程发现没有权限or启动失败

  #需要清理/tmp临时目录下残留的test用户的进程文件

  cd /tmp;ll

  查看test的进程文件然后sudo rm

 

(原文:https://www.jianshu.com/p/94fdfc601495)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

因为之前没有做群组控制,所以需要重新添加群组,并把对应的账号加入进来,并针对群组进行权限控制。

1.4、设置群组GID

Linux修改群组的GID并将用户添加进群组:

1、创建群组:

  sudo groupadd nfstest

2、这时候多个服务器间的新群组nfstest的GID可能不一样,在每个服务器上统一修改下就好(可在/etc/group中查看群组GID):

  sudo groupmod -ag 1008 nfstest(将nfstest群组的GID改成1008:gtoupmod参数说明:-a参数表示将用户添加到新的组中,而不会从其他组中移除用户;-G参数指定要添加的用户组。)

  验证是否修改GID成功:/etc/group或者getent group nfstest

3、将test用户加入到nfstest群组

  sudo usermod -aG nfstest test

  验证test用户是否加入成功:groups test

 

4、更新与该GID关联的文件和目录权限(有需要的的话)

  sudo chown -R :1008 /data/testnfs/main

  (注:这里选择了在挂载目录下创建一个main目录进行权限配置!!)

 

 

 

 

 

 

 

 

 

 

 

上边做完一系列准备后,就可以开始方案选择(选取几个方案进行测试,最后根据其优缺点和实际需求来确定最终使用哪一个办法)

这里测试了:设置SETGID位(针对组)、②使用默认ACL(访问控制列表)③调整umask值

2.1、对群组(GID)进行权限控制

修改完GID后,接下来重点是:将新添的文件全部继承父目录的权限

首先要做的是设置SERGID,②和③都需要用到①

2.1.1、给目录设置SetGID

(SetGID(Set Group ID on execution)位是一个特殊的权限位,当它被设置在一个目录上时,任何在这个目录中创建的文件或子目录都会继承这个目录的组所有权,而不是创建者的主组所有权。这有助于保持目录中文件的一致性,特别是在多用户环境中共享文件时非常有用。)

  sudo chmod g+s /data/testnfs/main

  或者 sudo chmod 2775 /data/testnfs/main(2-代表设置SetGID位)

 

(注:SetGID位对目录有效,可以使得新文件和子目录继承父目录的组归属,但不会改变文件和目录的权限

并且默认情况下,Linux不会让新文件完全继承父目录的所有权限(包括特殊权限如setuid, setgid))

 

 

 

 

 

 

2.2.2、使用ACL(访问控制列表)

1、ACL提供了更灵活的权限管理方式,可以为文件和目录设置更复杂的权限规则。例如,可以为目录设置默认的ACL,使得新文件和子目录自动继承这些权限:

  setfacl -m d:u:test:rwx /date/testnfs/main
  setfacl -m d:g:nfstest:rwx /date/testnfs/main

 

  [ d:表示设置默认的ACL规则。]

  [ u:username:rwx表示为用户username设置读、写、执行权限.。]

  [ g:groupname:rwx表示为组groupname设置读、写、执行权限。]

  [ 这样,在/path/to/directory目录下创建的新文件和子目录将自动继承这些ACL规则定义的权限。]

 

( 注:挂载时候需要加上 -o acl 参数(mount -t nfs -o acl 192.168.123.22:/volume1/test /data/testnfs

 

 

 

 

 

 

 

 

 

 

2.2.3、调整umask值

1、umask(User Mask)是一个用于定义创建文件和目录时默认权限的掩码。它决定了新文件和目录的初始权限

  [ umask值是一个八进制数,它指定了在创建文件或目录时应该从完全可访问权限中移除哪些权限。]

  [ 具体来说,umask 值会从新创建的文件或目录权限中去除相应位的权限。]

  ①查看umask值:

    umask

    查看创建的默认权限:umask -S

  ②设置umask值:

    umask 002

    [ 0表示所有者权限不受限。]

    [ 0表示组权限不受限制。]

    [ 2表示其他用户权限被限制为不写。]

    [ 新创建的文件默认权限将是664,新创建的目录默认权限将是775 ]

 

2、关于配置umask值:

  永久设置umask值,可以将其添加到用户的shell配置文件中(如.bashrc或/etc/profile)

    echo 'umask 022' >> ~/.bashrc

   ①umask值的影响

    1.文件的默认权限:新创建的文件默认具有666的权限(即读写权限对所有用户开放),但实际的权限会受到umask值的影响。umask值中的每一位都会从666中减去相应的权限。

    2.目录的默认权限:新创建的目录默认具有777的权限(即读写执行权限对所有用户开放),同样地,实际的权限也会受到umask值的影响umask值中的每一位都会从777中减去相应的权限。

   ②计算实际权限

    实际权限 = 默认权限 - umask值

    例如,如果umask值为022:

      -对于文件:666 - 022 = 644
        ·644表示所有者有读写权限,组和其他用户只有读权限。
      -对于目录:777 - 022 = 755
        ·755表示所有者有读写执行权限,组和其他用户只有读执行权限。

 

(注:umask定义了新创建文件和目录的默认权限。虽然它不能直接使新文件继承父目录的权限,但可以通过配置适当的umask来限制或开放新文件的默认权限。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(注:特殊权限位‌:Linux还支持特殊权限位,如SUID(Set User ID)、SGID(Set Group ID)和Sticky Bit。这些权限位可以进一步影响文件和文件夹的权限继承和行为。)

3.1、其他(没试过不知道效果)

利用PAM模块(Pluggable Authentication Modules)
  对于需要更加动态地管理权限的情况,某些Linux发行版提供了通过PAM模块在用户登录时自动应用特定权限的能力。然而,这种方法较为复杂,通常不用于简单的权限继承需求。

3.2、方案选择

最终使用了SetGID+umask的方案来操作(但还是会有一些目前不了解的一些权限问题),等以后有时间在来优化吧。

(啊啊啊,,,改需求了,Windows也要增删改。。改回SMB共享了,不用NFS了,不过也学习到不少知识挺好~~)

 

写在最后:

#域控账号的还可以考虑这个:https://www.zhugh.com/synology-nas-nfs-kerberos-pei-zhi-yu-shi-yong/#toc_3

#无映射方式挂载:https://www.zhugh.com/synology-nfs-wu-ying-she-gua-zai-pei-zhi/

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867258.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电机控制的数字化升级:基于DSP和FPGA的仿真与实现

​数字信号处理器(DSP,Digital Signal Processor)在工业自动化领域的应用日益广泛。DSP是一种专门用于将模拟信号转换成数字信号并进行处理的技术,能够实现信号的数字滤波、重构、调制和解调等多项功能,确保信号处理的精确性和稳定性。特别是在电机控制系统中,DSP的应用尤…

中考英语优秀范文-热点话题-传统文化-001 Chinese Treasures: Opera Paper Art 国宝探秘:京剧与剪纸

1 写作要求 坚定文化自信,弘扬中华优秀传统文化,做中华文明的传播者是新时代中国青少年的责任与使命。假如你是李华,近期,一批外国朋友要到你所在的学校参观访问,请用英语写一篇发言稿,向他们介绍中华优秀传统文化。 内容包括: 1 欢迎朋友们的到来; 2 总体介绍中国传统…

货梯载人监控报警自动停梯系统

货梯载人监控报警自动停梯系统利用安装在货梯轿厢内的监控摄像头,实时捕捉轿厢内的画面信息,货梯载人监控报警自动停梯系统一旦确认有人员进入货梯轿厢监测范围内,系统便会迅速输出报警信号。同时,与电梯控制系统实现联动,强制电梯不关门、不运行,从而将人员拒之于危险之…

【YashanDB知识库】使用DBeaver 插入数据 nvarchar字段插入为空

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7901516.html?templateId=1718516 【问题分类】DBeaver使用 【关键字】DBeaver、nvarchar 【问题描述】使用DBeaver ,插入数据nvarchar字段插入为空。其他字段都有数据,且插入没有报错。【问题原…

[.NET] 使用客户端缓存提高API性能

在现代应用程序中,性能始终是一个关键的考虑因素。无论是提高响应速度,降低延迟,还是减轻服务器负载,开发者都在寻找各种方法来优化他们的API。在Web开发中,利用客户端缓存是一种有效的方法,可以显著提高API的性能。本文将结合Replicant与Delta库,深入探讨如何在.NET中使…

ABB机器人IO板DSQC651维修检查方法

ABB机器人作为工业自动化的重要设备,其稳定性和可靠性对于生产线的持续运行至关重要。然而,在实际使用中,由于各种原因,可能会出现ABB机器人IO板DSQC651故障,影响机器人的正常运行。 一、ABB工业机械臂IO板故障的常见原因 ABB机器人IO板故障的原因可能有很多,常见的包括电…

Flutter进阶(6):详解 Key

一、Key是什么? 用官方的说法就是:Key 是 Widget、Element 和 SemanticNodes 的唯一标识符。 组件在更新的时候,其状态的保存主要是通过判断组件的类型或者 key 值是否一致。因此,当各组件的类型不同的时候,类型已经足够用来区分不同的组件了,此时我们可以不必使用 key。…

数据的涟漪效应:实时数据赋能保险资产管理,打造数字化、信息化、智能化的保险新业态

本期内容以保险公司的具体案例为切入点,探讨数字化技术如何助力保险资产管理行业应对数据管理的挑战并实现创新突破。使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC + 流处理 + 数…

KingbaseES RAC在线扩容案例

KingbaseES、KingbaseES RAC案例说明: KingbaseES RAC在两节点的基础上,执行在线扩容为3节点。 集群版本: test=# select version();version ---------------------KingbaseES V008R006 (1 row)集群架构:操作系统: [root@node210 KingbaseHA]# cat /etc/os-release NAME=&…

Xinference:企业级大模型推理和部署平台

导读 近年来,大语言模型(LLM,后简称大模型)的发展突飞猛进。本文将分享未来速度公司在开源领域以及大模型落地过程中的核心产品——Xinference,其定位是一个真正企业级的、严肃的大模型推理和部署平台。公司致力于在 LLMOps(大模型运维)过程中,帮助大家降低部署的成本和…

【Java开发】面对一个访问量比较高的API,我们应该如何去应对突然暴涨的流量呢?

一、流量管理与限流 1. 流量限制和速率限制: 例如,当请求频率超过预设阈值时,系统可以自动限制或拒绝额外的请求,从而保护后端服务免受过多请求的影响。 通过API网关或负载均衡器进行配置,以控制每个用户或IP的请求速率。 2. 使用限流算法: 令牌桶算法:适合应对瞬时突发…

高效团队协作:在线工具在酒店管理中的实践

1. 酒店运营的复杂性与信息管理的挑战 酒店行业是一个高度复杂和依赖信息的行业。从前台接待到客房服务,从市场营销到财务管理,每个环节都需要精准的数据对接与高效的沟通。然而,在传统管理模式下,信息传递通常依赖于邮件、电话或线下会议,不仅效率低下,还容易导致信息遗…