Общий доступ к 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 информация о пользователе jorge.suarez
Введите пароль пользователя root:
Пользователи домена         
Proyecto-innovacion  
# net информация о пользователе maria.tenorio
Введите пароль пользователя root:
Пользователи домена         
Proyecto-innovacion

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

[Глобальный]
    рабочая группа = WORKGROUP
    имя netbios = SAMBASRV
    Строка сервера = %h сервер (Samba, Ubuntu)
    интерфейсы = 127.0.0.0/8, eth0
    passdb backend = ldapsam:"ldap://10.1.176.237"
    системный журнал = 0
    файл журнала = /var/log/samba/log.%m
    максимальный размер журнала = 1000
    DNS прокси = Нет
    ldap admin dn = "cn = Directory Manager"
    суффикс группы ldap = ou=Groups,ou=CITIUS
    суффикс ldap = dc = inv, dc = usc, dc = es
    ldap ssl = нет
    Суффикс пользователя ldap = ou=People,ou=CITIUS
    паническое действие = /usr/share/samba/ паническое действие%d
    хосты позволяют = 172.16.54., 127.
    хосты отрицают = все
    строгая блокировка = нет
[Innovacion]
    комментарий = Proyecto Innovacion
    путь = /proyectos/%S
    действительные пользователи = @proyecto-innovacion
    только чтение = нет
    создать маску = 0770
    маска каталога = 0770
    просматриваемый = Нет
    browsable = Нет

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

1 ответ

Решение

Мне пришлось отказаться от использования 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.

Другие вопросы по тегам