Linux
使用 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 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。