The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как 'прибить' юзера в radiusd?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как 'прибить' юзера в radiusd?"
Сообщение от harlan emailИскать по авторуВ закладки(ok) on 27-Июн-04, 13:14  (MSK)
Поставил FreeRADIUS. Очень редко, но появляется такая проблема: юзер подключился. radwho показывает, что клиент на линии, Далее клиент отключается, а по команде radwho он всё равно отображается как активный.
В результате чего этот юзверь не может законнектиться вторично.
Вопрос: Как сказать радиусу, что данный клиент "сдох" и его сеанс надо закрыть, не уничтожая файла radwtmp?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Как 'прибить' юзера в radiusd?"
Сообщение от Hammer emailИскать по авторуВ закладки(ok) on 27-Июн-04, 23:49  (MSK)
>Поставил FreeRADIUS. Очень редко, но появляется такая проблема: юзер подключился. radwho показывает,
>что клиент на линии, Далее клиент отключается, а по команде radwho
>он всё равно отображается как активный.
>В результате чего этот юзверь не может законнектиться вторично.
>Вопрос: Как сказать радиусу, что данный клиент "сдох" и его сеанс надо
>закрыть, не уничтожая файла radwtmp?


какая система?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как 'прибить' юзера в radiusd?"
Сообщение от harlan emailИскать по авторуВ закладки(ok) on 28-Июн-04, 05:59  (MSK)
>какая система?

Linux RH 9.0 (2.4.20) + FreeRadius 0.9.3

Клиенты в системе не прописываются (useradd).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как 'прибить' юзера в radiusd?"
Сообщение от Hammer emailИскать по авторуВ закладки(ok) on 28-Июн-04, 06:23  (MSK)
>>какая система?
>
>Linux RH 9.0 (2.4.20) + FreeRadius 0.9.3
>
>Клиенты в системе не прописываются (useradd).


Заходишь любым клиентом в sql-базу, находишь таблицу типа acctusers - и убиваешь там юзеров у которых в завершении сесси стоит что то типа pptp-XXXXXXXXXX

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Как 'прибить' юзера в radiusd?"
Сообщение от harlan emailИскать по авторуВ закладки(ok) on 28-Июн-04, 09:57  (MSK)
>Заходишь любым клиентом в sql-базу, находишь таблицу типа acctusers - и убиваешь
>там юзеров у которых в завершении сесси стоит что то типа
>pptp-XXXXXXXXXX

