阿里云NAS NFS服务的文件访问控制

本文涉及的产品
访问控制,不限时长
简介: 本文介绍在阿里云NAS NFS服务上实现文件访问控制的方式。

对于NFS类型的文件系统,阿里云NAS目前提供基于user id (uid)和group id (gid)的经典POSIX访问控制方式。具体来说,每个文件或目录的拥有者(owner)是由uid和gid描述的,文件的访问控制由文件mode来描述。一般来说,文件的owner或者root用户可以通过chown命令修改文件的owner,也可以通过chmod命令修改文件mode信息。基本的访问控制mode也即经典的rwxrwxrwx控制串。其中前三位表示owner uid对应的用户拥有的权限读、写和执行权限,中间三位和最后三位分别是是owner gid对应的组以及所有其他用户(others)所拥有的读、写和执行权限。除此以外,mode还包括文件的setuid,setgid,和sticky bit,前两种权限是在执行程序时赋予进程可执行文件owner的权限,sticky bit在不同操作系统中有不同的用途,一般很少用到。对于上面chown和chmod的具体命令细节,用户可以在对应的man page或者其它的Unix/Linux使用说明中很容易地找到。举例来说,“chmod o+r a.txt”给除了uid对应的用户和gid对应的用户组中的用户之外的所有其他用户读a.txt的权限。一点需要注意的是NFS卷的id 映射设置,root squash设置决定了客户端root对远程NFS文件操作时是否还映射为root,用户需要根据自己的安全需求在阿里云NAS控制台上决定这个参数;类似的还有是否设置all_squash来将不同用户都映射为匿名用户,进一步具体的解释可以参考NFS exports的Linux man page (https://linux.die.net/man/5/exports) 中User Id Mapping部分。

和传统企业级IT设施及其它的云厂商如AWS一致,阿里云目前的NFS实现支持AUTH_SYS安全模式,也即当前客户端用户的uid/gid会被NFS client送到服务器端,在服务器端和文件或目录的owner信息比较,再和服务器端该文件的mode一起决定控制访问行为。可以看出如果不同Linux客户端不能保证uid/gid和具体用户映射关系的一致,访问控制会不能按照用户的本来意愿工作。举例来说,如果Linux client1上user1对应的uid是1000,user2对应的uid是1001,而Linux client2上user1对应的uid是1001,user2对应的uid是1000,这两台客户端的uid和用户的映射关系就出现了不一致的现象。如果user1 在client1上挂载NFS卷并在上面创建一个文件file,并通过修改file mode的方式限制该文件只能由owner uid和自己一致的人访问,当该用户在client2上登录以后由于uid的不一致,他会发现自己无法访问该文件,而不应该有权限的user2却可以对这个文件进行各种操作,甚至修改文件的owner。解决以上的id映射问题是NFS和其它很多UNIX/Linux应用提供用户级访问控制的前提,阿里云NFS的安全系统保证不会允许跨云账号的NFS访问,但是和传统企业级IT设施及其它的云厂商的产品一样,NFS子用户的id映射一致性需要通过用户自己配置客户端操作系统来解决。下面介绍两种常用的在Linux系统上保证跨机器用户/组信息一致的方式。

同步不同系统的本地用户
有很多的配置管理部署工具如Puppet、Chef等可以支持用户不同机器本地用户/组的同步,这样上面例子里user1和user2在不同系统上有不同uid的现象可以随着及时的同步被基本避免。对于客户端和子用户都不多的用户来说,最简单直接的方式是系统管理员通过在必要的时手工候修改/etc/passwd 和/etc/group 这两个配置文件来同步用户/组的信息。在进行了相应的用户信息修改以后,用户可以运行下面的命令来改变当前整个文件系统树(包括挂载的NFS卷)中相关文件的owner,使之与配置中id的修改一致,用户根据自己的UID/GID替换OLD_GID、NEW_GID、OLD_UID、NEW_UID。

  find / -group <OLD_GID> -exec chgrp <NEW_GID> '{}' \+
  find / -user  <OLD_UID> -exec chown <NEW_UID> '{}' \+

使用中央用户目录
用户可以在自己管理的系统中提供一个中央用户目录服务来管理用户信息,通过该目录登录保证了同一个用户uid/gid的一致性,这是最彻底和有效的方案。NIS是一个比较老的方式,曾经被广泛采用但是安全性不好;基于LDAP的方案是现在被广泛采用的高安全性的方式。LDAP的配置和使用都比较复杂,系统管理员需要对相关机制有比较深入的了解来保证自己配置的合理安全。我们以Ubuntu 16.04系统为例,给出用OpenLDAP来进行用户管理的大致步骤。进一步的细节请参考云栖社区的文章”OpenLDAP installation“”openldap的配置手册“”《Linux/UNIX OpenLDAP实战指南》——导读“等文章,以及其它网站的公开文档如”使用 PAM 集成 OpenLDAP 实现 Linux 统一管理系统用户““OpenLDAP Server”

  • 安装OpenLDAP server。以ubuntu 16.04系统为例,运行下面的命令:
  sudo apt-get update
  sudo apt-get install slapd ldap-utils
  • 通过dpkg对slapd进行基本配置。
 sudo dpkg-reconfigure slapd
  • 用户编辑并通过ldapadd加入people和groups等基本的Organizational Unit来作为描述用户和组的基础。
  dn: ou=people,dc=aliyun-test,dc=net
  objectClass: organizationalUnit
  ou: people

  dn: ou=groups,dc=aliyun-test,dc=net
  objectClass: organizationalUnit
  ou: groups
  • 通过slappasswd生成用户密码的SHA Hash并加入用户user1的信息,包括用户名、密码,uid,gid, 缺省shell, home目录等, 通过ldapadd命令将用户和组加入LDAP数据库。之后所有客户端的对user1的登录都可以用LDAP为基础,保证登录成功以后在不同客户端上都会使用2000作为该用户的uid。
  dn: uid=user1,ou=people,dc=aliyun-test,dc=net
  objectClass: inetOrgPerson
  objectClass: posixAccount
  objectClass: shadowAccount
  cn: user1
  sn: user1
  userPassword: {SSHA}QD1jJDdLUJeeZ1utKYfxpaSzygIHa88L
  loginShell: /bin/bash
  uidNumber: 2000
  gidNumber: 2000
  homeDirectory: /home/user1
  
  dn: cn=user1,ou=groups,dc=aliyun-test,dc=net
  objectClass: posixGroup
  cn: user1
  gidNumber: 2000
  memberUid: user1
  • 用户可以通过ldapdelete和ldapmodify等工具进行用户和组的删除修改。
  • 安装LDAP client,按照过程中会提示填写LDAP server地址等配置项。
  apt-get -y install libnss-ldap libpam-ldap ldap-utils
  apt-get -y install phpldapadmin
相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
2月前
|
消息中间件 存储 Serverless
函数计算产品使用问题之怎么访问网络附加存储(NAS)存储模型文件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2天前
|
Unix Linux 网络安全
NFS挂载服务
【10月更文挑战第14天】
7 2
|
2月前
|
存储 Ubuntu Linux
NFS服务部署全攻略:从零到一,轻松驾驭网络文件系统,让你的文件共享像飞一样畅快无阻!
【8月更文挑战第5天】NFS(网络文件系统)能让网络中的电脑无缝共享文件与目录。基于客户端-服务器模式,用户可像访问本地文件般透明操作远程文件。部署前需准备至少两台Linux机器:一台服务器,其余作客户端;确保已装NFS相关软件包且网络通畅。服务器端安装NFS服务与rpcbind,客户端安装nfs-utils。
70 4
|
3月前
|
存储 算法框架/工具
Ceph提供nfs服务
Ceph提供nfs服务
52 6
|
2月前
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。
110 0
|
4月前
|
存储 运维 Serverless
函数计算产品使用问题之不再使用NAS存储服务且希望停止扣费时,该如何操作
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
Ubuntu
ubuntu搭建NFS服务 磁盘共享 nfs 搭建
ubuntu搭建NFS服务 磁盘共享 nfs 搭建
176 2
|
5月前
|
存储 网络协议 Linux
NFS(Network File System 网络文件服务)
NFS(Network File System 网络文件服务)
|
4月前
|
弹性计算 运维 Serverless
函数计算产品使用问题之想往nas传个文件,该怎么操作
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
存储 运维 Serverless
函数计算产品使用问题之模型存放在NAS中,如何删除NAS中的模型文件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。