The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Когда выполняются скрипты root preexec и root postexec?, !*! DRVTiny, 21-Сен-06, 18:31  [смотреть все]
Написал скрипт, который должен при вхолде пользователя в домен писать пару вида ПОЛЬЗОВАТЕЛЬ@ХОСТ в файл /var/log/samba/WhoIsIn, а при выходе - удалять её оттуда или же удалять сам файл. Параллельно пишется небольшой лог.
Теперь вижу следующую картину:
При входе пользователя в логе появляется 3-4 записи о входе (столько раз запускался скрипт), при выходе и, к сожалению, даже не только при выходе - ещё 3-4 записи о выходе в этот же лог пишутся.
Вопрос: почему скрипт root preexec/postexec запускается, мягко говоря, слишком часто?
Собственно скрипт приводится ниже (вызывается по имени hndlDomainUserEnter для preexec и hndlDomainUserOut для postexec, с hndlDomainUserEnter на hndlDomainUserOut создана симв. ссылка)
----------
#!/bin/bash
slf="${0##*/hndlDomainUser}"
. /etc/sysconfig/functions/cmn
. /etc/sysconfig/functions/rxdef
echo "Event: $slf Who: $@" >> /var/log/samba/dummylog
rxIP="$rxIP_ADDR"
rxmIP=
rxHOST='[A-Z][A-Z0-9_-]*[A-Z0-9]'
rxmHOST='I'
rxUSR='([A-Z]+|[A-Z]{,2}[a-z]+)[0-9]*'
rxmUSR=
while [ $# -ne 0 ]; do
key="$1"; shift
[ $# -gt 0 ] || exit 1
case "$key" in
i|-i|--ip-addr)   id=IP ;;
u|-u|--user-name) id=USR ;;
h|-h|--host)      id=HOST ;;
esac
set_aliases "$id" rx rxm flAlreadyUsed
chk_fl $flAlreadyUsed && exit 1
[ "`echo \"$1\" | eval \"sed -nr 's%^${!rx}$%MATCH%p${!rxm}'\"`" = "MATCH" ] || exit 1
eval val${id}=\"$1\"; shift
done
fileWhoIsIn="/var/log/samba/WhoIsIn"
#[ -w "$fileWhoIsIn" ] || exit 1
case "$slf" in
Enter)
  if [ -f "$fileWhoIsIn" ] ; then
   grep -qE "^${valUSR}@${valHOST}$" $fileWhoIsIn && exit 1
   echo "$valUSR@$valHOST" >> $fileWhoIsIn
  else
   cat >"$fileWhoIsIn" <<-EOF
# List of users, who has entered the samba domain
# File format: <start of string>USERNAME@HOST<end of string>
# See description of parameters prerootexec and postrootexec in man smb.conf
# This file was created by script $0
$valUSR@$valHOST
EOF
  fi
;;
Out)
  grep -qE "^${valUSR}@${valHOST}$" "$fileWhoIsIn" || exit 1
  fileTMP="`mktemp`"
  if [ -z "`grep -vP \"^(\s*(#.*)?|${valUSR}@${valHOST})$\" \"$fileWhoIsIn\"`" ]; then
   rm -f "$fileWhoIsIn"
  else
   grep -vE "^${valUSR}@${valHOST}$" "$fileWhoIsIn" > "$fileTMP"
   mv -f "$fileTMP" "$fileWhoIsIn"
  fi
;;
*)
  exit 1
;;
esac
  • Когда выполняются скрипты root preexec и root postexec?, !*! EnPCT, 04:09 , 27-Сен-06 (1)
    • Когда выполняются скрипты root preexec и root postexec?, !*! DRVTiny, 09:23 , 27-Сен-06 (2)
      >Как зделать веник при помощи сапога?
      >Ну-ка быстро скажите мне сколько будет трисвиньивквадратеминусовца.
      >Почему вы не хотите потратить пол-часа на разбор того-то, что бы ответить
      >"почему"?

      Потому что на этот вопрос НЕТ простого ответа, да и сложного, похоже, тоже нет. Потому что Samba сделана, извиняюсь, через Ж... и не позволяет назначить обработчик для элементарного события выхода пользователя из сеанса (обработчик на вход поставить нетрудно). Я не знаю, возможно, это проблема протокола SMB в целом (сомнительно), но тем не менее факт остаётся фактом: отследить выход из сеанса невозможно в принципе, в лучшем случае можно периодически проверять, не вышел ли уже пользователь, зарегистрировавшийся с такого-то хоста.
      Вообще по всем признакам я - единственный человек во всём рунете, который в данный вопрос пытался глубоко вникать. Так что лдействительно, какой смысл спрашивать что-то у людей, знающих меньше тебя самого, которым кроме пива и дум3 ничего не интересно, ничего не нужно.

      P.S. Тем, кто всё-таки заинтересуется данной проблемой и столкнётся с полным равнодушием местных "кул хацкеров" (не знающих ничего, кроме своих любимых апачей, впн'ов, роутеров и т.д.), советую просмотреть следующий топик: http://www.linux.org.ru/jump-message.jsp?msgid=1587213&lastm...

      • Когда выполняются скрипты root preexec и root postexec?, !*! Алексей Тамаревский, 14:17 , 10-Окт-06 (3)
        • Когда выполняются скрипты root preexec и root postexec?, !*! DRVTiny, 10:41 , 14-Окт-06 (4)
          >Когда мне это надо было сделать (год назад), я написал малюююсенький скрипт,
          >который использовал возможности preexec. И все ;)

          Да ну! Похоже, Вы просто гениальны, потому что даже собственно разработчики Samba не знают, как стандартными средствами самой Samb'ы отследить выход пользователя из сеанса на стороне сервера. Или мы с Вами о разных вещах говорим.

          • Когда выполняются скрипты root preexec и root postexec?, !*! ZM_Michael, 22:02 , 23-Окт-06 (5)
            • Когда выполняются скрипты root preexec и root postexec?, !*! DRVTiny, 17:51 , 24-Окт-06 (6)
              >а smbstatus -p не отображает случаем содержимое вашего файла ?
              Отображает. Файл мне нужен просто для отладки, конечная цель - давать компьютерам домена доступ в инет при заходе пользователя с доменной учётной записью (возможно, с проверкой по спискам контроля доступа) и отключение инета при выходе. Первая часть  (разблокирование IP) реализуется абсолютно элементарно, а вот со второй часть серьёзные проблемы. Нужно писать что-то вроде клиент-серверного приложения на Perl, клиентская часть которого выполняется на рабочей станции, запускаясь как logoff-скрипт, а серверная - на контроллере домена. Конечно, можно извращаться с net use в logoff-скрипте и установкой обработчика preexec на специальную шару для логофа, но это будет уже просто клинический случай, поскольку сделать так, чтобы эта шара подключалась ТОЛЬКО при выходе пользователя и отключалась ТОЛЬКО при входе (другого пользователя или повторном входе того, который до этого вышел), практически нереально.



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

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