LINUX.ORG.RU
ФорумAdmin

Запрет одновременной работы двух юзеров по одному логину (+)


0

0

А не подскажет ли кто чего дельного вот по какому вопросу, как бы сделать, чтобы одновременно нельзя было работать двум пользователям по одному логину при PPP соединении, dial-up то есть.
Сформировался уже один скрипт, но вот остается вопрос в правильности его написания и включения в работу, то есть чтобы он вызывался после удачной проверки пароля пользователя и смотрел нет ли уже такого работающего юзера и если есть, не пускал второго в инет.

Скрипт привожу ниже, как  говорят, его нужно поместить в файл /etc/ppp/ip-up, сделать последний исполняемым и он будет автоматически вызываться при аутентификации пользователя.
Что можете сказать сему вопросу? Что в нем нужно подкорректировать, конкретики побольше, на пальцах желательно, т.к. наше дело молодое, не во все вникаем пока в этой области.

#!/bin/sh
r=`echo "$2" | cut -c6-10`
wh=`who | grep $r | grep -v grep | cut -c1-8`
if [ $wh > "" ]; then
/bin/kill -1 $r
if [ $wh -eq 0 ]; then
echo "You can't connect to host"
sleep 10
logout
fi
echo $$ > $mypid

Скрипт жуткий... не уверен насчет logout к примеру :)
и вообще, не в ip-up а в auth-up и auth-down ;-)
из мануала:
/etc/ppp/auth-up
A program or script which is executed after the
remote system successfully authenticates itself.
It is executed with the parameters

interface-name peer-name user-name tty-device speed

Вот тебе схема, примерный скелет, мясом сам нарастишь
auth-up:
#!/bin/bash
res=`grep -c $3 /tmp/ppp.accnt`
if [ $res -eq 0 ]
then
cat $3 >> /tmp/ppp.accnt
else
kill $PPID
fi

auth-down:
#!/bin/bash
grep -v $3 /tmp/ppp.accnt >/tmp/ppp.$$
mv /tmp/ppp.$$ /tmp/ppp.accnt

Все :)

Atris
()

Спасибо, но давай по порядку. То есть файлы auth-up и auth-down нужно создать в /etc/ppp/ и они будет автоматически обрабатываться при аутентификации пользователя, верно?

Приведенные тобой скрипты в этих файлах уже работоспособны, как я понимаю или их еще нужно каким-либо образом дорабатывать?

А кто первоначально создаст файлы ppp.$$ и ppp.accnt в /tmp/, потом как все-таки сделать вывод объясняющей инфы юзеру, если под этим логином уже кто-то работает?

До земли бы поклонился, если бы разжевал все до конца :))

mrrc
() автор топика
Ответ на: комментарий от mrrc

Все верно. Скрипты туда положить. Они рабочие (надеюсь, у меня самого крутятся похожие). Исправь только PPID на PPP_PID - так надежнее :) ничего больше делать не надо. Юзеру сам устно объяснишь, что дважды заходить нехорошо. Что еще :) ?

Atris
()

Не работает. Значит я создал в /etc/ppp файлы auth-up и auth-down, исправил PPID на PPP_PID в первом файле, как и говорил, придал обоим исполняемость для рута, отконнектился, попробовал зайти под уже работающим юзером и меня пустило, вопреки всем мерам, о которых говорилось выше. В чем еще может быть дело, как думаешь? Кстати в папке /tmp/ никаких файлов не создается.

mrrc
() автор топика

Единственное исправил потом #!/bin/bash на #!/bin/sh, т.к. первого шелла я не нашел у нас в системе.

mrrc
() автор топика

Да, вот еще что, ведь вышеприведенные скрипты сначала пишут все в файл, потом обрабатывают инфу в них и исходя уже из этого как-то там поступают, а ведь по-моему гораздо проще будет построить скрипт на команде who | grep $USER | wc -l, которая бы просто смотрела количество активных сессий подключающегося юзера и если результат был бы больше нуля, то отрубала бы клиента.

Разве нет?

Вот только как эту команду вделать в скрипт, идея вроде очень простая, как и все гениальное, может поможешь?

И вообще что скажешь об этом варианте?

mrrc
() автор топика
Ответ на: комментарий от mrrc

А какой шел та юзверю вешаеш, оставь мыло, я тебе готовый вариант пришлю

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