Когда выполняются скрипты 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 на специальную шару для логофа, но это будет уже просто клинический случай, поскольку сделать так, чтобы эта шара подключалась ТОЛЬКО при выходе пользователя и отключалась ТОЛЬКО при входе (другого пользователя или повторном входе того, который до этого вышел), практически нереально.
|