Ubuntu 中用户组的 Samba 共享。用户无法访问其他用户创建的文件

Ubuntu 中用户组的 Samba 共享。用户无法访问其他用户创建的文件

我在服务器上使用 NFS 挂载了一个文件夹。该文件夹有子目录,我想使用 SAMBA 将特定文件夹共享给特定用户组。

它不能按预期工作,因为每个用户都可以创建文件,但他们只能访问自己的文件,而不能访问其他人的文件。

Samba 服务器上的 NFS 挂载:

172.16.54.56:/export/proyectos on /proyectos type nfs (rw,noatime,rsize=131072,wsize=131072,acregmin=10,acl,nfsvers=3,addr=172.16.54.56)

目前只有一个文件夹:

drwsrws---+ 22 root proyecto-innovacion 3,9K 2012-08-30 11:40 innovacion

然后,就有了来自两个用户的文件:

-rw-rwxr--+  1 jorge.suarez  proyecto-innovacion     0 2012-08-30 12:10 Archivo de Prueba
-rw-rwx---+  1 maria.tenorio proyecto-innovacion   42K 2012-07-30 11:55 correos.xlsx

那个“+”是因为 ACL,它被设置为给新文件设置适当的权限,这样这些文件就始终可以被组访问。这是我在 NFS 服务器上使用的唯一 ACL:

 # setfacl -d -m mask:007 /export/proyectos

事实上,两个用户可以使用 NFS 访问彼此的文件。

如果我理解正确,这个命令的输出就是,两个用户都被映射到 Samba 组,以防万一。

# 网络用户信息 jorge.suarez
输入root的密码:
域用户         
创新项目  
# 网络用户信息 maria.tenorio
输入root的密码:
域用户         
创新项目

这是 smb.conf。我也有一个homes部分,但我省略了它:

[全球的]
    工作组 = 工作组
    netbios 名称 = SAMBASRV
    服务器字符串 = %h 服务器(Samba,Ubuntu)
    接口 = 127.0.0.0/8,eth0
    passdb 后端 = ldapsam:"ldap://10.1.176.237"
    系统日志 = 0
    日志文件 = /var/log/samba/log.%m
    最大日志大小 = 1000
    dns 代理 = 否
    ldap 管理员 dn =“cn=目录管理器”
    ldap 组后缀 = ou=Groups,ou=CITIUS
    ldap 后缀 = dc=inv,dc=usc,dc=es
    ldap ssl = 否
    ldap 用户后缀 = ou=People,ou=CITIUS
    恐慌行动 = /usr/share/samba/panic-action %d
    主机允许 = 172.16.54.,127。
    主机拒绝 = 全部
    严格锁定 = 否
[创新]
    评论 = 创新项目
    路径 = /proyectos/%S
    有效用户 = @proyecto-innovacion
    只读 = 否
    创建掩码 = 0770
    目录掩码 = 0770
    可浏览 = 否
    可浏览 = 否

问题总结如下:创建文件的用户可以访问自己的文件,但不能访问其他人的文件。

答案1

我不得不放弃通过 NFS 使用 ACL。掩码无法正常工作。

我现在使用 inotify,并在启动时启动一个小脚本:

#!/bin/bash

# Directory name as argument. You MUST set it also down there before using it!

LOGFILE="/tmp/inotify-log.tmp"

inotifywait -mrq -e attrib,moved_to,create --format %w%f "$1" | while read FILE ; do
    # Ignore root FIXME you have to put here all possible root arguments
    if [ -d "$FILE" ] && [ $FILE == "/export/proyectos" ] || [ $FILE == "/export/proyectos/" ] ; then
        continue;
    fi
    # Get new permissions
    PERMISOS=$(stat -c %a "$FILE")
    if [ -d "$FILE" ] ; then
        if [ $PERMISOS -ne 2771 ] ; then
            NUEVOSPERMISOS=2771

        else
            NUEVOSPERMISOS=0
        fi
    else
        # Get permissions
        if [ ${#PERMISOS} -eq 3 ] ; then
            PERMISOS_ADICIONALES=0
            PERMISOS_USUARIO=${PERMISOS:0:1}
            PERMISOS_GRUPO=${PERMISOS:1:1}
            PERMISOS_OTROS=${PERMISOS:2:1}
        else
            PERMISOS_ADICIONALES=${PERMISOS:0:1}
            PERMISOS_USUARIO=${PERMISOS:1:1}
            PERMISOS_GRUPO=${PERMISOS:2:1}
            PERMISOS_OTROS=${PERMISOS:3:1}
        fi

        # Check permissions
        if [ $PERMISOS_USUARIO -ne $PERMISOS_GRUPO ] || [ 0 -ne $PERMISOS_OTROS ] ; then
            NUEVOSPERMISOS=${PERMISOS_ADICIONALES}${PERMISOS_USUARIO}${PERMISOS_USUARIO}0
        else
            NUEVOSPERMISOS=0
        fi

    fi

    # Set permissions
    if [ $NUEVOSPERMISOS -ne 0 ] ; then
        chmod $NUEVOSPERMISOS "$FILE"
                # Debug output
                OUTPUT="$(date) : $FILE ($PERMISOS -> $NUEVOSPERMISOS)"
                echo $OUTPUT >> $LOGFILE
    fi

done

权限现在已由此脚本修复,而不是通过 NFS 回落到 ACL。

相关内容