2009-05-18

Python и аутентификация в Windows-домене

Собственно, задача: компьютер в Windows-домене, на нем есть некий сервер, при обращении к которому он должен определить, зарегистрирован ли представившийся пользователь в домене. Для этого нужно иметь определенный инструментарий, и у нас он есть. Я использую ActivePython 2.6 от ActiveState, там всё комплекте.
[ файл win32test.py ]
-----------------------------------------------------------

# -*- coding: utf-8 -*-

import win32security
import win32net
import win32netcon

def authentication(user, password, domain):
"""
Аутентифицировать пользователя в домене
user - Имя пользователя в домене
password - Пароль пользователя
domain - Имя домена
"""
try:
htoken = win32security.LogonUser(
user, domain, password, win32security.LOGON32_LOGON_NETWORK,
win32security.LOGON32_PROVIDER_DEFAULT
)
if htoken:
return u"Пользователь %s успешно зарегистрирован в домене %s " % (user,domain)
except win32security.error, err:
return u"Номер ошибки: %i\nОшибку вернул %s\nОшибка: %s" % (err[0], err[1], err[2].decode('cp1251'))
except:
return u"Пользователю %s не удалось зарегистироваться в домене %s " % (user,domain)

print authentication("Kawaikunee","secretpassword","DOMEN")

def existuser(user, server, verbose=0):
"""
Проверить существование пользователя в домене.
user - Имя пользователя в домене
server - Имя Domain Controller NetBIOS. Можно указать DNS
verbose - Флаг, печатать ли информационное сообщение
"""

try:
users = win32net.NetUserEnum(
server, 0,
win32netcon.FILTER_NORMAL_ACCOUNT, 0
)
"""
users[0] - список словарей пользователей домена в Unicode, в формате
[{'name', u'Username1'},{'name', u'Username2'},{'name', u'Username3'}]
users[1] - их общее количество
"""
print users[0]
except win32net.error, err:
if verbose:
return u"Номер ошибки: %i\nОшибку вернул %s\nОшибка: %s" % (err[0], err[1], err[2].decode('cp1251'))
else:
return None
for userinfo in users[0]:
if user.decode('utf8').lower() == userinfo['name'].lower():
return u"Такой пользователь существует: %s" % user
print existuser("Kawaikunee","192.168.1.1",1)

-----------------------------------------------------------

Вот такой пример кода. Программирование - это творчество, и оно сродни поэзии. Вот так бы это описал, возможно, какой-нибудь древнерусский сказитель:

Ой ты гой еси, server-батюшка,
Ты скажи-расскажи, не утаивай!
Есть ли в списках твоих добрый молодец,
Что по логину user захаживал?

Отвечал скрипту server ласково:
Посмотри-ка милок, весь мой списочек
Молодыми да острыми глазками.
Да и выбери, кто тебе надобен.

Ну а коли ты в гости надумаешь,
То password отведет стражу лютую.
Заходи скрипт-python, в светлу горницу,
Будем мы разговор разговаривать.

2009-05-07

Открываю Gedit

Кто из программистов не искал для себя идеальный редактор кода? А сколько их развелось на свете! Платных и бесплатных, IDE и простых, под разные OS, просто глаза разбегаются.
И я не избег этой участи. В итоге из IDE первое место в моем багаже прочно заняла Aptana, ну а из простых...
Кто-то пользуется vi или emacs и вполне доволен. А некоторые привыкли в GUI-редакторам и отучить их уже сложно. Вот возьмем, к примеру, меня. Однажды я набрел на SciTE, и был впечатлен: писать в нем в целом неплохо, но вот настройки - это надо знать, что менять в конфигурационых файлах, как прописывать. С кодировкой cp1251 вообще практически никак, а иногда без нее не обойтись. Пользовался им за простоту и легкость, но самое прекрасное - это кнопка F5, по которой выполняется код открытого документа и выводится результат.
А кто из пользователей Gnome не знает такого замечательного приложения, как "Текстовый редактор" gedit? Эта программа проста и незатейлива, годится лишь чтобы изредка поправить конфигурационный файл... так кажется на первый взгляд.
Вся прелесть кроется в его плагинах. Среди них есть поистине шедевры. С их помощью можно легко реализовать клавишу F5 из SciTE - и это только поверхность айсберга. Установите пакет gedit-plugins (входит в стандартный репозитарий Ubuntu, но по умолчанию не установлен) - и посмотрите в Gedit "Правка - Параметры - Модули". Обширное поле для деятельности! О модулях можно прочесть, если нажать в этой вкладке кнопку "Справка", поверьте, это того стоит. Наиболее впечатляющими выглядят "Фрагменты текста" и "Внешние инструменты". Да и в "Правка - Параметры" тоже можно пройтись по чекбоксам, и сделать среду еще более приятной для работы.
Нужны пояснения и подробности? Если будет интересно - напишу еще, но думаю, что вы разберетесь и сами. Поверьте, ничего сложного - творите с удовольствием!

2009-05-05

Чистка файлов на хостинге от сторонних включений с помощью связки grep+sed

Вот уже который раз на хостинге наблюдаю работу некоего зловреда, который включает в файлы сайтов, в названии которых есть слова "main", "index" и "default" сторонний код, подгружающий на компьютеры посетителей зараженные файлы с использованием iframe. Пользователей Linux это не касается, поэтому они могут спать спокойно, для них этот код означает просто очень долгую загрузку страницы, связанную с загрузкой в кэш зараженного файла. Зато пользователи Windows, особенно бороздящие просторы интернета с помощью (если это так можно назвать) IE, подвергаются атаке по полной программе. Я об этой заразе узнал от такого пользователя. Много файлов, много строк, поди найди там всё!
Приступим к решению!
1) Подключаемся к серверу по протоколу ssh и получаем командную строку.
2) Проверяем наличие бяк в файлах php и html, получив список файлов с внедренным кодом (одной строкой):
find . -name '*.php' -o -name '*.html' -exec grep -l -E '^<iframe src=.+></iframe>$' '{}' \;
3) Массово заменим эти включения на пустоту (одной строкой):
find . -name '*.php' -o -name '*.html' -print0 | xargs -0 sed -i -e 's/^<iframe src=.*><\/iframe>$//g'
Конечно, это все временное решение, но хотя бы до следующей атаки пользователи не будут страдать.
Если у кого-то на хостинге случилось подобное, расскажите как боролись!