Не поможет. Он активных клиентов хранит не в MySQL, а в /var/log/radiusd/radwtmp. И если в MySQL Вычистишь эти строки, то ничего не изменится. :(
Корректировать надо файл radwtmp.
Вопрос: Какими средствами его можно откорректировать?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Как 'прибить' юзера в radiusd?"
Сообщение от A Clockwork Orange Искать по авторуВ закладки on 28-Июн-04, 10:23  (MSK)
А просто посмотреть по процессам и по логам и убить процесс?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Как 'прибить' юзера в radiusd?"
Сообщение от harlan emailИскать по авторуВ закладки(ok) on 28-Июн-04, 15:09  (MSK)
>А просто посмотреть по процессам и по логам и убить процесс?

В том-то и дело, что процесса нет, а есть запись в radwtmp.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Как 'прибить' юзера в radiusd?"
Сообщение от Hammer emailИскать по авторуВ закладки(??) on 28-Июн-04, 11:34  (MSK)
>>Заходишь любым клиентом в sql-базу, находишь таблицу типа acctusers - и убиваешь
>>там юзеров у которых в завершении сесси стоит что то типа
>>pptp-XXXXXXXXXX
>
>Не поможет. Он активных клиентов хранит не в MySQL, а в /var/log/radiusd/radwtmp.
>И если в MySQL Вычистишь эти строки, то ничего не изменится.
>:(
>Корректировать надо файл radwtmp.
>Вопрос: Какими средствами его можно откорректировать?

А ты проверял, насколько я помню, в radwtmp логи по авторизации..

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Как 'прибить' юзера в radiusd?"
Сообщение от harlan emailИскать по авторуВ закладки(ok) on 28-Июн-04, 15:11  (MSK)
>А ты проверял, насколько я помню, в radwtmp логи по авторизации..
Если бы не проверял, то не стал бы вам мозги канифолить.
Как только прибиваю файл radwtmp (больше ничего) так юзверь снова может нормально авторизоваться.

Дельные советы есть? А то как в том анекдоте: Нарисуй на стене зелёный треугольник...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Как 'прибить' юзера в radiusd?"
Сообщение от A Clockwork Orange Искать по авторуВ закладки on 28-Июн-04, 15:52  (MSK)
Если тебе нужно отключить пользователя который в онлайн, то при чем тут radius. Находишь процесс пользователя и убиваешь, для ppp была даже утилитка какая то в поставке.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Как 'прибить' юзера в radiusd?"
Сообщение от Soldier Искать по авторуВ закладки(??) on 28-Июн-04, 17:51  (MSK)
>Поставил FreeRADIUS. Очень редко, но появляется такая проблема: юзер подключился. radwho показывает,
>что клиент на линии, Далее клиент отключается, а по команде radwho
>он всё равно отображается как активный.
>В результате чего этот юзверь не может законнектиться вторично.
>Вопрос: Как сказать радиусу, что данный клиент "сдох" и его сеанс надо
>закрыть, не уничтожая файла radwtmp?

У меня тоже freeradius 0.9.3, только инфу о текщих соеденениях он у меня
хранит в radutmp ( в radwtmp хранится  инфа о всех сессиях).  Подобное
случается, когда не приходит аккаунтинговая стоп запись. Борюсь с этим
очень просто. Если вы ставили из сырцов, то есть там  в
src/include/radutmp.h описание такой структуры:

struct radutmp {
  char login[32];               /* Loginname */
                                /* FIXME: extend to 48 or 64 bytes */
  unsigned int nas_port;        /* Port on the terminal server (32 bits). */
  char session_id[8];           /* Radius session ID (first 8 bytes at least)*/
                                /* FIXME: extend to 16 or 32 bytes */
  unsigned int nas_address;     /* IP of portmaster. */
  unsigned int framed_address;  /* SLIP/PPP address or login-host. */
  int proto;                    /* Protocol. */
  time_t time;                  /* Time entry was last updated. */
  time_t delay;                 /* Delay time of request */
  int type;                     /* Type of entry (login/logout) */
  char porttype;                /* Porttype (I=ISDN A=Async T=Async-ISDN */
  char res1,res2,res3;          /* Fills up to one int */
  char caller_id[16];           /* Calling-Station-ID */
  char reserved[12];            /* 3 ints reserved */
};

Так вот, файл radutmp состоит из одной или нескольких таких структур и
если поле type этой структуры равно 0, то сессия дохлая, 1 - активная.
Пишется элементарная прога на C, которая просто заменяет 1 на 0 в
нужном месте и все. Урощенный фрагмент моей проги (имя пользователя для
"убийства" передается через аргументы командной строки:

struct radutmp ru;
int fd;
int pos;

.........

fd=open("/usr/local/var/log/radius/radutmp",O_RDWR);  
pos=0;
while (read(fd,&ru,sizeof(ru))==sizeof(ru)) {
   if (ru.type==1 && !strncmp(ru.login,argv[1],32)) {
      ru.type=0;
      lseek(fd,pos,SEEK_SET);
      write(fd,&ru,sizeof(ru));
      break;    
   }
   pos=lseek(fd,0,SEEK_CUR);
}

close(fd);

По крайней мере у меня это так работает.

Если все таки считаете, что дело в radwtmp (я честно говоря сомневаюсь),
то структура должна быть (но не обязана :))) аналогичной системному wtmp
(man wtmp). Далее как и выше - пишется прога, меняющая где-то что-то на
нечто.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Как 'прибить' юзера в radiusd?"
Сообщение от harlan emailИскать по авторуВ закладки(ok) on 28-Июн-04, 18:40  (MSK)
>Если все таки считаете, что дело в radwtmp (я честно говоря сомневаюсь),
>
Сорри, мой косяк. Конечно же radutmp.

Персональное огромное спасибо за дельный совет.

Спасибо всем принявшим участие в обсуждении.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру