Вот и меня, по определенным причинам, заинтересовало решение задачи подобного плана.
Данный вариант - экспериментальный и доморощенный. Хотелось получить простой вариант на базе одной службы и Бэ-Мэ функциональный.
Такой подход может удовлетворить небольшую сеть с индивидуальными компами, где требуется:
- нескольким пользователям подключить сетевые папки для документов ( или ...), каждому свою, с привязкой по IP
- возможность иметь общие папки ( внутри своих) между некоторыми пользователями для совместного доступа
- исключить доступ с других ПК ( и даже видимость в сетевом окружении)
- избежать подключения с «левого» компа ( смена IP ) посредством контроля MAC адреса
- контролировать превышение объема ( значение одно на всех ) информации в каждой директории, выделенной каждому пользователю.
Решение реализовано на скриптах, вызываемых директивами root preexec и root postexec .
При подключении пользователя к службе контролируется ( с помощью утилиты arp-scan , просто arp гребет из кэша ) физический адрес в связке с IP и сравнивается со списком в файле. Если находит идентичное сочетание IP_MAC - вытягивает с этого же файла путь к директории пользователя (для пользовательских директорий создана отдельная директория /home/archive) и создает симлинк в директорию /home/samba с именем IP клиента, /home/samba предназначена чисто для этих линков. Этот линк удаляется при завершении сеанса пользователя в винде или завершении самой службы самбы. Линк может остаться в некоторых случаях (нажали на резет, питание сбойнуло ...) , и чтоб не было проблем — в скрипте подключения сделал контрольное удаление симлинка.
Если нужна общая папка между юзерами - создаем папку «join» и, все тем же линком, отражаем в папку другого пользователя (лей), пусть общаются.
Объем информации контролирую посредством утилиты 'du' так же при подключении ( можно и при отключении), размерность блоковая, для упрощения сравнения в скрипте. Если лимит превышен - меняем разрешение на директорию юзера на 750, при этом он продолжает читать и редактировать файлы, но удалять или создавать ( закачивать ) не сможет. Естественно ожидаем возмущения, делаем мозговливание, заставляем удалить все лишнее и возобновляем полноправный доступ. Хотелось бы получить возможность предупреждения, но ...
nmbd - не используется. Samba запускаем с директивой: smbd -D
Для создания сетевой папки на винде подключаем сетевой диск и указываем путь : \\192.168.0.1\docs , этот путь у всех одинаков. Ярлык можно бросить на рабочий стол. До подключения на ярлыке горит симпатичный красный вопросительный знак

Вобсчем - и так все понятно.
Все это дело крутится на OpenBSD47, пока на 12 пользователей.
Вот конфиг и скрипты. Пользователя samba без прав создадите в системе сами

smb.conf
Код: Выделить всё
[global]
security = share
guest account= samba
log file = /var/log/smbd.%m
max log size = 50
hosts allow = 192.168.0.
socket address = 192.168.0.1
create mask = 0770
[docs]
root preexec = /etc/samba/pre %I
comment = Document Archive
path = /home/samba/%I
public = yes
writable = yes
printable = no
root postexec = /etc/samba/post %I

Код: Выделить всё
#!/bin/sh -
# add user IP<->MAC
fil='/etc/samba/access'
echo -n " Вводим IP - "
read V_IP
ping -w 1 -c 1 $V_IP > /dev/null
if [ $? -eq 0 ]
then
echo -n " Вводим имя директории юзера - "
read V_U
echo -n " Коротко опишем, что за фрукт - "
read V_O
V_S=`arp-scan -q --interface=em1 $V_IP |sed -n '3p' | sed -e 's/[ ]/_/g'`'_'
V_P='/home/archive/'$V_U
mkdir $V_P
chmod 770 $V_P
echo '_____' >> $fil
echo $V_O >> $fil
echo $V_S$V_P >> $fil
# Control
echo 'И того ...'
echo 'Дано IP_MAC: '$V_S
echo 'Создана папка юзера: '$V_U
echo 'Для - '$V_O
sleep 5
else
echo 'Извени ... - IP щас недоступен! Пробуй позжее.'
sleep 3
exit
fi
Код: Выделить всё
#!/bin/sh -
# pre execute
rm /home/samba/$1
R=`/usr/local/bin/arp-scan -q --interface=em1 $1 | sed -n '3p' | sed 's/[ ]/_/g'`'_'
S=`grep -c -w $R /etc/samba/access`
P=`grep $R /etc/samba/access | sed -e 's/.*_//g'`
if test $S -eq 0
then
echo 'gavnuk zavelsya- '$R >> /home/samba/log
else
echo '\b ok - '$R >> /home/samba/log
ln -s $P /home/samba/$1
# Test size dir
siz=`du -sL /home/samba/$1 | sed -e 's/[ ].*//g'`
if [ $siz -gt 4000000 ]; then
echo 'Накачал, блин - '$1 >> /home/samba/log
chmod -R -H g-w /home/samba/$1
fi
fi
Код: Выделить всё
!/bin/sh -
# post execute
rm /home/samba/$1
Код: Выделить всё
#!/bin/sh -
# unblock w for IP
echo -n 'Разблокировать IP - '
read V_IP
chmod -R -H g+w /home/samba/$V_IP
echo ' OK!'
sleep 2
Конечно же не профессионально, но интересно, и работает.
Пробовал держать инфу в MySQL, но при таком объеме пользователей ...

Посмотрю, может писануть парочку скриптов для прочесывания пользовательских папок, тестить на наличие всяких излишеств и правильно на это дело реагировать. В принципе, можно сделать себе на машину сетевой диск с доступом к верхнему каталогу всех пользовательских папок и шерстить от себя. Можно и никсовый антивирь подцепить и ... .