У меня есть папка, смонтированная с помощью 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.