使用NFSv4 ACL控制Samba文件系统的访问

本文涉及的产品
对象存储 OSS,20GB 3个月
云备份 Cloud Backup,100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文介绍如何通过Samba服务实现NFS文件系统以SMB协议进行文件共享,并通过NFSv4 ACL控制权限。

本文介绍如何通过Samba服务实现NFS文件系统以SMB协议进行文件共享,并通过NFSv4 ACL控制权限。

前提条件

使用NFSv4协议挂载文件系统,详情请参见挂载NFS文件系统

背景信息

目前有客户存在以下使用场景:在服务器上挂载NFS文件系统后,使用Samba服务将此文件系统以SMB协议共享给其他Windows用户使用。在Samba服务中,可以创建用户并拥有Windows端的用户名和密码,也拥有Linux端的用户名(与Windows端的用户名相同)和密码(可以与Windows端不同)。Samba端可以在文件系统上设置valid users字段控制哪些用户/群组可以访问或者读写该文件系统;对于文件级别的控制,Samba会将NFSv4 ACL转化为SMB权限,来控制某个用户/群组的访问权限。

说明 目前,ACL功能只支持华北 3(张家口)、华北 5(呼和浩特)、亚太东南 2(悉尼)、亚太东南 3(吉隆坡)和美国西部 1(硅谷)地域,并且需要通过工单提交申请后才能使用。

操作步骤

本步骤以CentOS操作系统为例,介绍如何设置NFSv4 ACL,并以Samba进行输出。其他的Linux操作系统的流程类似,命令稍有不同。

1. 安装Samba服务。

  • 下载Samba 4.11.2代码。

    您可以在Samba Github发布页面Samba主页下载Samba 4.11.2代码。

  • 安装Samba编译所依赖的软件包。

    找到CentOS7 bootstrap.sh依赖包并下载脚本bootstrap/generated-dists/centos7/bootstrap.sh,然后执行以下命令进行安装。详情请参见Package Dependencies Required to Build Samba

    chmod +x bootstrap.sh
    sudo ./bootstrap.sh
    
  • 解压Samba 4.11.2压缩包。

    tar -zxvf ~/samba-4.11.2.tar.gz
    cd ~/samba-4.11.2
    
  • 编译Samba服务。

    bash sudo ./configure --sbindir=/sbin/ --sysconfdir=/etc/samba/ --mandir=/usr/share/man/ --with-static-modules=vfs_nfs4acl_xattrbash

如果编译成功,将提示如下类似信息。如果报错,请参见Build Samba from Source

'configure' finished successfully (1m2.432s)
  • 安装Samba服务。

    make
    make test
    sudo make install
    

2. 创建Samba用户。

本文假设创建普通用户player,属于普通用户群组players;管理员admini,属于管理员群组adminis;另外再创建一个用户anonym,属于群组anonym_group。

  • 创建用户和用户组。

    sudo useradd player
    sudo groupadd players
    sudo usermod -g players player
    sudo useradd admini
    sudo groupadd adminis
    sudo usermod -g adminis admini
    sudo useradd anonym
    sudo groupadd anonym_group
    sudo usermod -g anonym_group anonym
    
  • 给Samba用户创建SMB挂载密码。

    sudo ~/samba-4.11.2/bin/smbpasswd -a player
    sudo ~/samba-4.11.2/bin/smbpasswd -a admini
    sudo ~/samba-4.11.2/bin/smbpasswd -a anonym
    

说明 smbpasswd的位置在编译的目录中。执行编译版本的smbpasswd时会有如下提示,非编译版本smbpasswd是没有的。

Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED

3. 设置smb.conf配置文件。

安装Samba完成后,/etc/samba/smb.conf是默认的配置文件。打开/etc/samba/smb.conf,进行如下配置,更多smb.conf配置选项请参见The configuration file for the Samba suite

  • path = /mnt/nfs4:/mnt/nfs4为挂载的目标地址,请根据实际情况替换。
  • valid users:用于控制可以访问文件系统的用户或群组,请根据实际情况替换。
    [global]   server
     string = Samba Alibaba NAS NFS
     Server   server role = standalone server
     min protocol = SMB2_10
     log file = /var/log/samba/%m
     log level = 2
     valid users = @players, @adminis, @anonym_group
     writable = yes
    [nfs4]
     comment = Secure File Server Share
     path =  /mnt/nfs4
     vfs objects = nfs4acl_xattr
     nfs4:mode = simple
     nfs4acl_xattr:encoding = nfs
     nfs4acl_xattr:version = 40
     nfs4acl_xattr:xattr_name = system.nfs4_acl
     nfs4acl_xattr:nfs4_id_numeric = yes
    

