[an error occurred while processing this directive]

Организация в Samba контроля пользователей по IP и MAC с псевдоквотами
Ниже представлена попытка без лишних усложнений решить задачу контроля по
IP+MAC в Samba без запуска дополнительных служб в системе.

В операционной системе создаются всего два системных пользователя с атрибутом
nologin (smbfull с smblim). Данные о работающих в Samba пользователях хранятся
в текстовом файле, с таким форматом:

   nicname_ФИО и дополнительная информация _IPaddress_MACaddress_limitsize(block)

Итого пять полей с разделителем "_" (если в имени пользователя допускается знак
подчеркивания, в приведенном ниже скрипте следует заменить "_", допустим, на "|").

При превышении указанного объема клиент может продолжать работать со своими
документами, редактировать их, но добавить (создать) что-либо или удалить не сможет.

Такой подход может удовлетворить небольшую сеть с индивидуальными ПК, где требуется:

  • нескольким пользователям подключить сетевые папки для документов, каждому свою, с привязкой по IP;
  • возможность иметь общие папки (внутри своих) между двумя или более пользователями для совместного доступа
  • исключить доступ с других ПК (и даже видимость в сетевом окружении)
  • избежать подключения с "левого" ПК (смена IP) посредством контроля MAC адреса
  • контролировать превышение объема информации в каждой директории, выделенной каждому пользователю. Часть решения подсказал некий robux на форуме linux.org.ru, у него просто авторизировались системные пользователи по IP. Создаем системных пользователей, первого "smbfull" в группе "smbfull", nologin. Второго "smblim" в группе "smbfull" Создаем тех же для самбы: smbpasswd -n -d smbfull smbpasswd -n -d smblim Каталоги созданных пользователей удалим и создадим общие /home/smbusers для каталогов пользователей и /home/smbses для, так называемых, сессионных каталогов. Пример файла конфигурации smb.conf [global] security = user passdb backend = smbpasswd:/etc/samba/smbpasswd username map script = /etc/samba/login.sh %I nullpasswords = yes directory mask = 755 create mask = 755 inherit owner = yes inherit permissions = yes log file = /var/log/smbd.%I max log size = 20 hosts allow = 192.168.0.0/24 socket address = 192.168.0.1 [docs] path = /home/smbses/%I public = yes writable = yes printable = no root postexec = /etc/samba/exit.sh %I Скрипт залогинивания login.sh #!/bin/sh - fses='/home/smbses/'$1 rm $fses v_ipmac=`/usr/local/bin/arp-scan -q --interface=rl1 $1 | sed -n '3p' | sed 's/[ ]/_/g'` res='' res=`grep $v_ipmac /etc/samba/access` if [ "$res" == "" ] then echo 'Blocked!!! - '$v_ipmac >> /home/smbusers/log exit fi v_nic=`echo $res | cut -d_ -f1` v_sz=`echo $res | cut -d_ -f5` v_dir='/home/smbusers/'$v_nic ln -s $v_dir $fses siz=`du -sL $fses | sed -e 's/[ ].*//g'` if [ $siz -gt $v_sz ] then echo 'limit exceeded! - '$v_nic' '$v_ipmac >> /home/smbusers/log echo 'smblim' else echo 'smbfull' fi Скрипт отключения exit.sh #!/bin/sh - rm /home/smbses/$1 Скрипт создания пользователей addusmb #!/bin/sh - fil='/etc/samba/access' echo `date` >> $fil echo -n ' User (nicname) - ' read v_nic res=`grep -c "^$v_nic" $fil` if [ $res != 0 ] then echo 'nicname '\"$v_nic\"' busy!!!' sleep 2 exit fi echo -n ' Fullname user - ' read v_fn echo -n ' User IP - ' read v_ip res=`grep -c "$v_ip" $fil` if [ $res != 0 ] then echo 'IP-'$v_ip' busy!!!' sleep 2 exit fi ping -w 1 -c 1 $v_ip >/dev/null if [ $? != 0 ]; then echo 'IP address unavailable :(' sleep 2 exit fi echo -n ' Allowable size of files (Mb)- ' read v_sm let "v_sz=$v_sm * 2048" v_ipmac=`/usr/local/bin/arp-scan -q --interface=rl1 $v_ip | sed -n '3p' | sed -e 's/[ ]/_/g'` # nicname_fullname_ip_mac_limit echo $v_nic'_'$v_fn'_'$v_ipmac'_'$v_sz >> /etc/samba/access v_dir='/home/smbusers/'$v_nic mkdir $v_dir chmod 755 $v_dir chown smbfull $v_dir chgrp smbfull $v_dir echo ' Ok!' sleep 1 В скриптах между "[" и "]" введен один пробел и один ТАБ. У каждого свой каталог, каждому назначаем допустимый объем информации, при достижении которого он теряет право на создание чего либо нового, но продолжает работать со своими документами. При подключении (либо сетевой диск, либо просто ярлык на ресурс) проверяется соответствие IP_MAC, и, если есть совпадение в файле access, то вытягивается с этой строки nicname и допустимый объем. Создается симлинк директории пользователя с /home/smbusers/user в /home/smbses/~IP Проверяется размер директории пользователя, сравнивается с дозволенным. Если значение меньше допустимого, то входим под пользователем smbfull с полными правами, если лимит превышен - входим под smblim. По завершении сеанса в Windows линк удаляется. Для организации общего ресурса между двумя или более пользователями ( с одинаковыми правами в этой папке!) просто делаем симлинк внутренней папки пользователя в папку другого (других). Можно еще добавить шару и делать так же симлинк какой-то папки пользователя в шару для публикаций файлов, при этом не бояться за их исчезновение или редактирование. При тестах не стоит спешить, при подключении (при обращении) создается линк и процесс сессии, при отключении от самбы (достаточно отключить сетевой диск или закрыть папку) линк с /home/smbses/ удаляется быстро, а вот процесс может еще повисеть. Пока процесс висит - самба вас помнит, и конфигурацию при подключении не перечитает. Можно дождаться закрытия процесса или убить вручную, тогда при подключении вступят в силу внесенные изменения.
  •  
    11.07.2011 , Автор: mastertron
    Ключи: samba, limit / Лицензия: CC-BY
    Раздел:    Корень / Администратору / Сетевые сервисы / Samba

    [an error occurred while processing this directive]

    [an error occurred while processing this directive]