Archive for the ‘ Web ’ Category

ADBlock — Коллекционирую рукописные правила (:

Ох и напрягает меня реклама, без ADBlock в Интернете уже выжить невозможно. Сразу после установки годного браузера Iceweasel (aka Firefox in Debian) и некоторого необходимого тюнинга руки тянутся к инсталу плагина ADBlock Plus. Но из коробки режет он далеко не всю рекламу, приходится чуток допиливать кастомные правила.
По-быстрому написал парочку блоков для web-мусора что попался на глаза:

!!! Block Counters
*.list.ru/*
*.rambler.ru/*
*.yadro.ru/*
!!! Block Yandex Direct
##div[id^="yandex"]

Надеюсь, будет пополняться 🙂 Кому не лень — кидайте в комменты свои правила 🙂

Хай щастить!

CentOS 6.6 — Puppet Dashboard Install

В одной из предыдущих статей я описал процесс установки и настройки Puppet Server (он же Puppetmaster). Сейчас же хочу написать небольшую заметку по установке и настройке Puppet Dashboard — это весьма приятное дополнение к Puppet. Представляет из себя WEB-консоль для мониторинга применения манифестов и визуализации конфигурации вцелом.
Устанавливать буду на том же сервере где настраивал Puppetmaster. Поехали?

Репозитарий Puppet Labs у меня уже добавлен, тем кто настраивает на отдельном сервере — его нужно добавить. Повторюсь на всяк случай:

puppet:~$ sudo rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

Это не единственный необходимый репозиторий, забегая наперед скажу что нам нужен еще и mysql-server. Я предпочитаю mariadb вариант, но в официальных репах CentOS 6.6 он слегка «протухший», поэтому я добавил еще один репозитарий — для MariaDB. Если вас не напрягает протухлость mysql из оф реп CentOS — пропустите данный шаг. Итак, сначала создаем файлик /etc/yum.repos.d/mariadb-55.repo:

puppet:~$ sudo touch /etc/yum.repos.d/mariadb-55.repo

Открываем данный файл любым текстовым редактором (vi, vim, nano, mcedit …) и добавляем вот что:

# MariaDB 5.5 CentOS repository list - created 2015-03-30 10:48 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Теперь установим все необходимые пакеты:

puppet:~$ sudo yum install MariaDB-server puppet-dashboard

Все пакеты установлены, начинаем настройку. Начнем с mariadb.
Копируем заготовку конфига mysql:

puppet:~$ sudo cp /usr/share/mysql/my-medium.cnf /etc/my.cnf.d/server.cnf

Тюнинг mysql под разные задачи — это отдельная тема. В данном случае нам нужно только добавить вот такую опцию в конфиг /etc/my.cnf.d/server.cnf:

max_allowed_packet      = 32M

Добавляем в автозагрузку и стартуем сервис:

puppet:~$ sudo systemctl enable mariadb
puppet:~$ sudo systemctl start mariadb

Задаем пароль учетки root в mysql:

puppet:~$ sudo mysqladmin -u root password '_my_root_mysql_pass_here_'

Заходим в mysql и готовим базу:

puppet:~$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.41-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE dashboard CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE USER 'dashboard'@'localhost' IDENTIFIED BY 'dash_pass_here';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON dashboard.* TO 'puppet_dashboard'@'localhost';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye
puppet:~$

На этом MySQL можно считать подготовленным. Мы имеем базу, пользователя и пароль для базы.
Настройка подключения дашборда к этой базе:

puppet:~$ cd /usr/share/puppet-dashboard

Тут нас интересует файлик config/database.yml Это конфиг подключения Puppet Dashboard к MySQL DB. Заполняем согласно только что созданной БД ( проще говоря прописываем название, имя пользователя, пароль для подключения к базе mysql)
Меня интересует только секция produclion. Разработкой я заниматься не собираюсь, в любом случае добавить в будущем данные базы не составит труда.
Итак, что у меня получилось с данным конфигом:

production:
  database: dashboard
  username: dashboard
  password: dash_pass_here
  encoding: utf8
  adapter: mysql

Что дальше? Пробуем проинитить базу:

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate

Ха! Поймал ошибку! У меня mysql datadir не стандартный, поэтому вот (если у вас все стандартно — то команда отработает на ура, пропустите следующий шаг):

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate --trace
(in /usr/share/puppet-dashboard)
config.gem: Unpacked gem daemons-1.0.10 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem json_pure-1.7.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem factory_girl-1.3.3 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rdoc-3.6.1 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem haml-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-rails-1.3.4 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem will_paginate-2.3.15 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem mocha-0.9.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rack-1.1.6 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem thoughtbot-shoulda-2.10.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-1.3.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem sass-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:620:in `real_connect'
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:620:in `connect'
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:203:in `initialize'
...

Пробуем прописать в конфиг … вот что:

production:
  database: dashboard
  username: dashboard
  password: dash_pass_here
  encoding: utf8
  adapter: mysql
  socket: /var/lib/mysql/data/mysql.sock

И еще раз init базы:

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate
(in /usr/share/puppet-dashboard)
.......
Preparing to delete from resource_events
2015-03-31 10:29:13: Deleting 0 orphaned records from resource_events
Deleting       100% |#########################################################################################################################| Time: 00:00:00

-- execute("ALTER TABLE reports ADD CONSTRAINT fk_reports_node_id FOREIGN KEY (node_id) REFERENCES nodes(id) ON DELETE CASCADE;")
   -> 0.0033s
-- execute("ALTER TABLE resource_events ADD CONSTRAINT fk_resource_events_resource_status_id FOREIGN KEY (resource_status_id) REFERENCES resource_statuses(id) ON DELETE CASCADE;")
   -> 0.0029s
-- execute("ALTER TABLE resource_statuses ADD CONSTRAINT fk_resource_statuses_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0031s
-- execute("ALTER TABLE report_logs ADD CONSTRAINT fk_report_logs_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0029s
-- execute("ALTER TABLE metrics ADD CONSTRAINT fk_metrics_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0027s
==  AddReportForeignKeyConstraints: migrated (0.0304s) ========================

==  RemoveUrlFromNodes: migrating =============================================
-- remove_column(:nodes, :url)
   -> 0.0028s
==  RemoveUrlFromNodes: migrated (0.0030s) ====================================

** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
puppet:/usr/share/puppet-dashboard$

Отработала командочка отлично!
Пробуем запустить сервис puppet-dashboard:

puppet:/usr/share/puppet-dashboard$ sudo service puppet-dashboard start
Starting Puppet Dashboard: config.gem: Unpacked gem daemons-1.0.10 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem json_pure-1.7.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem factory_girl-1.3.3 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rdoc-3.6.1 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem haml-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-rails-1.3.4 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem will_paginate-2.3.15 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem mocha-0.9.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rack-1.1.6 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem thoughtbot-shoulda-2.10.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-1.3.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem sass-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
=> Booting WEBrick
=> Rails 2.3.17 application starting on http://0.0.0.0:3000            [  OK  ]
puppet:/usr/share/puppet-dashboard$

Поидее запустилась, слушается ли порт 3000?

puppet:/usr/share/puppet-dashboard$ sudo netstat -lnp |grep 3000
tcp        0      0 0.0.0.0:3000                0.0.0.0:*                   LISTEN      12269/ruby          
puppet:/usr/share/puppet-dashboard$

Слушается! Если есть firewall — добавляем правило для порта TCP/3000:

# Puppet Dashboard
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT

если нет просто пробуем браузером зайти на puppet-server порт 3000, в моем случае URL выглядит так: http://puppet.intranet:3000/
Должны увидеть вот что:

Puppet Dashboard - First Start

Как видим никакой статистики тут пока нет, все по нулям. Для того чтобы связать puppetserver и puppet agents/dashboard нужно подправить их конфиги.
1. На puppetmaster в конфиге /etc/puppet/puppet.conf, точнее в секции [master] указать:

[master]
    reports = store, http
    reporturl = http://puppet.intranet:3000/reports/upload

и перегрузить puppetmaster:

puppet:~$ sudo service puppetmaster restart

2. Еще перегрузим сервисы dashboard и puppet-dashboard-workers:

puppet:~$ sudo service puppet-dashboard-workers start
puppet:~$ sudo service puppet-dashboard restart

Не забываем добавить нужные сервисы в автозапуск:

puppet:~$ sudo chkconfig puppet-dashboard on
puppet:~$ sudo chkconfig puppet-dashboard-workers on

Теперь дополнительный параметр для puppet agent.
1. В конфиге /etc/puppet/puppet.conf, точнее в секции [agent] каждого puppet agent-a указываем:

[agent]
    report = true

2. перегружаем puppet agent:

agent01:~$ sudo service puppet restart
Stopping puppet agent:                                     [  OK  ]
Starting puppet agent:                                     [  OK  ]
agent01:~$

Ну вот, сервисы подстроили …
Пробуем зайти еще раз по URL http://puppet.intranet:3000/ Поидее увидим уже и кой какую статистику с добавленными нодами:

Puppet Dashboard - Working

Фух … радуемся 🙂

Хай щастить!

Перестраиваем apache22 + mod_php5 -> nginx + apache22 + mod_php5

На одном из серверов понадобилось добавить чуть больше гибкости web-серверу. Система FreeBSD, web-сервер настроен по олдскульной классике: Apache22 -> mod_php5 -> MySQL. Поскольку ковырять старичка апача особо желания нет, решил просто «накрыть» его nginx-ом и докрутить в нем все свои хотелки (GeoIP, bandwidth limit, различные варианты отдачи в зависимости и User Agent и тд.) Тоесть нужна вот такая схема: Nginx -> Apache22 -> mod_php5 -> MySQL
Основная задача — свести к минимуму Downtime.
Итак, поехали … Читать полностью

Debian GNU Linux — Установка/миграция eGroupWare

Итак, у меня новая задача — перенести программу eGroupWare со старого сервера на новый. Тем кому нужно заинсталить с нуля — тоже статья пригодится … хоть и ничего сложного в этом нет 🙂
Старая версия 1.8.003 установлена на Debian, база в mysql
Новая версия доступная в репозитарии 1.8.005, ее и будем подымать на новом сервере. Hostname нового сервера — cr.mycom.loc

Делается миграция очень просто:
1. На новом сервере устанавливаем с нуля самую новую версию mysql-server и EGW
2. На старом сервере делаем дамб базы данных и переносим его на новый сервер
3. На новом сервере восстанавливаем базу с дампа в «рабочую базу» свежеустановленного EGW
4. На новом сервере делаем Upgrade EGW (Через WEB интерфейс)
5. При желании, немного оптимизации

Поехали …. Читать полностью

Joomla 1.7.3 Upgrade to 1.7.5: Error Undefined property: stdClass::$category_note

Сломался у меня на днях один сайтик, ну точнее не совсем у меня и не совсем сломался … ну то детали. Какеры постарались, мать их! Ну Joomla была лохматой версии 1.7.3 и как она досих пор прожила без присмотра — для меня загадка. Но речь не об том. Почистив гору всякого контрафактного файла и восстановив доступ к админке, я решил Jooml-у обновить. Решил что минорного обновления до версии 1.7.5 в моем случае будет более чем достаточно. Несмотря на минорность в пакете обновления зашла приличная пачка различных security исправлений … чего мне и требовалось. Обновить данную CMS дело несложное, даже для полного нуба в Joomla как я, это особого труда не составило. Но после обновления вылезла неожиданная беда! На некоторых страницах вместо текста появились вот такие ошибки:

Notice: Undefined property: stdClass::$category_note in /home/www/templates/jblank/html/com_content/article/basic.php on line 6

И еще вот такие: Читать полностью

Roundcube 0.9.5 Upgrade to 1.0.3 — «DB Schema: NOT OK»

Тот кто сталкивался с обновлением Roundcube наверняка знает что обновить его это тот еще гемор 🙂 Вот и в этот раз я столкнулся с трудностями обновления с версии 0.9.5 до 1.0.3. То что конфиги разные и имеют разный формат — это ложка дегтя … ну да ладно. А вот обновления БД всегда были «поребриком» о который спотыкается каждый 🙂 Короче, наткнулся на такую вот ошибку: «DB Schema: NOT OK»
В инсталлере есть кнопочка «Update» которая якобы должна решить эту проблему, вот же она:

Roundcube - Upgrade SQL DB
но какую бы версию я не выбирал — ничего Читать полностью

OpenCart install — Error «Could not connect to the database …»

Итак, повидал я всякого в web движках, но тут такое ….
Попросили поставить OpenCart — та делов то, подумал я. И вот в процессе установки нарываюсь на такую вот обшибку
Could not connect to the database please make sure the database server, username and password is correct!
OpenCART -Install ERROR Cant connect to database
Оказалось движку ненравится спецсимвол в пароле, это я уже эмпирическим путем определил, когда создал другую базу, другого пользователя и перепробовал несколько вариантов паролей 🙂
ППЦ!

Уязвимость в Word Press позволяющая скачать admin-ajax.php

Итак, поглядел слегка в логи своего блога и обнаружил интересные строчки:

178.73.212.6 - /wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php
178.73.212.6 - /wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php

Попробовал зайти туда сам с браузера, выдали белую страничку с одним единственным символом «0», но каково же было мое удивление когда часть произвольно найденных на просторах инета блогов на WP на запрос в духе:

http://wpblog.com/wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php

выдает для скачивания файлик admin-ajax.php в plaintext!!! Напомню что там кроме всякой фигни содержатся и данные по подключению к базе MySQL, как то название базы, логин, пароль! Я просто офигел! Проверьте свои блоги! Я проверил блоги моих друзей-знакомых — уязвимость не нашел. Гдето выдает «0», гдето видел «-1». Вобщем АХТУНГ!!!

P.S. Некоторое инфо нашел тут, также тут узнал что уязвимы все блоги независимо от версии WP в которых активирован плагин «Revolution Slider»!

FreeBSD — Настройка Nginx + PHP-FPM в chroot

Давно у меня в голове засела идея избавиться от apache2 на своих серверах. Зачем нужен этот древний тяжеленный мамонт? Ради модуля php? Ну так все хостинги давно уже обкатали режим php-fpm -это когда специфически собранный PHP работает сам по себе как сервис для компиляции php файликов. Стабильность и функциональность данного варианта работы PHP отличная! Остается статика, всякие картинки, стили, java-скрипты …. тут среди попсовых решений Nginx впереди планеты всей! Таким образом получаем простенькую систему из PHP-FPM + Nginx способную заменить Apache2 + mod_php + PHP. К тому же для большей безопасности и гибкости в настройке PHP-FPM поддерживает pools — это значит что PHP под каждый отдельный web-ресурс можно сконфигурить отдельно, к примеру сайту #1 дать 64MB RAM, а сайту #5 — 2048MB и тд, а любые превышения лимитов одним пулом не будут влиять на работу других. Для большей безопасности каждый пул можно разместить в его личном chroot-окружении, что на уровне FS изолирует все пулы друг от друга. Сладко??? Тогда в бой!
Установка PHP с флагом FPM:
Устанавливаем порт /usr/ports/lang/php5 с опцией PHP-FPM. При необходимости устанавливаем /usr/ports/lang/php5-extensions
Установка nginx:
Также из портов устанавливаем nginx, у меня он собран с такими опциями:

HTTP=on: Enable HTTP module
HTTP_ADDITION=on: Enable http_addition module
HTTP_CACHE=on: Enable http_cache module
HTTP_GZIP_STATIC=on: Enable http_gzip_static module
HTTP_GUNZIP_FILTER=on: Enable http_gunzip_filter module
HTTP_IMAGE_FILTER=on: Enable http_image_filter module
HTTP_PERL=on: Enable http_perl module
HTTP_REALIP=on: Enable http_realip module
HTTP_REWRITE=on: Enable http_rewrite module
HTTP_STATUS=on: Enable http_stub_status module
WWW=on: Enable html sample files

Не забываем про автозагрузку сервисов:
В /etc/rc.conf добавляем такие строчки для автостарта сервисов nginx и php-fpm

# <= Nginx => #
nginx_enable="YES"
# <= PHP-FPM => #
php_fpm_enable="YES"

Создание пользователя и окружения для chroot:
Создаем юзера, который у нас будет использоваться для виртуального web-хостинга. У меня это wwwuser. В его домешнем каталоге создаем необходимые директории для chroot php-fpm:

root@srv1:~# cd /home/wwwuser
root@srv1:/home/wwwuser# mkdir wwwchroot
root@srv1:/home/wwwuser# mkdir wwwchroot/{etc,htdocs,logs,tmp,usr}
root@srv1:/home/wwwuser# mkdir wwwchroot/usr/local
root@srv1:/home/wwwuser#

Создаем симлинки на некоторые конфиги и сокет mysql-сервера:

root@srv1:/home/wwwuser# cd wwwchroot/
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/hosts etc/hosts
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/host.conf etc/host.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/resolv.conf etc/resolv.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/nsswitch.conf etc/nsswitch.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/localtime etc/localtime
root@srv1:/home/wwwuser/wwwchroot# ln -s /tmp/mysql.sock tmp/mysql.sock

Создаем симлинки на библиотеки:

root@srv1:/home/wwwuser/wwwchroot# ln -s /lib lib
root@srv1:/home/wwwuser/wwwchroot# ln -s /usr/local/lib usr/local/lib
root@srv1:/home/wwwuser/wwwchroot#

Настройка php-fpm:
Для удобства я «розбил» конфигурацию на основную часть [global] в конфиге /usr/local/etc/php-fpm.conf и настройки каждого веб-ресурса [pool] отдельно в директории /usr/local/etc/fpm.d/
Содержимое основного конфига:

include=etc/fpm.d/*.conf
[global]
pid = run/php-fpm.pid
events.mechanism = kqueue

Конфиги веб ресурсов нужно создавать в директории /usr/local/etc/fpm.d/. Их может быть много, поэтому удобно каждому юзеру создавать отдельный файлик. Вот пример содержимого одного из таких конфигов — /usr/local/etc/fpm.d/wwwuser_pool.conf:

[wwwuser]
prefix = /usr/home/$pool
user = wwwuser
group = wwwuser
listen = wwwchroot/tmp/php5-fpm.sock
listen.owner = www
listen.group = www
listen.mode = 0600

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 50
 
slowlog = logs/$pool.log.slow
request_slowlog_timeout = 5
request_terminate_timeout = 25
 
chroot = $prefix/wwwchroot
chdir = /htdocs
 
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f wwwuser@srv1.mydomain.ua
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M

После этого у вас должен нормально запуститься сервис php-fpm. Пробуем:

root@srv1:~# service php-fpm start
Starting php_fpm.
root@srv1:~#

Отлично! Поехали дальше!
Настройка nginx:
Тут я не очень разобрался, но скажем так, добился реально рабочего результата. Поэтому с удовольствием прочитаю замечания по настройке nginx в комментах. В стандартный конфиг /usr/local/etc/nginx/nginx.conf добавил секцию server для CMS Drupal версии 7:

    server {
        listen       80;
        server_name  mydomain.kiev.ua www.mydomain.kiev.ua;

        gzip on;
        gzip_static on;
        gzip_vary on;
        gzip_http_version 1.1;
        gzip_min_length 700;
        gzip_comp_level 6;
        gzip_disable "msie6";

        access_log  /usr/home/wwwuser/logs/drupal-access.log;
        error_log   /usr/home/wwwuser/logs/drupal-error.log;

        root /usr/home/wwwuser/wwwchroot/htdocs/drupal7;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
 
        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        # Very rarely should these ever be accessed outside of your lan
        location ~* \.(txt|log)$ {
                allow 127.0.0.0/8;
                deny all;
        }
 
        location ~ \..*/.*\.php$ {
                return 403;
        }
 
        # No no for private
        location ~ ^/sites/.*/private/ {
                return 403;
        }
 
        # Block access to "hidden" files and directories whose names begin with a
        # period. This includes directories used by version control systems such
        # as Subversion or Git to store control files.
        location ~ (^|/)\. {
                return 403;
        }

        location / {
                # This is cool because no php is touched for static content
                try_files $uri @rewrite;
        }
 
        location @rewrite {
                # You have 2 options here
                # For D7 and above:
                # Clean URLs are handled in drupal_environment_initialize().
                rewrite ^ /index.php;
                # For Drupal 6 and bwlow:
                # Some modules enforce no slash (/) at the end of the URL
                # Else this rewrite block wouldn't be needed (GlobalRedirect)
                #rewrite ^/(.*)$ /index.php?q=$1;
        }

        location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_intercept_errors on;
        fastcgi_param SCRIPT_FILENAME /htdocs/drupal7$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT /htdocs/drupal7;
        fastcgi_pass   unix:/usr/home/wwwuser/wwwchroot/tmp/php5-fpm.sock;
        include        fastcgi_params;
                 }

        # This is for D7 and D8
        location ~ ^/sites/.*/files/styles/ {
                try_files $uri @rewrite;
        }
 
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
       
        location ~ /\. {
        deny  all;
        }
    }

