<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description></description><title>NonRealDeveloper Blog</title><generator>Tumblr (3.0; @nonrealdev)</generator><link>http://nonrealdev.tumblr.com/</link><item><title>Криптоанархизм</title><description>&lt;p&gt;&lt;img src="http://habrastorage.org/storage1/ec0525e0/4cb24cf3/2daa9036/2725448b.png" height="390" width="500"/&gt;&lt;/p&gt;
&lt;p&gt;1. твой ПК&lt;br/&gt;2-4. твои соседи&lt;br/&gt;5. внутренняя домашняя сеть твоего соседа 4&lt;br/&gt;6. коммутатор&lt;br/&gt;7. сервер провайдера&lt;br/&gt;8,10,12. промежуточные сервера (ящики) фсб&lt;br/&gt;9. сервер магистрального провайдера&lt;br/&gt;11. вышестоящий сервер&lt;br/&gt;[конструкция 11-12 может повторяться бесконечно, до точки назначения]&lt;br/&gt;13. центральный сервер фсб&lt;br/&gt;14. отделение полиции&lt;br/&gt;15. сервер точки назначения&lt;br/&gt;16. дополнительные запросы на сервера социальных сервисов&lt;br/&gt;(видео с youtube/голосования/виджеты/twitter/iframe/счетчики/прочее)&lt;br/&gt;17. базы данных социальных сервисов&lt;br/&gt;18. сервера обновления программного обеспечения&lt;br/&gt;19. сервера сторонних сервисов твоего браузера (яндекс-бар)&lt;/p&gt;
&lt;p&gt;Красная сплошная линия - путь пакетов от тебя до сервера сайта на который ты зашёл.&lt;/p&gt;
&lt;p&gt;Ты и твои соседи можете прослушивать друг у друга не кодированный трафик, потому что благодаря широковещательной рассылке все сетевые карты внутри VPN будут принимать пакеты друг друга и отвечать по возможности.&lt;/p&gt;
&lt;p&gt;Доступ к прослушке пакетов внутренней сети твоего соседа будет уже сложнее получить, но тоже возможно.&lt;/p&gt;
&lt;p&gt;Зачем обеспечивать свою защиту? - А тебе разве приятно если кто-то может спокойно читать твою почту, есть из твоей тарелки, ходить в обуви по твоей квартире? С кем ты встречаешься, кого ненавидишь, что скрываешь и какие ресурсы ты посещаешь, все твои пасспортные данные, всю твою жизнь можно зачерпнуть за считанные секунды. Ты ведь не знаете что ждёт тебя завтра? В полиции знают о тебе больше чем ты и твоя мама. Отказаться от социальных сервисов практически невозможно, ведь практически все твои друзья/коллеги и прочие давно сидят там и получают от этого удовольствие, а ты - отказавшийся от всего этого, становишься в своём роде &amp;ldquo;изгоем&amp;rdquo;. И просто взять и отрезать социальный интернет из своей жизни - не выход. Но мы то знаем что выход есть всегда. Социальные сети, различные корпорации и спецслужбы наращивают свои силы с каждым днём - масштабы их влияния уже катастрофичны, например, благодаря вставке youtube-видео вконтакте - гугл (он же владелец youtube) теперь знает ваш аккаунт, чем непременно воспользовался и уже давно &lt;a target="_blank" href="http://vkontakte.ru/catalog.php"&gt;выкачал все аккаунты оттуда&lt;/a&gt;. Google и Yandex активно анализируют &lt;a target="_blank" href="http://metrika.yandex.ru/stat/?counter_id=5265289"&gt;каждый ваш клик мышкой по экрану&lt;/a&gt;, что вам нужно от интернета, и главное - &lt;a target="_blank" href="http://adwords.google.com/support/aw/bin/answer.py?hl=ru&amp;amp;answer=151868"&gt;что можно вам продать&lt;/a&gt; через внедряемую на сайты рекламу.&lt;/p&gt;
&lt;p&gt;Что ты можешь сделать уже сейчас:&lt;/p&gt;
&lt;p&gt;1. Постарайся не регистрироваться в социальных сервисах, если ты этого еще не сделал. Удаление уже существующего аккаунта тебе не поможет - все данные намертво сохранились на неведомых жестких дисках.&lt;/p&gt;
&lt;p&gt;2. Не заводи статический ip-адрес.&lt;/p&gt;
&lt;p&gt;3. Вбей в поиск &lt;strong&gt;ICQ СВОЙ_ICQ&lt;/strong&gt; (например ICQ 123456789) и проанализируй информацию выданную поисковой системой о тебе. Постарайся удалить/затереть/сокрыть доступную тебе для изменения информацию и больше так не делай.&lt;/p&gt;
&lt;p&gt;4. Проделай аналогичную процедуру с номером своего телефона в разных форматах (+7 ХХХ ХХХХ, 7ХХХХХХХ, 8ХХХХХХХ, 8 ХХХ ХХ ХХ, +7 ХХХ ХХ-ХХ&amp;hellip;), ящиком email, skype, фио и там что еще в голову придет&amp;hellip;&lt;/p&gt;
&lt;p&gt;5. Не пренебрегай SSL/TLS и другими защитными протоколами, а также шифрованием потока внутри VPN-сетей.&lt;/p&gt;
&lt;p&gt;6. Не устанавливай в браузер и операционную систему никакие гаджеты/виджеты и прочую ерунду.&lt;/p&gt;
&lt;p&gt;7. Ничего бесплатного не бывает - за всем стоит какая-либо выгода! Ты должен всегда это знать и сто раз подумать прежде чем поставить себе на рабочий стол этот замечательный гаджет с погодой от яндекс.&lt;/p&gt;
&lt;p&gt;И всегда помни - законы математики сильнее человеческих законов!&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/8126430548</link><guid>http://nonrealdev.tumblr.com/post/8126430548</guid><pubDate>Wed, 27 Jul 2011 16:08:00 +0400</pubDate><category>cryptoanarchy</category><category>криптоанархизм</category><category>Crypto-anarchism</category></item><item><title>Генератор темы для разговора</title><description>&lt;p&gt;Бывает ли у вас такое, что вы не знаете о чем можно начать разговор, но горите желаением пообщаться с человеком? Наткнулся сегодня на такой вот интересный сервис, алгоритм весьма прост, а дизайн с телефона радует глаз, и еще больше радует что jquery mobile таки начинает продвигаться вперёд.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://conversation.servebeer.com/"&gt;http://conversation.servebeer.com/&lt;/a&gt;&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/7319149656</link><guid>http://nonrealdev.tumblr.com/post/7319149656</guid><pubDate>Thu, 07 Jul 2011 02:56:52 +0400</pubDate><category>генератор темы для разговора</category></item><item><title>Jabber-атаки при помощи jappix</title><description>&lt;p&gt;Написать сценарий, который будет досить jabber-конференции используя jappix, довольно просто, весь алгоритм укладывается в бесконечных запросах на&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;jappix.com/?r=АДРЕС_КОНФЕРЕНЦИИ&amp;amp;n=РАНДОМНЫЙ_НИК&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Спасёт: капча на конференции&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/7115659000</link><guid>http://nonrealdev.tumblr.com/post/7115659000</guid><pubDate>Fri, 01 Jul 2011 13:57:00 +0400</pubDate><category>jabber</category></item><item><title>Новый пост</title><description>&lt;p&gt;Давненько я не постил ничего интересного, попросту небыло времени, вчера наткнулся на интересный сервис от рег.ру - освобожденные домены с PR и ТиЦ, кому интересно ссылка в посте&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/7115327364</link><guid>http://nonrealdev.tumblr.com/post/7115327364</guid><pubDate>Fri, 01 Jul 2011 13:30:48 +0400</pubDate></item><item><title>Очередной убитый хостинг</title><description>&lt;p&gt;Казнь ЭЛИТНОГО хостинга&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;&lt;img src="http://img696.imageshack.us/img696/7503/hostfreesu.png" width="250"/&gt;&lt;/p&gt;
&lt;p&gt;После регистрации ожидаем активацию аккаунта&lt;/p&gt;
&lt;p&gt;&lt;img src="http://img69.imageshack.us/img69/9159/hostfreesuauth.jpg"/&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Информация о сайте:&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Статус:&lt;/strong&gt; Заблокирован&lt;br/&gt;&lt;strong&gt;Сайт:&lt;/strong&gt; mars.2gb.su&lt;br/&gt;&lt;strong&gt;Квота:&lt;/strong&gt; 2Gb&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Причина:&lt;/strong&gt;&lt;br/&gt;4. Клиент обязан указать подробное описание своего проекта,в противном случае акаунт блокируется за неинформативное описание.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ну и говно, ладно создадим сайт в поддержку православной церкви&amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Информация о сайте:&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Статус:&lt;/strong&gt; На проверке&lt;br/&gt;&lt;strong&gt;Сайт:&lt;/strong&gt; russian-pravoslavie.2gb.su&lt;br/&gt;&lt;strong&gt;Квота:&lt;/strong&gt; 2Gb&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Вы успешно зарегистрировали свой сайт.&lt;br/&gt;Логин: pravoslavny&lt;br/&gt;Пароль: ololo&lt;br/&gt;Адрес сайта: &lt;a target="_blank" href="http://russian-pravoslavie.2gb.su/"&gt;http://russian-pravoslavie.2gb.su&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;и теперь приступаем к децентрализации&lt;/p&gt;
&lt;blockquote&gt;
&lt;h1&gt;Not Found&lt;/h1&gt;
&lt;p&gt;The requested URL /manager/ispmgr was not found on this server.&lt;/p&gt;
&lt;hr&gt;&lt;p&gt;Apache/2.2.3 (CentOS) Server at hostfree.su Port 443&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Прозреваю лютую ярость админа :)&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/5248502509</link><guid>http://nonrealdev.tumblr.com/post/5248502509</guid><pubDate>Fri, 06 May 2011 22:29:00 +0400</pubDate><category>hack</category><category>shutdown</category><category>hosting</category><category>элита</category></item><item><title>Разработка под iphone</title><description>&lt;p&gt;Сейчас доделываю свой сайт мобильной музыки, задался вопросом подогнать под айфон и айпад свой сайт. Узнал нечто новое для себя:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Чтобы получить iphone SDK вы должны быть зарегистрированным Apple-Developer'ом, для этого вы должны пройти нудную процедуру регистрации и после чего вам предложат КУПИТЬ то что вы собирались СКАЧАТЬ. Такой подход к разработчикам отпугнёт практически любого&amp;hellip;&lt;/li&gt;
&lt;li&gt;Iphone Emulator предоставляется только пользователям Mac, вендузятники же, на пару с линуксоидами отдыхают :)&lt;/li&gt;
&lt;li&gt;Эмуляторы отображения сайтов в iphone на других ОС, в основном, сводятся к тому, что используют движок IE, который на ура обрабатывает сайты по своему и никакой эмуляцией safari там и не пахнет.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;В итоге ограничился тем, что добавил два метатега в шапку:&lt;/p&gt;
&lt;p&gt;&amp;lt;meta name=&amp;ldquo;viewport&amp;rdquo; content=&amp;ldquo;width=320&amp;rdquo; /&amp;gt;&lt;br/&gt;&amp;lt;link rel=&amp;ldquo;apple-touch-icon&amp;rdquo; href=&amp;ldquo;/touchicon.png&amp;rdquo; /&amp;gt;&lt;/p&gt;
&lt;p&gt;Первый как бы говорит айфону: не надо химичить над сайтом он и так мобильный, второй же показывает айфону на крупную иконку для создания закладки, она должна быть квадратная, размером 57х57 и в формате png&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/5016838810</link><guid>http://nonrealdev.tumblr.com/post/5016838810</guid><pubDate>Thu, 28 Apr 2011 22:26:00 +0400</pubDate></item><item><title>Часто-используемые алгоритмы хеша паролей</title><description>&lt;p&gt;Для тех кто не получил доступ к скрипту но получил доступ к БД:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;md5(password) - самый примитивный&lt;/li&gt;
&lt;li&gt;md5(md5(password)) - второе по популярности&lt;/li&gt;
&lt;li&gt;md5(md5(md5(password))) - экзотика&lt;/li&gt;
&lt;li&gt;md5(password.salt) - часто используется интеллигентами&lt;/li&gt;
&lt;li&gt;md5(password.password) - тоже экзотика, но встречается&lt;/li&gt;
&lt;li&gt;md5(password.password.password) - всякое бывает))&lt;/li&gt;
&lt;li&gt;всё то же самое, но с sha1 или crypt - будет не намного труднее, определяется по внешнему виду, иногда может быть так: md5(crypt(password)) - встречал такую конструкцию (или даже sha1(md5(crypt($pass))))&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Как бороться с солью пока ещё не придумал, если додумаюсь ждите поста&lt;/p&gt;
&lt;p&gt;update: нашёл программный способ - гуглите прогу PasswordsPro&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/4875745466</link><guid>http://nonrealdev.tumblr.com/post/4875745466</guid><pubDate>Sun, 24 Apr 2011 01:14:00 +0400</pubDate><category>пароли</category><category>md5</category><category>sha1</category><category>crypt</category><category>salt</category><category>hack</category></item><item><title>Мой лог взлома паролей одного хостера</title><description>&lt;ol&gt;&lt;li&gt;залил свой хитрый perl-скрипт на аккаунт у хостера (подробнее &lt;a title="Опасность PERL на криво настроенных правах" target="_blank" href="http://nonrealdev.tumblr.com/post/4760495714/perl"&gt;тут&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;получил содержимое &lt;strong&gt;/etc/passwd&lt;/strong&gt; и нашел там интересный логин &lt;strong&gt;admin&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;прочитал на аккаунте хостера файл &lt;strong&gt;settings.php&lt;/strong&gt; и взял оттуда рутовый пароль к бд (третья ошибка хостера)&lt;/li&gt;
&lt;li&gt;нехитрым способом вбил логин и пароль в phpmyadmin и нашел таблицу пользователей&lt;/li&gt;
&lt;li&gt;в таблице, в колонке паролей были хеши паролей юзеров от &amp;ldquo;движка&amp;rdquo; сайта хостера, сайт был соединен самописными скриптами с биллинг-панелью и directadmin'ом&lt;/li&gt;
&lt;li&gt;первым делом я выкачал хеши и email, и стал исследовать глубину хеширования (да да, меня не одуришь двойным &lt;a target="_blank" href="http://docs.php.net/manual/en/function.md5.php"&gt;md5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;при помощи perl я считал содержимое файла регистрации - результатом стало то, что я нашел алгоритм &amp;ldquo;усложнения&amp;rdquo; пароля путем его удваивания&lt;/li&gt;
&lt;li&gt;результат был успешен - md5(парольпароль) давало тот самый хеш, который был записан для моего пароля в базу, но зная алгоритм я ничего не мог поделать с паролями :(&lt;/li&gt;
&lt;li&gt;после стакана хорошего апельсинового фреша я наговнокодил простенький брут&lt;br/&gt;&lt;pre class="brush: php"&gt;$hashes = file_get_contents('dump.sql');
foreach(file('dictionary.txt') as $password) {
  if (preg_match('/'.md5($password.$password).'/', $hashes)) {
    echo "$password match in ".md5($password.$password)."\n";
  }
}
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;потребовалось пара часов чтобы взломать 4 аккаунта, этого мне в принципе было достаточно но с ними я так ничего и не сделал, ломал ради интереса&lt;/li&gt;
&lt;/ol&gt;</description><link>http://nonrealdev.tumblr.com/post/4868662784</link><guid>http://nonrealdev.tumblr.com/post/4868662784</guid><pubDate>Sat, 23 Apr 2011 20:41:00 +0400</pubDate><category>хостинг</category><category>hack</category><category>md5</category><category>пароли</category></item><item><title>jQuery Mobile</title><description>&lt;p&gt;Мир на месте не стоит, jquery вот уже много лет зарекомендовал себя  как лучший javascript-фреймворк. Сегодня наткнулся вот на такой вот форк  jquery для мобильных телефонов:&lt;/p&gt;
&lt;p&gt;Сайт: &lt;a href="http://jquerymobile.com/"&gt;http://jquerymobile.com/&lt;/a&gt;&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/4773185925</link><guid>http://nonrealdev.tumblr.com/post/4773185925</guid><pubDate>Wed, 20 Apr 2011 14:12:57 +0400</pubDate><category>ajax</category><category>jquery</category><category>javascript</category><category>mobile</category><category>wap</category></item><item><title>Detect Mobile Browser</title><description>&lt;p&gt;Простой набор регулярок и различных решений по определению мобильных устройств для 15 языков программирования&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Link&lt;/strong&gt;: &lt;a href="http://detectmobilebrowser.com/"&gt;Detect Mobile Browser - Open source mobile phone detection&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;</description><link>http://nonrealdev.tumblr.com/post/4773033185</link><guid>http://nonrealdev.tumblr.com/post/4773033185</guid><pubDate>Wed, 20 Apr 2011 13:58:00 +0400</pubDate><category>mobile</category><category>useragent</category><category>wap</category></item><item><title>Sphinx - принцип работы для чайников</title><description>&lt;p&gt;Sphinx - мощный бесплатный поисковый движок, включающий в себя драйвера для разных субд, морфологию, стемминг, саундекс, быструю работу через индексацию и многое другое&amp;hellip;&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;Установка sphinx по официальному мануалу не вызовет ни у кого затруднений, примитивные команды для консоли, за исключением того что sphinx может установиться не в /usr/local/sphinx а просто в /usr/local - в этом нет ничего страшного.&lt;/p&gt;
&lt;p&gt;В /usr/local/etc/ (/sphinx/etc) вы найдете два примера файла конфигурации, внимательно изучите первый и установите за основу второй (минимальный) -&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;cp /usr/local/etc/sphinx-min.conf.dist /usr/local/sphinx.conf&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Обратите внимание: в minimal в дефолтном индексе параметр morphology отсутствует, я лично только из-за морфологии сфинкс и использую, ну собственно кому как :)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;morphology stem_enru, soundex&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Основной принцип работы сфинкса - в результате поиска он не вернет вам текст или документ, а просто вернет вам id и некоторые доп. поля (указываются в настройках, например date_added из стандартного примера)&lt;/p&gt;
&lt;p&gt;После получения всех ids делайте запрос в бд с использованием WHERE id IN (значения)&lt;/p&gt;
&lt;p&gt;API и примеры для разных языков вы найдете в папке еще не установленного сфинкса (в распакованном архиве, в папке api)&lt;/p&gt;
&lt;p&gt;Пример реального использования sphinx мною в торрент-трекере:&lt;/p&gt;
&lt;pre class="brush: php"&gt;require '/u01/sphinx/sphinx/api/sphinxapi.php';
$search = trim(substr(htmlspecialchars($_POST['nm']), 0, 100));
$sphinx = new SphinxClient;
$sphinx-&amp;gt;SetArrayResult(true);
$sphinx-&amp;gt;SetConnectTimeout(1);
$sphinx-&amp;gt;SetWeights(array(100,1));
$sphinx-&amp;gt;SetMatchMode(0);
$sphinx-&amp;gt;SetLimits(0, 100, (100&amp;gt;1000)?100:1000);
$sphinx-&amp;gt;SetRankingMode(0);
$res = $sphinx-&amp;gt;Query($search, 'topicsfast');

if (($res) and (isset($res['matches'])) and (is_array($res['matches'])))
{
	$items_count = count($res['matches']);
	$ids_founded = array();
	foreach ($res['matches'] as $match) {
		$ids_founded[] = $match['id'];
	}
	
	$sql = "SELECT t.topic_id, f.forum_id, f.forum_name, t.topic_replies, 
	t.topic_title, u.user_id, u.username, t.topic_last_post_id,
	t.topic_last_post_time as dt, l.user_id as luid, l.username as lunm
	FROM bb_topics t
	JOIN bb_forums f
	ON t.forum_id = f.forum_id
	JOIN bb_users u
	ON t.topic_poster = u.user_id
	JOIN bb_posts p
	ON t.topic_last_post_id = p.post_id
	JOIN bb_users l
	ON p.poster_id = l.user_id
	WHERE t.topic_id IN (".implode(',', $ids_founded).")";
	
	$result = $db-&amp;gt;sql_query($sql) OR bb_die('sql error');
}
&lt;/pre&gt;
&lt;p&gt;Это лишь отрывок кода, о красоте кода тут речи не идет, главное чтобы всё работало&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/4759392902</link><guid>http://nonrealdev.tumblr.com/post/4759392902</guid><pubDate>Wed, 20 Apr 2011 03:08:00 +0400</pubDate><category>sphinx</category></item><item><title>.htaccess tester</title><description>&lt;a href="http://htaccess.madewithlove.be/"&gt;.htaccess tester&lt;/a&gt;: &lt;p&gt;Неплохой тестер для мод реврайтов&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/4758806057</link><guid>http://nonrealdev.tumblr.com/post/4758806057</guid><pubDate>Wed, 20 Apr 2011 02:48:00 +0400</pubDate><category>htaccess</category><category>mod_rewrite</category></item><item><title>Создание статического поддомена при помощи nginx</title><description>&lt;pre class="brush: js"&gt;server {

    listen		80;
    server_name	static.site.ru;
    add_header    	Vary Accept-Encoding;
    gzip             on;
    gzip_min_length  500;
    gzip_proxied     expired no-cache no-store auth;
    gzip_types       text/css application/x-javascript;
    gzip_disable     "MSIE [1-6]\.";
    gzip_vary 	on;

    location / {
        deny all;
    }

    location ~* ^.+\.(jpe?g|gif|css|js|swf|ico|png)$ {
        root /home/user/www/site.ru/static;
        access_log   off;
        expires      30d;
    }
}
&lt;/pre&gt;</description><link>http://nonrealdev.tumblr.com/post/4757750783</link><guid>http://nonrealdev.tumblr.com/post/4757750783</guid><pubDate>Sun, 17 Apr 2011 01:12:00 +0400</pubDate><category>nginx</category><category>static</category><category>настройка</category><category>оптимизация</category><category>статика</category></item><item><title>Online RegExr</title><description>&lt;a href="http://gskinner.com/RegExr/"&gt;Online RegExr&lt;/a&gt;: &lt;p&gt;Nice tool for regular expression testing&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/4757493030</link><guid>http://nonrealdev.tumblr.com/post/4757493030</guid><pubDate>Sat, 16 Apr 2011 02:03:00 +0400</pubDate></item><item><title>Первичное знакомство и настройка VDS</title><description>&lt;p&gt;Попытаюсь в этом сообщении передать часть своего опыта по работе с VDS маломощных конфигураций.&lt;/p&gt;
&lt;p&gt;И так сразу к делу - вы решили брать VDS, но у вас ещё нету опыта по настройке и эксплуатации выделенного сервера (пускай даже виртуального).&lt;/p&gt;
&lt;p&gt;С самого начала перед вами предстоит выбор где брать, почем и какой конфигурации. Для того чтобы определится, какая конфигурация вам нужна, прикиньте примерно занятую оперативную память:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;mysql - не менее 40 мб&lt;/li&gt;
&lt;li&gt;apache2 - не менее 30 мб&lt;/li&gt;
&lt;li&gt;сама система - не менее 10 мб&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;!-- more --&gt;В любом случае вы наверняка сможете в будущем улучшить ваш тарифный план если нагрузка будет слишком сильна. Если вы будете ставить &lt;a href="http://rubyonrails.ru"&gt;ROR&lt;/a&gt; то будьте готовы к минимум 100 мб дополнительно занятой оперативы. Не советую вам брать слишком слабые сервера. На нормальном сервере для комфортной работы надо не менее 400 mhz процессора, и не менее 256 мб оперативной памяти. В зависимости от сложности проекта вероятно вы сможете обойтись и 128 мб оперативы, но лучше подстраховаться и взять побольше. К тому же если хостер предлагает вам такой слабый тариф (128 мб RAM) то наверняка на сервере находится много нод и он будет неприятельски поглюкивать. При выборе хостера обратите внимание на его репутацию, проверьте аттестаты вебмани и лицензии на телекоммуникационные услуги или свидетельство о регистрации, также проверьте отзывы в интернете и спросите опытных людей. Обратите внимание на такие параметры как тип виртуализации (самый распространенный сейчас это OpenVZ), количество ядер в процессоре на самом физическом сервере (чем больше ядер - тем лучше он будет работать с виртуальными нодами) и список доступных для установки операционных систем. Также стоит уделить внимание местоположению сервера и размеру канала отдачи. Пропингуйте сайт хостера или демо-сервера, если таковой имеется (в командной строке напишите &lt;strong&gt;ping megaserverhoster.ru&lt;/strong&gt;). Очень отлично будет если хостер предоставит вам возможность скачать с сервера файл, таким образом вы сможете определить достоинство канала отдачи, если конечно у вас нормальная скорость интернета :)&lt;/p&gt;
&lt;p&gt;Перейдём к выбору операционной системы. Должен заметить что все серверные операционные системы как правило линуксоподобные и ставить Windows на сервер вам никто не будет (за исключением VIP-серверов для богатых толстосумов). Поэтому, если вы еще не знакомы с linux, советую поставить себе на компьютер (или на &lt;a href="http://www.google.ru/search?q=virtualbox"&gt;виртуальную машину)&lt;/a&gt; линуксовую юзерфрендли-ось. К таким в первую очередь относится Ubuntu (есть также Suse, Kubuntu, Xubuntu, Edubuntu, Mandriva и др.) и если вы еще даже не представляете себе что это такое то лучше начать всё же с Ubuntu, так как она более близка к Debian, а это основная серверная ось. Погуглите по интернету, для ubuntu есть много обучающих сайтов и различных форумов для решения проблем. Научитесь работать в командой строке (shell) и заучите хотя бы парочку основных команд (pwd, cd, rm, ls, chmod и тп). И так, для установки на сервер как правило предлагают следующие ОС: CentOS (второе место по популярности), Debian (очень дружелюбная и самая популярная), Ubuntu (для особых фанатиков, но критически не рекомендую ставить её в качестве серверной оси), Fedora (не могу сказать про неё ничего плохого так как опыта работы с ней не имел), Suse (под неё желательно мощный сервер - в противном случае ждите тормозов) и FreeBSD (это не совсем линукс, но нечто подобное. Система очень глубокая и на её изучение у вас могут уйти годы. Не удивляйтесь потом что у вас вырастет борода и пропадёт зрение. Новичкам не рекомендую). Я рекомендую Debian так как он не требователен к ресурсам и как правило не содержит в себе ничего лишнего в отличии от той же убунты. Перед окончательным выбором рекомендую вам ознакомится с версиями Debian'a, сейчас он поставляется как правило в следующих дистрибутивах:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Этч (Etch) - устаревшая версия, не имеющая больше поддержки. Ставить критически не рекомендую&lt;/li&gt;
&lt;li&gt;Ленни (Lenny) - поддержка закончится в феврале 2012, ставить не рекомендую так как статус дистрибутива уже oldstable&lt;/li&gt;
&lt;li&gt;Сквиз (Squeeze) - пока самая стабильная версия&lt;/li&gt;
&lt;li&gt;Уизи (Wheezy) - ещё не вышла :)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;После выбора дистрибутива выбираем разрядность. Как правило все берут 64-битную ось, так как она относительно более стабильна в отношении запущенных приложений и тяжёлых нагрузок. Но если у вас очень мало оперативной памяти то всё же лучше будет выбрать 32-битную версию. Во всяком случае решать вам - (256 мб RAM стоит 64 битка полёт нормальный).&lt;/p&gt;
&lt;p&gt;Если вы будете прикреплять домены в зонах com.ru, org.ru, net.ru и pp.ru то вам потребуется 2 ip адреса в разных сетях класса C (A.B.C.D), в противном случае вы спокойно обойдётесь одним IP-адресом.&lt;/p&gt;
&lt;p&gt;По поводу панелей: если вы делаете хостинг то конечно вам лучше будет поставить панель управления (и еще заранее поинтересуйтесь системными требованиями это панели, для CPANEL предпочтительнее будет поставить ос CentOS). Но если вы берёте сервер чисто для себя, то ничего ставить не нужно - это только добавит вам проблем. Очень хорошо если вам выделят VDSManager или панель управления питанием, которые позволят вам проводить манипуляции с сервером на уровне холодных перезагрузок. Сразу скажу что если ваш сервер будет многопользовательский (хостинг), то вам придется сильно попарится с настройкой безопасности. О том, что делаю лично я постараюсь изложить в краткости (если вы хостинг делать не собираетесь просто не читайте эти пункты):&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Ограничить php в возможностях (system, exec, shell_exec и тп нужно отключить в php.ini). Хочу заметить что ограничение php по возможностям профессиональному хакеру не будет преградой, не стоит основывать безопасность на настройках php&amp;hellip;&lt;/li&gt;
&lt;li&gt;Проверить грамотно ли расставлены права на директории пользователей и бинарные файлы, лучше запретить доступ группе пользователей к perl и python (если вы не в состоянии их грамотно настроить).&lt;/li&gt;
&lt;li&gt;Если вы предоставляете доступ SSH то уделите внимание созданию SSH-песочницы, &lt;a target="_blank" href="http://nonrealdev.tumblr.com/post/4760796628/ssh"&gt;как её сделать я описал тут&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Если вы отключите SSH и обрубите всё опасное - хакер может воспользоваться Cron-интерфейсом в вашей панели управления! Вам стоит поинтересоваться что представляют из себя форк-бомбы, эксплоиты, шелы, процессы-зомби, дефейсы, руткиты и симлинки.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Управление сервером рекомендую осуществлять по SSH, если вы ещё незнаете что это такое, то в кратце я скажу вам, что это удалённый доступ к командной строке сервера (Server Shell). Короче доступ к терминалу вашего сервера с вашего компа. SFTP - встроенный в OpenSSH FTP-сервер. В отличии от обычного ftp, sftp имеет ряд преимуществ. В первую очередь это безопасность передачи и приёма информации, и плюс осуществление многих неосуществимых для простого фтп операций, таких как удаление папки с вложенными файлами целиком (ftp будет удалять каждый файл по отдельности, а sftp просто убьёт папку командой rm -r -f). Рекомендую также присмотрется к SCP, о нём я растолкую позже.&lt;/p&gt;
&lt;p&gt;Установите себе следующие программы: WinSCP и Putty. Первая - хороший sftp-клиент под Windows, вторая - хороший ssh-клиент под Windows. Вместе они идеально сочетаются. Установите их в одну папку - тогда WinSCP получит возможность открывать текущую сессию в putty. WinSCP также умеет хранить пароли, что примечательно для удобства (но злоупотреблять не следует, особенно если вы не обеспечили должную безопасность собственного ПК). Ещё WinSCP умеет редактировать файлы, что очень удобно и освобождает от использования геморных nano/vi и тп.&lt;/p&gt;
&lt;p&gt;WinSCP - единственный нормальный scp-клиент под Windows. SCP - это усовершенствованная модель протокола sftp, которая открывает и ssh и sftp разом (в одном бинарнике), и пользуется их возможностями одновременно, компенсируя одно другим. Скорость передачи данных будет чуть медленнее чем по SFTP, это связанно с тем, что копирование происходит по RCP, однако стоит заметить что работа с файлами будет значительно быстрее.&lt;/p&gt;
&lt;p&gt;И так вы установили ОС, установили необходимый софт для управления и теперь вы готовы к работе с сервером. Основные утилиты работы с пакетами на Debian:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;apt-get&lt;/strong&gt; - служит для установки и удаления пакетов, этот пакетный менеджер стоит по умолчанию, рекомендую дополнить его aptitude. Чтобы установить пакет &lt;strong&gt;apt-get install название&lt;/strong&gt;, например &lt;em&gt;apt-get install aptitude&lt;/em&gt;. Чтобы удалить пакет &lt;strong&gt;apt-get remove название&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aptitude&lt;/strong&gt; - дополнительный пакетный менеджер, который не входит по умолчанию в ваш дистрибутив, установите его одним из первых&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;apt-cache&lt;/strong&gt; - программа для проверки локального кеша пакетов. К примеру командой &lt;strong&gt;apt-cache policy название&lt;/strong&gt; вы выведите информацию об установленной версии пакета, и доступных его версиях из текущих активных репозиториев.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Пример использования команды &lt;strong&gt;apt-cache policy php5-curl&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class="bbcodeblock"&gt;apt-cache policy php5-curl
php5-curl:
  Installed: (none)
  Candidate: 5.2.6.dfsg.1-1+lenny8
  Version table:
     5.2.6.dfsg.1-1+lenny8 0
        500 &lt;a href="http://security.debian.org"&gt;http://security.debian.org&lt;/a&gt; lenny/updates/main Packages
     5.2.6.dfsg.1-1+lenny4 0
        500 &lt;a href="ftp://mir1.ovh.net"&gt;ftp://mir1.ovh.net&lt;/a&gt; lenny/main Packages&lt;/pre&gt;
