LINUX.ORG.RU
ФорумAdmin

Как привязать юзеров на Самбе к их ip?


0

0

Возникла задача жёстко привязать вход юзверей на Самбу под своими логинами только со своих машин. Понятно, что поменять имя виндовой машины легко, поэтому хочется, чтобы Самба логинила определённого юзера только с определённого IP, но при этом должна остаться возможность под определёнными логинами входить с любой машины в сети.
Конечно ip тоже можно менять, но тут я буду использовать жёсткую привязку ip к mac-адресу, а mac-адрес поменять проблемнее (таких продвинутых юзеров нету... пока :).
Так что хотелось узнать, если у Самбы встроенные средства для таких вещей?


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

anonymous
()

А ЗАЧЕМ?! Ну пусть себе пионэры скачут как козлики с ip на ip и mac'и меняют. Чем это плохо для самбы-то?! По логу самбы и arp все легко и оперативно отслеживается если нужно и отловленный ставится в позу, сообразную тяжести содеяного...

А если привязка к ip нужна для ограничения доступа к инету, то для этого есть авторизация на прокси.

anonymous
()

Просто некоторым юзерам ну ОЧЕНЬ тяжело набирать пароли. А надо чтобы под их беспарольным логинам никто ходить не мог.

Што ж. Если кому надо, то меня хватило вот на такой вариант решения этой проблемы:

smb.conf
[global]
# При подключении юзера запускать указанную прогу с параметрами %u (имя юзера) и %I (его ip-адрес)
preexec = /usr/local/samba/smbprog/smbusers.pl %u %I
# если прога вернула не 0, то не пускать юзера
preexec close = yes

Скрипт smbusers.pl (можно было и на shell написать, или C, но уж привык к перлу сильно).

#!/usr/bin/perl
$smbusers="/usr/local/samba/lib/smb.users"; # Путь к файлу smb.users
$smblog="/tmp/connect.log"; # файл, где логи будем сторить
$user=$ARGV[0];
$IP=$ARGV[1];
$status=0;
$t=localtime();
if ($user eq "" || $IP eq "") {exit(0);}
if (open(SMBU,"<$smbusers")){
while(<SMBU>){
chomp();
$_=~s/^s+//;
$_=~s/s+$//;
if (/^\#/) {next;}
($u,$i)=split(/\s+/);
if ($u ne $user) {next;}
if ($i ne $IP) {
`echo "$t: $IP try to connect as $user : rejected" >> $smblog`;
$status=1;
} else {
$status=0;
}
last;
}
close(SMBU);
} else {
`echo "$t can't open $smbusers" >> $smblog`;
}
exit($status);

Ну и файл smb.users должен выглядеть так:
# smb.users
# user ip
vasya 192.168.1.1
masha 192.168.1.2
......

То бишь имя юзера и через табуляцию и/или пробел его законный ip.
Если в начале строки идёт # то строка игнорируется(комментарий).
Если подключающийся юзер не найден в файле smb.users, то по умолчанию Самба его пустит.

Если пытаются логинится не со своей машины, то скрипт вернёт 1 и самба его не пустит. Эт нам и нужна :)

Если у кого есть вариант получше, не поленитесь, напишите.

tanatOS
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.