Как видно из конфига, drupal у меня установлен в отдельной директории в htdocs, вот полный путь — /usr/home/wwwuser/wwwchroot/htdocs/drupal
После сохранения конфига можно запустить nginx:

root@srv1:~# service nginx start
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Starting nginx.
root@srv1:~#

Ну и после этого пробуем в браузере открыть наш сайт: http://mydomain.kiev.ua Я розпаковал в директорию drupal сам CMS — поэтому увидел приглашение к установке … все заработало с «пол-пинка». Пробовал аналогичный образом настраивать wordpress и phpBB — отлично работает, правда настройки в nginx.conf под разные движки разные, но найти их не составляет труда, зачастую на официальных сайтах разработчиков web-приложений есть готовые примеры конфига nginx.

Хай щастить!

Joomla — Сброс пароля админа «по быстрому»!

Есть сайт на Joomla, доступ к ней забыт 150 лет назад, вот попросили в нем покопаться, обновить и проверить все ли в порядке 🙂 Туманная задача, но для начала надо бы хоть в админку попасть. Это оказалось не так сложно, имея доступ к SQL базе, можно вот такими двумя командами sql получить админский доступ в консоль Joomla:

mysql> INSERT INTO `pref_users` (`name`, `username`, `password`, `params`) VALUES ('Administrator2', 'newadmin', 'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '');
Query OK, 1 ROW affected (0.00 sec)

mysql> INSERT INTO `pref_user_usergroup_map` (`user_id`,`group_id`) VALUES (LAST_INSERT_ID(),'8');
Query OK, 1 ROW affected (0.00 sec)

mysql> quit

Теперь у нас в Joomla появился пользователь newadmin с паролем secret.
Читать полностью