我在服务器上使用 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。