Архив рубрики: Сисадминство

Не включается Macbook Air 13 2013 года выпуска

Это просто жесть, как я сейчас починил MacBook Air 13 2013 года выпуска.)
В общем, он у меня был в сумке и чехле, и сумка упала со стула. Высота небольшая, я даже не парился.

Через минут 10-15 я включил его (открыл крышку) поработал, закрыл крышку, а потом еще раз её открыл и НИЧЕГО. Черный экран. На hard reset (долгое нажатие power) не откликается. Ну, думаю, всё ппц.

Оказывается, я не один такой. По ссылке была горячая дискуссия по этому поводу. И нашёлся ВНЕЗАПНЫЙ способ починить: оказывается дело в сенсоре внезапного движения (SMS, sudden motion sensor). Он как-то глючит на новых моделях.

Короче, чтобы починить, нужно немного приоткрыть крышку, крепко взять мак в руки и сильно трясануть его пару раз (как писалось: «SHAKE IT LIKE YOU MEAN IT!»). Потом открыть крышку до конца и нажать Power. И та-да! Мак включается как ни в чем не бывало.))

ModX на Linux + удаленный Microsoft SQL Server ? love

Так вышло, что надо было реализовать следующую конфигурацию:

Linux (Debian) + Apache + PHP + ModX revolution + удаленный MS SQL Server

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

  1. ModX 2.1+ использует Microsoft SQL драйвер для PHP (это набор функций типа sqlsrv_*). Однако этот драйвер был выпущен только для Windows платформы. Будущий релиз на Linux крайне туманен.
  2. Есть возможность использовать открытый драйвер  FreeTDS, но тогда придётся все функции типа «mssql_*» переназначить на функции «sqlsrv_*«. Некоторые ребята сделали подобный трюк для Drupal, но при этом отмечалась общая нестабильность конфигурации и работало это только для MS SQL Server 2008.

Хорошо, что заказчик согласился сменить конфигурацию, и сейчас ModX отлично работает на Windows Azure (облачный IIS + MSSQL).

Apache & Fail2ban: защита веб-сервера от слепых атак перебором

Задача: защитить веб-сервер Apache2 от атак слепого перебора багов возможной CMS сайта типа такого:

surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /install.php?phpbb_root_di r=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /mantis/login_page.php?g_meta_inc _dir=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /page.php?template=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /phorum/admin/actions/del.php?include_path=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:11 +0000] "GET /pollensondage.inc.php?app _path=../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"<br />
surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:40 +0000] "GET /joomla/index.php?option=com_sbsfile&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_rokdownloads&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_sectionex&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_ganalytics&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_janews&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"surdoserver.ru:80 127.0.0.1 - - [23/Dec/2011:07:20:41 +0000] "GET /joomla/index.php?option=com_linkr&controller= ../../../../../../../proc/self/environ%00 HTTP/1.0" 404 3449 "-" "<?php system(\"id\"); ?>"

