Назад | Перейти на главную страницу

Общий ресурс Samba для групп пользователей с Ubuntu. Пользователь не может получить доступ к файлам, созданным другими пользователями

У меня есть папка, смонтированная с помощью NFS на сервере. В этой папке есть подкаталоги, и я хочу предоставить доступ к определенным папкам определенным группам пользователей с помощью SAMBA.

Это работает не так, как ожидалось, потому что каждый пользователь может создавать файлы, но тогда они могут получить доступ только к своим собственным файлам, а не к файлам от других.

Монтирование NFS на сервере Samba:

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, настроенного для установки надлежащих разрешений для новых файлов, поэтому они всегда могут быть доступны для групп. Это единственный ACL, который я использую на сервере NFS:

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

Фактически, оба пользователя могут обращаться к файлам друг друга с помощью NFS.

Если я правильно понимаю вывод этой команды, оба пользователя правильно отображаются в группы Samba, на всякий случай.

# net user info jorge.suarez
Enter root's password:
Domain Users         
proyecto-innovacion  
# net user info maria.tenorio
Enter root's password:
Domain Users         
proyecto-innovacion

Вот файл smb.conf. У меня также есть homes раздел, но я его пропустил:

[global]
    workgroup = WORKGROUP
    netbios name = SAMBASRV
    server string = %h server (Samba, Ubuntu)
    interfaces = 127.0.0.0/8, eth0
    passdb backend = ldapsam:"ldap://10.1.176.237"
    syslog = 0
    log file = /var/log/samba/log.%m
    max log size = 1000
    dns proxy = No
    ldap admin dn = "cn=Directory Manager"
    ldap group suffix = ou=Groups,ou=CITIUS
    ldap suffix = dc=inv,dc=usc,dc=es
    ldap ssl = no
    ldap user suffix = ou=People,ou=CITIUS
    panic action = /usr/share/samba/panic-action %d
    hosts allow = 172.16.54., 127.
    hosts deny = all
    strict locking = No
[innovacion]
    comment = Proyecto innovacion
    path = /proyectos/%S
    valid users = @proyecto-innovacion
    read only = No
    create mask = 0770
    directory mask = 0770
    browseable = No
    browsable = No

Подводя итог проблеме, пользователь, который создает файл, может получить доступ к своему собственному файлу. Но никаких чужих файлов.

Пришлось отказаться от использования ACL через NFS. Маска не работает должным образом.

Вместо этого я использую 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

Теперь разрешения фиксируются этим скриптом, а не возвращаются в ACL через NFS.