Linux

使用 Ubuntu 為使用者組共享 Samba。使用者無法訪問其他使用者創建的文件

  • November 22, 2012

我在伺服器上使用 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 admin dn = "cn=目錄管理器"
ldap 組後綴 = ou = 組,ou = CITIUS
ldap 後綴 = dc=inv,dc=usc,dc=es
ldap ssl = 否
ldap 使用者後綴 = ou=People,ou=SWIFT
恐慌動作 = /usr/share/samba/panic-action %d
主機允許 = 172.16.54., 127。
主機拒絕=全部
嚴格鎖定 = 否
[創新]
評論 = 創新項目
路徑 = /projects/%S
有效使用者 = @project-innovation
只讀 = 否
創建遮罩 = 0770
目錄遮罩 = 0770
可瀏覽 = 否
可瀏覽=否

總結這個問題,創建文件的使用者可以訪問他自己的文件。但沒有其他人的文件。

我不得不放棄通過 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。

引用自:https://serverfault.com/questions/422819