Решение: использовать opensource фильтр-монитор атак Fail2ban для различных сервисов (vsftp, ssh, Apache и пр.). Для этого:

  1. Создаем файл /etc/fail2ban/filter.d/apache-404.conf
  2. Вписываем в него следующее:
    [Definition]
    failregex = (?P<host>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .+ 404 [0-9]+ "
    ignoreregex = favicon\.ico
    
  3. В файл /etc/fail2ban/jail.local добавляем:
    [apache-404]
    
    enabled = true
    port = http,https
    filter = apache-404
    logpath = /var/log/apache*/*access.log
    bantime = 3600
    findtime = 600
    maxretry = 5
    
  4. Перезагружаем fail2ban командой в консоли:
    /etc/init.d/fail2ban restart

Zend Framework & Linux: шелл-скрипт для автоматического обновления

Задача: автоматизировать процесс обновления Zend Framework для всех приложений на сервере.

Решение:

  1. Создаем папку типа /var/www/libraries/ZF-last-stable/, которую и будем указывать для всех приложений в /public/index.php
  2. Создаем файл update_ZF_1.x.sh с таким содержимым:
    #!/bin/bash
    echo "Downloading new stable ZF";
    zendname="ZendFramework-1.11.1";
    wget "http://framework.zend.com/releases/$zendname/$zendname-minimal.tar.gz";
    echo "Unpacking"
    tar -xvzf "$zendname-minimal.tar.gz";
    echo "Deleting original directroy!";
    rm -r ZF-last-stable;
    mv "$zendname-minimal" "ZF-last-stable";
    exit
    
  3. Вызываем скрипт sh /var/www/libraries/update_ZF_1.x.sh

Что мы натворили: в переменной zendname мы указываем нужную версию. Архив с этой версией скачивается, распаковывается, удаляется папка zf-last-stable,  папку с разархивированным ZF переименовываем в zf-last-stable.

Получилось, правда, полуавтоматическое обновление, новую версию всё-равно придется указывать вручную. Из вариантов совсем автоматических можно использовать svn export «uri SVN репозитария с последней стабильной версией», но тогда будет неверно работать Zend_Version.

Apache: Разгоняем сайт

Цель: максимальная скорость работы веб-приложения.
Задача: включение кеширования на Apache сервере.
Решение:

  1. Создаем в корне сайта файл .htaccess
  2. Проверяем, какой модуль включен на хостинге (mod_headers или mod_expires):
    1. Вставляем код:
      ExpiresActive On
      ExpiresDefault A0
      
      # 1 YEAR
      <FilesMatch "\.(ico)$">
      ExpiresDefault A9030400
      </FilesMatch>
      
      # 6 month
      <FilesMatch "\.(flv|jpg|jpeg|png|gif|swf)$">
      ExpiresDefault A14515200
      </FilesMatch>
      
      # 3 HOUR
      <FilesMatch "\.(txt|xml|js|css)$">
      ExpiresDefault A10800"
      </FilesMatch>
      

      Если при загрузке сайта вылетает ошибка сервера, значит не включен mod_expires.

    2. Вставляем код
      <FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
        Header set Cache-Control "max-age=29030400"
      </FilesMatch>
      # WEEK
      <FilesMatch "\.(js|css|swf)$">
        Header set Cache-Control "max-age=604800"
      </FilesMatch>
      # 45 MIN
      <FilesMatch "\.(html|htm|txt)$">
        Header set Cache-Control "max-age=2700"
      </FilesMatch>
      

      Если при загрузке сайта вылетает ошибка сервера — не включен mod_headers.

  3. Если оба модуля подключены — оставляем вариант для mod_expires. Как утверждает Google, заголовок expires поддерживается бОльшим количеством браузеров.
  4. Если ни один модуль не включен и есть рутовски доступ к серверу по ssh — включаем модуль mod_exparies с помощью командной строки (создаем символическую ссылку и перезагружаем веб-сервер):
    ln -s /etc/apache2/mods-available/expires.load /etc/apache2/mods-enabled/expires.load
    /etc/init.d/apache2 restart
    

Вот и всё, довольно просто, правда?) Зато сколько пользы,)

Пояснение

И все-таки стоит пояснить, почему кеширование так важно сегодня.

Не так давно Google объявил, что теперь скорость работы сайта учитывается при поисковой выдачи. Это очень правильный шаг на встречу не только пользователям интернета, но и хорошее подспорье разработчикам, поскольку кеширование позволяет загружаться сайтам быстрее и уменьшает трафик, что снижает нагрузку на сервер.

Чтобы проверить скорость работы своего сайта удобней всего пользоваться фирменным дополнением к Firebug от Google— PageSpeed.

Скриншон работы PageSpeed

Скриншот работы PageSpeed

Проведя быстрый тест, PageSpeed сообщит о проблемах производительности сайта и порекомендует пути их решения. Хорошая штука.)

Также есть аналогичный инструмент от Yahoo! — YSlow. Очень удобная программка, я ей тоже пользуюсь — бывает, он замечает то, что PageSpeed упустил.

Ссылки в записи

Теперь буду добавлять к статьям этот блок со ссылками на используемые ресурсы в записи. Такая штука более академична что ли.)

  • Рекомендации Google по включению механизмов кеширования
  • Подробная справочная статья по включению кеширования в Apache
  • Заявление Google о включении учета скорости работы сайта в поисковом ранжировании
  • Firebug — один из удобнейших инструментов веб-разработчика, расширение для FireFox
  • PageSpeed — дополнение к Firebug от Google для выявления проблем производительности сайта
  • YSlow — дополнение к Firebug от Yahoo!  для выявления проблем производительности сайта