4. 启动Samba服务端Smbd。

sudo smbd

5. 将Smbd包装成Systemd服务。

  • 创建/etc/systemd/system/smbd.service文件。

  • 在/etc/systemd/system/smbd.service文件中添加如下内容。

    ```bash
    [Unit]
    Description=Samba Smbd Service
    After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/sbin/smbd
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target


- #### 重启systemctl。
```bash
sudo systemctl daemon-reload
  • 启动smbd.service服务。

    sudo systemctl enable smbd.service
    
  • 您也可以执行以下命令启动smbd.service服务。

    sudo systemctl restart smbd.service
    

6. 在Windows系统中验证Samba服务。

使用net use命令挂载Samba nfsv4文件系统。

net use * \\samba-IP\nfs4 <password> /user:<user>

挂载完成后,player、admini、anonym三个用户都可以访问该文件文件系统,也可以创建读写文件和目录。

7. 对NAS NFS文件系统设置NFSv4 ACL权限。

  • 安装NFSv4 ACL工具。

    如果已安装NFSv4 ACL工具,请跳过此步骤。

    sudo yum -y install nfs4-acl-tools
    
  • 对目录和文件设置NFSv4 ACL。

    本文假设创建目录dir0,针对目录dir0中的所有文件,授予players只读权限,授予admins读、写和执行权限,不授予其他用户权限。

    sudo umask 777
    sudo mkdir dir0
    sudo nfs4_setfacl -a A:fdg:`id -g players`:RX dir0
    sudo nfs4_setfacl -a A:fdg:`id -g admins`:RWX dir0
    sudo nfs4_setfacl -a A:fdg:OWNER@: dir0
    sudo nfs4_setfacl -a A:fdg:GROUP@: dir0
    sudo nfs4_setfacl -a A:fdg:EVERYONE@: dir0
    

    设置完成后,可执行sudo nfs4_getfacl dir0查看设置结果。

8. 在Windows系统中验证权限设置结果。

  • 使用admini身份挂载Samba nfsv4文件系统,在目录dir0下可以创建文件和子目录。
  • 使用player身份挂载Samba nfsv4文件系统,在目录dir0下无法创建文件和子目录,但可以打开及读取文件和子目录。
  • 使用anonym身份挂载Samba nfsv4文件系统,无法访问目录dir0下的文件和子目录。

Samba + NAS NFSv4 ACL的特性

  • NFS文件系统的NFSv4 ACL会被转化为SMB ACL在Windows系统的安全标签中显示。虽然安全标签中显示的SMB ACL只有Allow没有Deny,但是Samba还是会依照NAS NFSv4 ACL的规则进行判断。

  • 可以在SMB端设置SMB ACL并转化为NFSv4 ACL存入NFS文件系统。

  • 如果SMB ACL无法转化为NFSv4 ACL,例如在NFSv4 ACL中没有Deny,修改会失败。

  • 建议只在NFS端设置ACL,SMB端只作为客户端使用。

  • NAS NFSv4支持锁,可以支持SMB端和NFS端同时有多个客户端进行读写操作。

目录
相关文章
|
4月前
|
存储 安全 Unix
基于文件系统的ACL
【8月更文挑战第13天】
62 1
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(七)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(七)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(七)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(一)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(一)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(一)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(三)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(三)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(三)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(六)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(六)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(六)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(二)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(二)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(二)
|
Linux 网络安全 数据安全/隐私保护
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(五)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(五)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(五)
|
分布式计算 Hadoop Linux
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(四)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(四)
Linux网络管理,NAT网络配置,修改主机名称,主机映射,防火墙,系统启动级别,用户和用户组,为用户配置sudoer权限,文件权限管理,打包和压缩(四)
|
存储 安全 网络协议
RH358提供基于文件的网络存储--提供SMB文件共享
RH358提供基于文件的网络存储--提供SMB文件共享
232 0
RH358提供基于文件的网络存储--提供SMB文件共享
|
Linux 数据安全/隐私保护
用户权限-Linux系统ACL控制
用户权限-Linux系统ACL控制
319 0