Общий доступ к 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.