&lt;p&gt;Разобрались с пакетами? Теперь нужно установить необходимые вам утилиты и серверные приложения. Возможно вам потребуется изменить ваши репозитории для поиска и скачивания пакетов. Пути поиска пакетов прописаны в файле &lt;strong&gt;/etc/apt/sources.list&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Пример файла на Debian Lenny:&lt;/p&gt;
&lt;p&gt;&lt;span class="codeStyle"&gt;deb &lt;a href="http://ftp.debian.org/debian"&gt;http://ftp.debian.org/debian&lt;/a&gt; lenny main contrib non-free&lt;/span&gt;&lt;br/&gt;&lt;span class="codeStyle"&gt;deb &lt;a href="http://ftp.debian.org/debian-volatile"&gt;http://ftp.debian.org/debian-volatile&lt;/a&gt; lenny/volatile main contrib non-free&lt;/span&gt;&lt;br/&gt;&lt;span class="codeStyle"&gt;deb &lt;a href="http://ftp.debian.org/debian-security"&gt;http://ftp.debian.org/debian-security&lt;/a&gt; lenny/updates main contrib non-free&lt;/span&gt;&lt;br/&gt;&lt;span class="codeStyle"&gt;deb &lt;a href="http://php53.dotdeb.org"&gt;http://php53.dotdeb.org&lt;/a&gt; oldstable all&lt;/span&gt;&lt;br/&gt;&lt;span class="codeStyle"&gt;deb-src &lt;a href="http://php53.dotdeb.org"&gt;http://php53.dotdeb.org&lt;/a&gt; oldstable all&lt;/span&gt;&lt;br/&gt;&lt;span class="codeStyle"&gt;deb &lt;a href="http://mirror.yandex.ru/backports.org/"&gt;http://mirror.yandex.ru/backports.org/&lt;/a&gt; lenny-backports main contrib non-free&lt;/span&gt;&lt;br/&gt;&lt;span class="codeStyle"&gt;deb &lt;a href="http://packages.dotdeb.org"&gt;http://packages.dotdeb.org&lt;/a&gt; oldstable all&lt;/span&gt;&lt;br/&gt;&lt;span class="codeStyle"&gt;deb-src &lt;a href="http://packages.dotdeb.org"&gt;http://packages.dotdeb.org&lt;/a&gt; oldstable&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Если вы незнаете где взять хорошие репозитории для вашей ОС с новыми версиями пакетов - поищите их в гугле.&lt;/p&gt;
&lt;p&gt;Вот некоторые относительно новые версии пакетов:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;nginx - 0.7+&lt;/li&gt;
&lt;li&gt;apache - 2.2.9+&lt;/li&gt;
&lt;li&gt;php - 5.2.17+ или 5.3.5+&lt;/li&gt;
&lt;li&gt;mysql - 5+&lt;/li&gt;
&lt;li&gt;phpmyadmin - 3.3.9+&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Проверьте установленную версию пакета у вас (apt-cache policy писал выше), и если потребуется переустановите её обновив репозиторий. Чтобы обновить репозиторий пропишите apt-get update или aptitude update сразу после редактирования файла sources.list&lt;/p&gt;
&lt;p&gt;Советую установить следующие утилиты: htop и mc. Первая показывает графически степень нагрузки на CPU, SWAP (файл подкачки, на OpenVZ как правило отсутствует) и RAM - что-то вроде &amp;ldquo;диспетчера задач&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;img title="htop" src="http://himgs.ru/pic_b/5577d0b0b318dcc35bda41188efdbc90.png" alt="htop" height="251" width="400"/&gt;&lt;/p&gt;
&lt;p&gt;Вторая (mc) представляет из себя графический файловый менеджер на подобии FAR&lt;/p&gt;
&lt;p&gt;&lt;img title="mc" src="http://w2a.ru/uploads/images/7/e/8/7/33/big/1c54caa10c.png" alt="mc" height="290" width="400"/&gt;&lt;/p&gt;
&lt;p&gt;После этого вам будет легче управлять сервером (mc) и определять какой процесс загружает память (htop).&lt;/p&gt;
&lt;p&gt;Всё готово, ставим или обновляем уже установленные пакеты php, apache, nginx, phpmyadmin, mysql-server (какие вам потребуются вообщем) и так далее&lt;/p&gt;
&lt;p&gt;Как прикрепить домен к серверу?&lt;/p&gt;
&lt;p&gt;Добавляем в файл &lt;strong&gt;/etc/apache2/sites-available/default&lt;/strong&gt;&lt;br/&gt;&amp;lt;VirtualHost *:80&amp;gt; &lt;br/&gt;DocumentRoot /home/myuser/www/mysite.net&lt;br/&gt;ServerName mysite.net&lt;br/&gt;ServerAlias &lt;a href="http://www.mysite.net"&gt;www.mysite.net&lt;/a&gt;&lt;br/&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DocumentRoot&lt;/strong&gt; - путь к сайту&lt;br/&gt;&lt;strong&gt;ServerName&lt;/strong&gt; - домен&lt;br/&gt;&lt;strong&gt;ServerAlias&lt;/strong&gt; - алиасы для домена&lt;/p&gt;
&lt;p&gt;Nginx - хороший сервер для слабомощной VDS, так же он способен кешировать и работать со статикой, с чем у апача проблемы.&lt;/p&gt;
&lt;p&gt;Как установить nginx поверх apache в debian?&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;устанавливаем apache (если еще не установлен)&lt;/li&gt;
&lt;li&gt;устанавливаем nginx (обязательно обратите внимание на версию, линейка 0.6 уже древняя как говно мамонта)&lt;/li&gt;
&lt;li&gt;редактируем &lt;strong&gt;/etc/apache2/ports.conf &lt;/strong&gt;(если этого файла нету ищите эти настройки в других файлах конфигурации апача, вместо 8080 можно любой другой незанятый порт использовать, к примеру я использую 800)&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;NameVirtualHost *:8080&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;Listen 8080&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Теперь редактируем&lt;strong&gt; /etc/apache2/sites-available/default&lt;/strong&gt;, меняем все порты *:80 на порты *:8080&lt;/li&gt;
&lt;li&gt;пишем команду &lt;strong&gt;/etc/init.d/apache2 restart&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;пишем команду &lt;strong&gt;/etc/init.d/nginx start&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;переходим на http://ваш_ip/ и видим Welcome To Nginx! При переходе на http://ваш_ip:8080 выдаст дефолтную страничку апача. Если всё так - то этот шаг вы выполнили на отлично, продолжаем настройку, теперь мы будем работать с каталогом /etc/nginx/&lt;/li&gt;
&lt;li&gt;создаём файл &lt;strong&gt;/etc/nginx/proxy.conf&lt;/strong&gt; с содержимым:&lt;br/&gt;&lt;br/&gt;proxy_redirect off;&lt;br/&gt;proxy_set_header Host $host;&lt;br/&gt;proxy_set_header X-Real-IP $remote_addr;&lt;br/&gt;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br/&gt;client_max_body_size 10m;&lt;br/&gt;client_body_buffer_size 128k;&lt;br/&gt;proxy_connect_timeout 90;&lt;br/&gt;proxy_send_timeout 90;&lt;br/&gt;proxy_read_timeout 90;&lt;br/&gt;proxy_buffer_size 4k;&lt;br/&gt;proxy_buffers 4 32k;&lt;br/&gt;proxy_busy_buffers_size 64k;&lt;br/&gt;proxy_temp_file_write_size 64k;&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;теперь редактируем файл &lt;strong&gt;/etc/nginx/nginx.conf&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;user www-data;&lt;br/&gt;worker_processes 1;&lt;br/&gt;&lt;br/&gt;error_log /var/log/nginx/error.log;&lt;br/&gt;pid /var/run/nginx.pid;&lt;br/&gt;&lt;br/&gt;events {&lt;br/&gt; worker_connections 1024;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;http {&lt;br/&gt; include /etc/nginx/mime.types;&lt;br/&gt; access_log /var/log/nginx/access.log;&lt;br/&gt; error_log /var/log/nginx/nginx_error.log debug;&lt;br/&gt; sendfile on;&lt;br/&gt; keepalive_timeout 65;&lt;br/&gt; tcp_nodelay on;&lt;br/&gt; client_max_body_size 400m;&lt;br/&gt; gzip on;&lt;br/&gt; gzip_disable &amp;ldquo;MSIE [1-6].(?!.*SV1)&amp;rdquo;;&lt;br/&gt; gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;&lt;br/&gt; include /etc/nginx/conf.d/*.conf;&lt;br/&gt; include /etc/nginx/sites-enabled/*;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;www-data это юзер по дефолту, наверняка у вас он будет называться так же, если у вас нету проблем с английским языком вы поймёте какая настройка за что отвечает&lt;/li&gt;
&lt;li&gt;создаём файл &lt;strong&gt;/etc/nginx/sites-available/apache&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;upstream backend {&lt;br/&gt; server 127.0.0.1:8080;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;server { &lt;br/&gt; listen 80; &lt;br/&gt; server_name 85.10.251.215 mysite.net &lt;a href="http://www.mysite.net"&gt;www.mysite.net&lt;/a&gt; blog.mysite.net mysite2.com; &lt;br/&gt;&lt;br/&gt; location / { &lt;br/&gt; proxy_pass http://backend;&lt;br/&gt; include /etc/nginx/proxy.conf; &lt;br/&gt; } &lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;как вы заметили выше в строке server_name нужно прописать все ваши прикрепленные домены, в т.ч. ip (по желанию)&lt;/li&gt;
&lt;li&gt;выполняем команды:&lt;br/&gt;&lt;strong&gt;cd /etc/nginx/sites-enabled&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;ln ../sites-available/apache apache&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;/etc/init.d/nginx restart&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;если вы всё правильно сделали и я нигде не ошибся, то всё готово - теперь ваш апач стал полноценным backend для nginx :)&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Теперь перейдём к оптимизации&lt;/p&gt;
&lt;p&gt;На слабом сервере под оптимизацией понимается &amp;ldquo;уменьшение количества занятой оперативы так чтобы всё работало&amp;rdquo; :)&lt;/p&gt;
&lt;p&gt;Обычно установщики VDS не очень заботятся про занятую оперативу и бывает что после установки занято к примеру 190 из 256 мб при незапущенных процессах (простое системы). Такой подход конечно нам не нужен, и мы начинаем оптимизацию&amp;hellip;&lt;/p&gt;
&lt;p&gt;Первым делом надо определить что-же всё таки грузит нашу бедную вдску. Запускаем htop и делаем сортировку по MEM% (после захода в htop нажмите F6 и выберите в левом вертикальном столбце поле MEM%)&lt;/p&gt;
&lt;p&gt;Как правило, на первом месте оказываются mysqld (MySQL Daemon) и /usr/sbin/apache2, остальные экзотические процессы жрущие более 6% оперативы (при 256 мб) стоит убить (если конечно вы их не запускали и они вам не нужны)&lt;/p&gt;
&lt;p&gt;Часто после установки apache включает в себя все модули тем самым засирая как можно больше оперативы. Отключите ненужные вам модули (по типу mod_perl). Для включения модулей apache используется команда &lt;strong&gt;a2enmod&lt;/strong&gt;, для отключения используется - &lt;strong&gt;a2dismod&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;a2dismod mod_perl &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;После включения/отключения обязательно переконфигурируйте и перезагрузите апач&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;/etc/init.d/apache2 reload&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;/etc/init.d/apache2 restart&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;теперь отредактируйте файл конфигурации &lt;strong&gt;/etc/apache2/apache2.conf, &lt;/strong&gt;строки отвечающие за оптимизацию:&lt;br/&gt;&lt;br/&gt;# prefork MPM&lt;br/&gt;# StartServers: number of server processes to start&lt;br/&gt;# MinSpareServers: minimum number of server processes which are kept spare&lt;br/&gt;# MaxSpareServers: maximum number of server processes which are kept spare&lt;br/&gt;# MaxClients: maximum number of server processes allowed to start&lt;br/&gt;# MaxRequestsPerChild: maximum number of requests a server process serves&lt;br/&gt;&amp;lt;IfModule mpm_prefork_module&amp;gt;&lt;br/&gt;StartServers 1&lt;br/&gt;MinSpareServers 1&lt;br/&gt;MaxSpareServers 5&lt;br/&gt;MaxClients 10&lt;br/&gt; MaxRequestsPerChild 300&lt;br/&gt;&amp;lt;/IfModule&amp;gt;&lt;br/&gt;&lt;br/&gt;# worker MPM&lt;br/&gt;# StartServers: initial number of server processes to start&lt;br/&gt;# MaxClients: maximum number of simultaneous client connections&lt;br/&gt;# MinSpareThreads: minimum number of worker threads which are kept spare&lt;br/&gt;# MaxSpareThreads: maximum number of worker threads which are kept spare&lt;br/&gt;# ThreadsPerChild: constant number of worker threads in each server process&lt;br/&gt;# MaxRequestsPerChild: maximum number of requests a server process serves&lt;br/&gt;&amp;lt;IfModule mpm_worker_module&amp;gt;&lt;br/&gt;StartServers 1&lt;br/&gt;MaxClients 10&lt;br/&gt;MinSpareThreads 1&lt;br/&gt;MaxSpareThreads 4&lt;br/&gt; ThreadsPerChild 25&lt;br/&gt; MaxRequestsPerChild 300&lt;br/&gt;&amp;lt;/IfModule&amp;gt;&lt;/p&gt;
&lt;p&gt;Можете поставить у себя также как и в примере, по дефолту они у вас будут стоять по другому, про тонкую настройку апача на русском языке рекомендую посмотреть &lt;a target="_blank" href="http://www.ibm.com/developerworks/ru/library/l-tune-lamp-2/l-tune-lamp-2.html"&gt;сюда&lt;/a&gt;, и не забудьте переконфигурировать и перезапустить апач&lt;/p&gt;
&lt;p&gt;Теперь что касается mysql - решите сначала нужен ли вам innodb, и сможете ли вы обойтись myisam (innodb может жрать по ~70 мб оперативы сам по себе, а то и больше)&lt;/p&gt;
&lt;p&gt;выполните команду:&lt;br/&gt;&lt;strong&gt;cp /usr/share/doc/mysql-server-5.0/examples/my-small.cnf /etc/mysql/my.cnf &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;теперь редактируйте файл /etc/mysql/my.cnf&lt;/p&gt;
&lt;p&gt;в графе [mysqld] найдите текст &lt;strong&gt;#skip-bdb&lt;/strong&gt; и замените его на &lt;strong&gt;skip-bdb&lt;/strong&gt; (раскомментирование)&lt;/p&gt;
&lt;p&gt;ниже добавьте &lt;strong&gt;skip-innodb&lt;/strong&gt; (по желанию)&lt;/p&gt;
&lt;p&gt;готово! сохраните файл и перезагружайте mysql&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;/etc/init.d/mysql restart&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;теперь зайдите в htop и убедитесь что кол-во занятой оперативной памяти значительно уменьшилось&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/4757288368</link><guid>http://nonrealdev.tumblr.com/post/4757288368</guid><pubDate>Fri, 08 Apr 2011 01:55:00 +0400</pubDate><category>vds</category><category>server</category><category>настройка</category><category>nginx</category><category>apache</category><category>debian</category><category>upstream</category><category>оптимизация mysql</category></item><item><title>Как сделать SSH на своём хостинге с ограниченным набором команд</title><description>&lt;p&gt;Пример можно найти &lt;a title="Jino SSH" target="_blank" href="http://jino.ru/support/faq/tech-general/ssh.html#ssh"&gt;тут&lt;/a&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;Создаем директорию с разрешенными командами:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;mkdir /restricted_bin&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;br/&gt;в нее делаем симлинки с разрешенными командами:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ln -s /bin/ls /restricted_bin&lt;br/&gt;ln -s /bin/cat /restricted_bin&lt;br/&gt;&amp;hellip; и т.д.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;br/&gt;Дальше заставляем SSH запустить при логине юзера bash в resticted режиме. Добавляем в конец &lt;strong&gt;/etc/ssh/sshd_config&lt;/strong&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Match User НУЖНЫЙЮЗЕРНЭЙМ&lt;br/&gt;ForceCommand PATH=/restricted_bin /bin/bash -r&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;br/&gt;Рестартуем sshd. &lt;br/&gt;Готово! Юзернэйм не сможет выполнять команд, кроме тех, что в /restricted_bin или встроенны в баш типа pwd. Также не сможет вызвать команды из своего /home или с прямым указанием пути типа /usr/bin/mc, &lt;br/&gt;и прочие вкусности (если интересно - вкусности в главе RESTRICTED SHELL из man bash). &lt;br/&gt;&lt;br/&gt;Примечание: ни в коем случае нельзя добавлять в /restricted_bin команд mc или vi, так как они способны запускать свой собственный, полноценный, шелл.&lt;br/&gt;&lt;br/&gt;И еще вот мой приблизительный список относительно безопасных команд, которые вроде бы можно разрешить (некоторые тут из самого баша, т.е. уже разрешены, смотрите сами, я навскидку написал):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ls&lt;br/&gt;cp&lt;br/&gt;mv&lt;br/&gt;du&lt;br/&gt;cat&lt;br/&gt;less&lt;br/&gt;echo&lt;br/&gt;grep&lt;br/&gt;man&lt;br/&gt;clear&lt;br/&gt;date&lt;br/&gt;cal&lt;br/&gt;whois&lt;br/&gt;curl&lt;br/&gt;exit&lt;br/&gt;host&lt;br/&gt;pwd&lt;br/&gt;rm&lt;br/&gt;php&lt;br/&gt;chmod&lt;br/&gt;cd&lt;br/&gt;tail&lt;br/&gt;touch&lt;br/&gt;mkdir&lt;br/&gt;rmdir&lt;br/&gt;tar&lt;br/&gt;iconv&lt;br/&gt;mysql&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://nonrealdev.tumblr.com/post/4760796628</link><guid>http://nonrealdev.tumblr.com/post/4760796628</guid><pubDate>Mon, 25 Jan 2010 03:54:00 +0300</pubDate><category>ssh</category><category>хостинг</category><category>безопасность</category><category>команды</category><category>песочница</category><category>restricted</category></item><item><title>Опасность PERL на криво настроенных правах</title><description>&lt;p&gt;И так, если права на директориях юзеров у вас не 700 и доступен запуск perl-скриптов (а это может быть как прямой запуск, так и через cron/ssh) хакер поступит следующим образом:&lt;br/&gt;&lt;!-- more --&gt;&lt;br/&gt;1. получит через cron список пользователей &lt;strong&gt;cat /etc/passwd &amp;gt; users.txt&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;2. создаст perl-скрипт подобный этому:&lt;br/&gt;&lt;strong&gt;&lt;br/&gt;#!/usr/bin/perl           &lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;open (f, &amp;ldquo;&amp;lt;/home/megauser/public_html/index.php&amp;rdquo;);&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;while (&amp;lt;f&amp;gt;)&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;  print;&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;close f;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;3. запустит скрипт либо напрямую &lt;strong&gt;site.ru/cgi-bin/test.pl&lt;/strong&gt;&lt;br/&gt;   либо через &lt;strong&gt;cron perl test.pl &amp;gt; public_html/result.txt&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;На данный момент большое количество хостингов подвержены этой уязвимости. Быт их админов строится на том, что они безопасно настроили свой php, забыв при этом про всё остальное что есть на их хостинге&amp;hellip;&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/4760495714</link><guid>http://nonrealdev.tumblr.com/post/4760495714</guid><pubDate>Wed, 20 Jan 2010 03:44:00 +0300</pubDate><category>perl</category><category>хостинг</category><category>hack</category><category>защита</category></item><item><title>Обманываем pc-программы, использующие удалённые API для авторизаций</title><description>&lt;p&gt;Для этого нам понадобится:&lt;br/&gt;1. Снифер&lt;br/&gt;2. Веб сервер на локалхосте (под винду - денвер, xampp или просто apache)&lt;br/&gt;3. Прямые руки&lt;br/&gt;&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;Сначала запускаем снифер и снифаем все запросы касающиеся авторизации, затем создаем на локалхосте точно такой же скрипт, который всегда будет возвращать &amp;ldquo;верный ответ&amp;rdquo;. Теперь редактируем &lt;strong&gt;hosts&lt;/strong&gt; и выставляем в него (если допустим идёт обращение к api.megasite.net)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;127.0.0.1 api.megasite.net&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Запускаем сервер и запускаем прогу&amp;hellip;&lt;/p&gt;</description><link>http://nonrealdev.tumblr.com/post/4760987040</link><guid>http://nonrealdev.tumblr.com/post/4760987040</guid><pubDate>Wed, 20 Jan 2010 03:44:00 +0300</pubDate><category>api</category><category>auth</category><category>hack</category></item></channel></rss>
