Установка Apache2, PHP5, PhpMyAdmin2, FCGI, Suexec, Pear и Mcrypt, Amavisd-new, SpamAssassin и Clamav (5часть) / likes / блог студии Клондайк!

Немного займемся защитой от вирусов и спама.


apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl>

Конечно все это первоначальные настройки в последующем мы будем наворачивать систему от многих вещей попросту отказываться в угоду защиты сервера и его стабильной работы. Но обо всем по порядку, пока делаем так.

Поскольку оно нам не понадобится, будет только занимать


/etc/init.d/spamassassin stop update-rc.d -f spamassassin remove

Установка Apache2, PHP5, PhpMyAdmin, FCGI, Suexec, Pear и Mcrypt


apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby

По ходу инсталляции отвечаем на вопросы:


Web server to reconfigure automatically: - apache2

Configure database for phpmyadmin with dbconfig-common? -No 

Затем запустите следующую команду для Apache модулей Suexec:


a2enmod suexec rewrite ssl actions include
a2enmod dav_fs dav auth_digest

И перезапускаем apache:


/etc/init. d/apache2 restart

Устанавливаем FTP сервер PureFTP и квоты


apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool
cat /etc/default/pure-ftpd-common |grep STANDALONE_OR_INETD

Должны увидеть:


STANDALONE_OR_INETD=standalone

Если нет, то правим файл и меняем на standalone


vim /etc/inetd.conf

Проверяем все должно быть закомментировано.

Если делали изменения в данных файлах, то рестартуем демона, если нет пропускаем.


/etc/init.d/openbsd-inetd restart

Настройка PureFTPD закончена, но все пароли по умолчанию во время сессии передаются в открытом виде, скрыв их, мы намного повысим безопасность нашего соединения. С помощью TLS вся сессия будет зашифрована.


echo 1 > /etc/pure-ftpd/conf/TLS

Создаем сертификат SSL для TLS сессии

Создаем каталог для сертификата:


mkdir -p /etc/ssl/private/
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd. pem -out /etc/ssl/private/pure-ftpd.pem

Последовательно отвечаем на вопросы:

  • Country Name (2 letter code) [AU]: RU
  • State or Province Name (full name) [Some-State]:Russia
  • Locality Name (eg, city) []: Moscow
  • Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Название моей компании
  • Organizational Unit Name (eg, section) []:web
  • Common Name (eg, YOUR name) []:mydomain.ru
  • Email Address []:[email protected]

Оно же в русской интерпретации:

  • Название страны (2 буквенный код) [AU]: — Введите название страны (например, «RU»
  • Государство или название провинции (полное название) [Некоторые государства-]: — Введите государства или название провинции
  • Местность имя (например, города) []: — введите Ваш город
  • Название организации (например, компании) [Интернет Widgits Pty Ltd]: — Введите название организации (например, название Вашей компании)
  • Подразделение Название (например, раздел) []: — Введите организационное название группы (например, «ИТ-отдел»
  • Общее имя (например, ваше имя) []: — Введите полное доменное имя системы (например, «moydomain. ru»
  • Электронный адрес: []: — Введите адрес электронной почты

Изменение разрешения сертификата SSL:


chmod 600 /etc/ssl/private/pure-ftpd.pem

Перезапускаем

/etc/init.d/pure-ftpd-mysql restart

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

/ нам нужно установить квоту.


cp /etc/fstab /etc/fstab_old_ok vim /etc/fstab

У нас должно получиться вот так, если вы делаете строго по мануалу, то в точности так.


# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/md1 / ext3 usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1
/dev/md0 /boot ext2 defaults 0 2
/dev/sda2 none swap sw 0 0
/dev/sdb2 none swap sw 0 0
/dev/sdc1 /mnt/disk1 ext4 defaults 0 0

А вот от errors=remount-ro пришлось отказаться при появлении первой же ошибки у вас остановится сервер;(чего явно нельзя допустить. В моем случае это приводило к 2 вещам.

Никто не мог оставить ни одного заказа на сайтах, а это гигантские деньги, если учесть количество этих сайтов. Включаем еще и почту.

При рестарте демоны просто не могли начать писать лог и по этому попросту не начинали работу. А это вообще печально. Так что потеря даже целостности RAID массива и части данных в таком контексте не идет вразрез с остановкой сервера в принципе;(

И даже если вы отделались легким испугом, вам в любом случае нужно будет отмонтировать диск, прогнать его чекдиском и только после этого заново запустить сервер. Стоимость простоя в таком случае еще и добавляет факт остановки сайтов вообще и отдача 500 ошибки на всех сайтах, следовательно, уже через 10–30 секунд все ваши клиенты получат уведомления от яндекс метрики об остановке сервера, а вот этого вообще лучше не делать Ибо дальше уже начинают ломать не сервер, а наш мозг.

Включаем квоты, для этого перемонтируем раздел и запускаем квоты.


mount -o remount /

Если вы неправильно сделали, то увидите предупреждение:


mount: / not mounted already, or bad option
Запускаем квоты:

quotacheck -avugm

Ждем и расслабляемся, сканирование может занять внушительное время.


quotaon -avug

Установка bind9

Нужно сказать, что это самый устойчивый и легко устанавливаемый сервер, на моей памяти он падал всего 1 раз, и то не по своему желанию. Установка данного сервера должна быть произведена до установки панели управления ispconfig3 поскольку ispconfig3 просто не будет с ним работать до переустановки, она хоть и проходит штатно фактически как обновление панели, но лишний раз на рабочем сервере изменять глобальные настройки неправильно.


apt-get install bind9 dnsutils

Установка Vlogger, Webalizer, И Awstats

Немного статистики нам никогда не повредит. Статистика доступна по адресу http://mydomain.ru/stats


apt-get install vlogger webalizer awstats.

В дальнейшем, нам скорее всего придется отказаться от такой штуки, поскольку как ни прискорбно, но и их используют злоумышленники для получения вечных ссылок. поскольку все запросы сохраняются в html файлах этих систем, а файлы лежат в корне сайта, рисовать же Дисалоу в robots.txt в каждом сайте замучаешься. Так пока ставим, но если не придумаем эффективного способа закрыться от таких ссылок… В общем подумаем потом. Данная мысль пришла только вчера вечером и еще не успела оформиться.


vim /etc/cron.d/awstats

Комментируем в нем все строчки поскольку данную функцию заберет на себя ispconfig3


#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh
# Generate static reports:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh

Установка Jailkit

Если мы планируем давать своим пользователям ssh доступ, то нам понадобится jailkit.

Поскольку он позволяет создавать полноценное chroot окружение для пользователей.

Конечно, мы можем давать и обычного ssh пользователя, но в таком случае он будет сильно стеснен ограничениями системы.

jailkit позволяет более гибко администрировать его права.

Обратите внимание что jailkit нам нужно установить до установки самого isoconfig3 — в противном случае, он просто будет игнорироваться.

И потребуется перезапуск ispconfig3

Как не странно все мануалы в интернете были по этому вопросы неправильны (в 90% из них еще и ошибки. Пришлось писать самому, дабы все оказалось достаточно просто.

Ставим нужные зависимости, предварительно проверив, не появились ли более свежие версии продукта.


apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper devscripts
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.15.tar.gz
tar xvfz jailkit-2.15.tar.gz
cd jailkit-2.15
./configure
make
make install
cd /tmp
rm -rf jailkit-2. *

Установка fail2ban

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

ssh: 100% каждый день. Далее — почта FTP Ddos, который вообще может вывести сервер из строя. В общем, называть инструмент хоть как то защищающий от таких вещей необязательным я бы не стал. В среднем, в логе отраженных атак оказывается от 600 строк.


apt-get install fail2ban

Чтобы fail2ban отображал монитор PureFTPd, SASL, и Courier, создайте файл /etc/fail2ban/jail.local:

Далее будем внимательны! несколько файлов и легко запутаться, делаем ровно по ману, ни в право ни в лево.


vim /etc/fail2ban/jail. local

Вставляем этот конфиг:

[pureftpd]

enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 3


[sasl]

enabled  = true
port     = smtp
filter   = sasl
logpath  = /var/log/mail.log
maxretry = 5


[courierpop3]

enabled  = true
port     = pop3
filter   = courierpop3
logpath  = /var/log/mail.log
maxretry = 5


[courierpop3s]

enabled  = true
port     = pop3s
filter   = courierpop3s
logpath  = /var/log/mail.log
maxretry = 5


[courierimap]

enabled  = true
port     = imap2
filter   = courierimap
logpath  = /var/log/mail.log
maxretry = 5


[courierimaps]

enabled  = true
port     = imaps
filter   = courierimaps
logpath  = /var/log/mail.log
maxretry = 5

Затем создаем сами правила для PureFtpd


vim /etc/fail2ban/filter. d/pureftpd.conf

Вставляем правило:


[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =

Как видно мы в этом файле задаем условия для сработки.

Затем создайте следующие фильтр для pop:


vim /etc/fail2ban/filter.d/courierpop3.conf

# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}?(?P\S+)
# Values: TEXT
#
failregex = pop3d: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Далее действуем по аналогии:


vim /etc/fail2ban/filter. d/courierpop3s.conf

# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}?(?P\S+)
# Values: TEXT
#
failregex = pop3d-ssl: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Правило для IMAP


vim /etc/fail2ban/filter.d/courierimap.conf

# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host".  The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}?(?P\S+)
# Values: TEXT
#
failregex = imapd: LOGIN FAILED.*ip=\[.*:\]

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Правило для IMAP-SSL


vim /etc/fail2ban/filter.d/courierimaps.conf

# Fail2Ban configuration file
#
# $Revision: 100 $
#

[Definition]

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P\S+)
# Values:  TEXT
#
failregex = imapd-ssl: LOGIN FAILED.*ip=\[.*:\]

# Option:  ignoreregex
# Notes. :  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Рестартуем сервер.


/etc/init.d/fail2ban restart

Если появился faild! Проверяйте конфиги, возможно, при вставке в вим вы забыли нажать «a» и вставившийся код обрезался до первой «a» в нем. Все, кто часто пользуются vim, уже к этому привыкли и не допускают таких ошибок, если вы приверженец другого редактора, то тут вам может повезти меньше.

Установка php5.3 в Ubuntu и настройка php-fpm

Данная статья устарела, оставлена исключительно для желающих покомпилировать php. Остальным людям предлагаю поставить php5.5 из репозитария, т.к. в нем он относительно свежий и телодвижений требуется совершить меньше.


Еще одна вкусняшка в нашем VDS — это php, который мы сейчас поставим. Ставить будем из сырцов, т.к. необходим нам именно php5.3 и никак не хуже, а в официальном репозитарии его еще нет. Действия описанные ниже будут произведены на ubuntu 10.04 LTS и скорее всего подойдут для php будущих версий (циферки только меняйте).
Как я уже писал — php у нас будет запускаться через php-fpm в chroot. В php5.3 официально включен php-fpm, поэтому веселые развлечения с патчами остались в прошлом.

Подготовка

Сначала ставим пакеты, необходимые для компиляции пхп:

sudo apt-get install autoconf2.13 libssl-dev libcurl4-gnutls-dev libjpeg62-dev libpng12-dev  libmysql++-dev libfreetype6-dev libt1-dev libc-client-dev mysql-client libevent-dev libxml2-dev libtool libmcrypt-dev

А еще нам потребуется checkinstall для автоматической сборки пакетов:


sudo apt-get install checkinstall

Сходите на сайт php.net/downloads.php, выберите себе последний и получите заветную ссылку. Смотрим внимательно на циферки в URL файла — в нем указана версия php. Возможно вам придется подправить все ниже описанные пути под эти циферки. В данной шпоре я буду описывать установку php-5.3.8. Итак, качаем php:


cd /usr/local/src
sudo wget -O ./php-5.3.8.tar.gz http://ru.php.net/get/php-5.3.8.tar.gz/from/ru2.php.net/mirror

Распаковываем php:


sudo tar xvfz php-5.3.8.tar.gz
sudo rm ./php-5.3.8.tar.gz

Сборка
Конфигурируем будующую сборку:


cd /usr/local/src/php-5.3.8
sudo ./configure --enable-fpm --with-mcrypt --enable-mbstring --with-openssl --with-mysql --with-mysql-sock --with-gd --with-jpeg-dir=/usr/lib --enable-gd-native-ttf  --with-pdo-mysql --with-libxml-dir=/usr/lib --with-mysqli=/usr/bin/mysql_config --with-curl --enable-zip  --enable-sockets --with-zlib --enable-exif --enable-ftp --with-iconv --with-gettext --enable-gd-native-ttf --with-t1lib=/usr --with-freetype-dir=/usr --prefix=/usr/local/php --with-fpm-user=www-data –with-fpm-group=www-data --with-fpm-conf=/usr/local/php/etc/php-fpm.conf --with-config-file-path=/usr/local/php/etc

Компилируем и устанавливаем получившийся пакет PHP:


sudo checkinstall --type=debian --default

Теперь при желании удалить PHP можно одной строкой (при установке хостинга это делать не надо):


sudo dpkg -r php

Настройка PHP
Настроим автозапуск php-fpm. Есть два пути:
1. Со стандартным скриптом запуска php (идет в составе с php и глючит — позволяет несколько раз запустить родительский процесс со всеми чилдами).


sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

2. Со сторонним скриптом (взят мной где-то не помню где и допилен под конкретные нужды — работает без глюков):


sudo wget -O /etc/init.d/php-fpm http://daily-notes.ru/files/2011/10/php-fpm

Выставим права скрипту на запуск и добавим в автозагрузку.


sudo chmod 755 /etc/init.d/php-fpm
sudo update-rc.d -f php-fpm defaults

Теперь надо создать файлы конфигурации. Можно пойти двумя путями — скопировать дефолтный конфиг php для продакшина или написать свой собственный по желанию. Первый вариант:


sudo cp php.ini-production /usr/local/php/etc/php.ini

Второй вариант — создать ручками файл /usr/local/php/etc/php.ini с примерно следующим содержимым:


[PHP]
asp_tags = Off
safe_mode = Off
safe_mode_gid = Off
expose_php = Off
y2k_compliance = On
allow_url_include = Off

[date]
; Defines the default timezone used by the date functions
; http://php. net/date.timezone
date.timezone = "Asia/Novosibirsk"
; http://php.net/date.default-latitude
date.default_latitude = 55.016666
; http://php.net/date.default-longitude
date.default_longitude = 82.933333
; http://php.net/date.sunrise-zenith
;date.sunrise_zenith = 90.583333
; http://php.net/date.sunset-zenith
;date.sunset_zenith = 90.583333

В первом случае я не знаю что там по умолчанию наконфигурировано, но можно предположить что там «все как надо» 😉 Во втором случае я настраивал именно то что мне необходимо. Настройку дат конфигурировал для Новосибирска, для других регионов настройка date другая. Если эту секцию не заполнить — php будет ошибками забивать лог-файлы. Поддерживаемые зоны можно найти здесь http://www.php.net/manual/ru/timezones.php
Выставим права на конфиг php:


sudo chmod 644 /usr/local/php/etc/php.ini

Настройка PHP-FPM

Как я уже писал в прошлом опусе — у нас будет определенная структура папок для каждого сайта и php каждого из них будет работать в chroot. Для этого каждому сайту мы сделаем по конфигу (я же сделаю для примера только один для сайта koteika.ru).
Создадим папку, в которой будут размещаться конфиги php-fpm для сайтов:


sudo mkdir /usr/local/php/etc/pools

Создадим дефолтный файл-инклюд /usr/local/php/etc/default-config.conf с содержанием:


pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500
pm.status_path = /status

listen.backlog = -1
listen.owner = nginx
listen.group = nginx
listen.mode = 0600

ping.path = /ping
ping.response = pong

request_terminate_timeout = 0
request_slowlog_timeout = 0
catch_workers_output = yes
php_flag[display_errors] = Off
php_flag[display_startup_errors] = Off
php_admin_value[memory_limit] = 64M
php_admin_value[upload_max_filesize] = 32M
php_admin_value[post_max_size] = 40M

Небольшие комментарии к написаному:
pm — динамическое кол-во обработчиков php.
pm.max_children — максимальное число запущеных (лучше выставлять осознанно, чтобы не уйти в своп).
pm.start_servers — кол-во запускаемых обработчиков на старте php-fpm.
pm.min_spare_servers — минимальное число пустующих обработчиков (на случай если нагрузка начнет резко рости).
pm.max_spare_servers — максимальное число пустующих обработчиков (чтобы сильно много памяти лишний раз не занимать).
pm.max_requests — перезапускать обработчик через каждые N запросов (на случай утечки памяти и прочих глюков).

php_flag[display_errors] = Off — по умолчанию отключаем отображение ошибок php на всех сайтах.
php_flag[display_startup_errors] = Off — по умолчанию отключаем отображение ошибок php при запуске на всех сайтах.
php_admin_value[memory_limit] = 64M — по умолчанию на всех сайтах лимит используемой памяти — 64МБ.
php_admin_value[upload_max_filesize] = 32M — по умолчанию разрешаем загрузку файлов размером до 32МБ.
php_admin_value[post_max_size] = 40M — максимальный размер поста по умолчанию до 40МБ.

Теперь настало время главного конфига php-fpm — создаем файл /usr/local/php/etc/php-fpm.conf со следующим содержанием:


[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = warning
emergency_restart_threshold = 5
emergency_restart_interval = 1m
process_control_timeout = 5s
daemonize = yes

include = etc/pools/*.conf

Пара комментариев:
log_level — означает уровень логирования. Бывает alert, error, warning, notice, debug. В случае непонятных багов-глюков-и.т.д выставляем в debug и читаем логи.
include — подключаем наши конфиги из папки pools.

Теперь создадим конфиг php-fpm для нашего сайта /usr/local/php/etc/pools/koteika.ru.conf с примерно следующим содержанием:


[koteika.ru]
include = etc/default-config. conf

user = koteika.ru
group = koteika.ru
listen = /home/koteika.ru/tmp/php-fpm.sock

request_terminate_timeout = 30s ; 30 sec for work
request_slowlog_timeout = 5s ; add to slowlog after 5 sec

slowlog = /home/koteika.ru/logs/slow.log
chroot = /home/koteika.ru
chdir = /public_html

php_flag[display_errors] = Off
php_flag[display_startup_errors] = Off

php_admin_value[error_log] = /home/koteika.ru/logs/php_error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 64M
php_admin_value[upload_tmp_dir] = /home/koteika.ru/tmp

Здесь все более менее понятно:
[koteika.ru] — имя нашей секции вокеров (должно быть уникально для каждого конфига).
include — подключаем наш дефолтный конфиг, все настройки следующие за этой директивой перекрываются (странно, но user и group перекрыть не удалось).
user — юзер, от которого будет запущен процесс php.
group — группа, от которой будет запущен процесс php.
listen — тот самый сокет, котрый мы указывали в конфигурации nginx.
request_terminate_timeout — убъется, если зависнет более чем N сек.
chroot — путь, который будет казаться корнем для php.
chdir — по дефолту на старте php будет сначала открывать эту папку (тут для нашего конфига ничего менять не нужно).
В строках 15-21 подсветил перекрытие настроек из конфига-инклюда (переопределяйте при необходимости и добавляйте свои). php_admin_value[upload_tmp_dir] — папку загрузки тоже перекрываем в tmp нашего окружения chroot.

Так же можно перекрыть pm.max_children и прочие настройки количества обработчиков. Если сайт на VDS планируется один — можно всю память отдать ему (выставить 10-15 обработчиков на 512МБ тарифном плане). Так же следует подкрутить pm.start_servers, pm. min_spare_servers и pm.max_spare_servers к более разумному числу. Если сайтов планируется несколько — разумнее было бы раздать память сайтам исходя из важности и нагрузки. Для более полного понимания процесса настройки рекомендую почитать дефолтный файл конфигурации, который будет доступен тут — /usr/local/src/php-5.3.8/sapi/fpm/php-fpm.conf

Готовим окружение для chroot
Осталось совсем немного до счастливого запуска php. Структуру папок для нашего сайта мы создали в посте про конфигурацию nginx. Теперь осталось скопировать некоторые файлы, которые потребуются php для работы в chroot:


sudo cp /etc/resolv.conf /home/koteika.ru/etc
sudo cp /etc/nsswitch.conf /home/koteika.ru/etc

Файлы надо именно скопировать, создание хардлинков недопустимо. Причина — при возможном повышении привелегий пользователя до рута (вдруг каким-то образом оно случится) злоумышленик может поменять содержимое файлов (например resolv. conf) и заставить весь сервер делать запросы на подставной неймсервер, который может уже манипулировать вашим сервером в своих нуждах. Теперь наверное понятно зачем мы ставили кеширующий неймсервер на локалхост? 🙂
Копируем необходимые для php установленные библиотеки (версии поглядите у себя в папке ls /lib/libnss_dns*) и создаем симлинки на сами библиотеки:


sudo cp /lib/libnss_dns-2.11.1.so /home/koteika.ru/lib
sudo ln -s libnss_dns-2.11.1.so libnss_dns.so.2
sudo mv ./libnss_dns.so.2 /home/koteika.ru/lib

sudo cp /lib/libnss_files-2.11.1.so /home/koteika.ru/lib
sudo ln -s libnss_files-2.11.1.so libnss_files.so.2
sudo mv ./libnss_files.so.2 /home/koteika.ru/lib

Ну вот и все, запускаем сервис php-fpm:


sudo service php-fpm start

Если сервис не запустился, смотрим логи по адресу /usr/local/php/var/log/php-fpm.log. Возможно предется поменять log_level на debug в главном конфиге php-fpm.

Проверка
Создадим файл /home/koteika.ru/public_html/i.php с содержимым:




Откроем файл в браузере http://koteika.ru/i.php — если все работает, то увидем информацию о php. После этого стоит удалить файл /home/koteika.ru/public_html/i.php.

P.S. Почта через mail в таком php пока не работает, но можно слать через SMTP — никто не запрещает. Позже мы допилим php до варианта, чтобы mail тоже работало.

Если вам понравилась моя статья, пожалуйста, не поленитесь кликнуть любую кнопочку ниже, или кинуть ссылку на статью в свой блог или форум. Всегда рад ответить на ваши вопросы в комментариях. Спасибо 🙂

Разница между PHP 5 и 7

PHP был создан в 1994 году Расмусом Лердорфом и чрезвычайно популярен среди разработчиков. Этот язык является наиболее идеальным языком сценариев для каждого веб-разработчика. Многие компании создали множество веб-сайтов с помощью языка сценариев PHP. PHP предоставляет вам множество возможностей, которые ограничены и полезны для веб-разработчика при создании хорошего веб-сайта. Если вы новичок, стремящийся сделать карьеру в PHP или не обладаете достаточными знаниями об этом, в этой статье мы поговорим о разнице между PHP7 и PHP5. PHP породил конечное количество версий веб-разработки с 1994 до 2020 года и также был модернизирован.

PHP — это препроцессор гипертекста и широко используемый язык сценариев с открытым исходным кодом. PHP идеально подходит для веб-разработки, может быть встроен в HTML. Файлы PHP могут храниться как расширения .php в любой папке. PHP совместим практически со всеми серверами, такими как Apache, IIS и т. д.), который наиболее часто используется в современную эпоху. PHP работает на различных платформах, таких как Windows, Linux, UNIX, Mac OS X и т. д. PHP имеет возможность отправлять и получать файлы cookie и контролировать доступ пользователей. Вы можете задаться вопросом, что случилось с PHP 6? Итак, PHP6 потерпел неудачу, и новая версия была переименована в PHP 7. Одним из самых интересных событий 2015 года в мире PHP стал выпуск PHP 7, спустя 10 лет после выпуска последней основной версии PHP 5. PHP Версия 7 предлагает множество новых функций и значительно превосходит PHP 5.x по производительности.

PHP7 обещает повышенную производительность, низкую нагрузку на серверы, повышенную экономичность и экологичную работу, поскольку потребляет меньше энергии. PHP7 превосходит PHP5 по скорости и связности. Таким образом, важно принять это обновление, поскольку растущему количеству веб-серферов требуется быстрое подключение. PHP7 — это веб-версия следующего поколения сразу после PHP5, пропускающая PHP6. Давайте теперь углубимся в различия между php5 и PHP 7.


Содержание

show

  • Что такое PHP 5?
  • Возможности PHP 5
  • Что такое PHP 7?
  • Ключевые отличия
  • Различия между PHP5 и PHP 7
  • PHP 5 или PHP 7
  • Заключение
  • Часто задаваемые вопросы
  • Дополнительные ресурсы
3 90?

Версия PHP 5 была выпущена с совершенно новой функциональностью языка PHP. Основное внимание команды PHP было сосредоточено на том, что отсутствовало или плохо поддерживалось в старых версиях. PHP5 был сосредоточен на трех основных областях: объектно-ориентированное программирование, поддержка XML и MySQL. PHP5 представляет полностью переработанную объектную модель, которая теперь предлагает:

Не знаете, что делать дальше?

В 3 простых шагах. Вы можете найти свою персонализированную карьеру в разработке программного обеспечения бесплатно



Расширение в новой TAB

  • ДЕРЕЗУДОВ
  • Конструкторы
  • ИНТЕРФЕРС
  • КЛАССА
  • ABTIOR ABTIC15
  • . методы
  • Конечные свойства и методы
  • Целый набор волшебных методов

Теперь объекты присваиваются и передаются по ссылке, а не по значению. Таким образом, необходимость щедро разбрасывать амперсанды по всему коду не требуется.

Особенности PHP 5

  • PHP5 поставляется с полностью переписанным MySQL из старых версий. Многие разработчики поддерживают свои веб-сайты с помощью MySQL.
  • Последние версии MySQL, 4.1 и 5.0, демонстрируют множество новых функций, некоторые из которых требуют значительных изменений в расширении. Поэтому PHP 5 поставляется с совершенно новым и улучшенным расширением MySQL. Названный MySQLi для расширения MySQL Improved, MySQL Improved предлагает:
    • Подготовленные операторы
    • SSL-соединения
    • Функции нескольких запросов
    • Связанные входные и выходные параметры
  • PHP 5 исправляет основные недостатки XML-расширений PHP 4. Новые расширения XML, во-первых, позволяют работать вместе как единое целое. Во-вторых, расширения стандартизированы для одной XML-библиотеки: libxml2. В-третьих, они полностью соответствуют спецификациям W3. В-четвертых, вы можете эффективно обрабатывать данные и, наконец, предоставить вам правильный XML-инструмент для вашей работы.
  • PHP 5 предлагает модель проверки ошибок, отличную от той, что доступна в PHP 4. Она известна как обработка исключений. С помощью исключений вы избавлены от необходимости проверять возвращаемое значение каждой функции. Кроме того, вы можете отделить логику программирования от обработки ошибок и поместить их в соседние блоки кода.
  • PHP 5 теперь имеет полезное расширение SOAP (Simple Object Access Protocol), написанное на C. Simple Object Access Protocol или SOAP стал одним из основных элементов веб-служб, а PHP5 поддерживает клиентов SOAP с файлами WSDL или без них (определение веб-службы). Язык).
  • Итератор — это новая функция, добавленная в PHP5. Этот итератор помогает нам использовать цикл «для каждого» с помощью нескольких структур данных, таких как результаты базы данных, список каталогов и XML-документы.

Что такое PHP 7?

Создание PHP 7 возглавили Дмитрий Стогов, Никита Попов и Синьчен Хуэй. Эти три разработчика разработали экспериментальную ветвь PHP, которую они первоначально назвали PHP Next Generation, часто сокращенно PHPNG. Сообщество PHP приняло этот новый язык сценариев, поскольку он предлагал заметные изменения в производительности, и продолжило развивать его в стабильной версии языка, теперь известной как PHP 7. Выпущенный в декабре 2015 года, PHP 7 гарантирует высокую производительность для веб-сайтов и онлайн-приложений. Подсчитано, что PHP 7 предлагает 100-процентное улучшение производительности и скорости по сравнению с PHP 5.6. Это существенное улучшение скорости позволяет веб-разработчикам создавать сайты с интересными и привлекательными интерактивными функциями, которые по-прежнему реагируют на вводимые пользователем данные так быстро, как ожидают веб-пользователи.

Еще одной причиной для создания PHP 7 является необходимость разработки языков сценариев, которые работают более эффективно с точки зрения скорости и производительности. Это стремление обусловлено двумя факторами: необходимостью снижения затрат и необходимостью снижения энергопотребления для защиты окружающей среды. По сравнению с PHP 5.6, PHP 7 предъявляет значительно меньшие требования к серверам, что делает его более экономичным и экологичным выбором. Для питания серверов с приложениями PHP 7 требуется очень мало энергии.

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

Функции PHP 7

Ниже приведены некоторые функции PHP версий 7–9.0003

  • Тип возвращаемого значения — популярная функция большинства других языков программирования, которые, наконец, были включены в PHP. В PHP 7 возвращаемый тип располагается после закрывающей скобки списка аргументов:
 function foo(): array {
возвращаться [];
} 

В этом примере демонстрируется функция foo, которая возвращает массив. В PHP 5.6 разработчики не указывали тип возвращаемого значения. Явное указание возвращаемых типов значительно упрощает чтение кода. Это становится полезным при отладке вашего кода или работе с кодом, написанным кем-то другим.

  • Еще одно интересное изменение в синтаксисе PHP 7 — введение оператора космического корабля. Оператор стал очень полезным для программистов, поскольку они используют его для сортировки различных комбинированных сравнений. С помощью этого можно быстро и удобно сравнить два выражения. Использование этого оператора для сравнения переменных влечет за собой гораздо меньше ввода, чем кодирование нескольких тестов с традиционными операторами меньше (<), равно (==) и (>) больше, чем это делают операторы.
  • В PHP 7 реализована возможность использования оператора объединения null. Этот оператор присваивает переменную на основе того, является ли первое значение нулевым. Преимущество этого оператора заключается в том, что он сокращает синтаксис, необходимый для проверки того, является ли значение нулевым, и присваивает что-то еще.
  • Старомодная обработка ошибок больше не существует и заменена объектно-ориентированными исключениями. Это изменение реализовано для того, чтобы разработчикам было проще находить и исправлять ошибки в своем коде.
  • Самая интересная новая особенность PHP 7 заключается в том, что PHP7 теперь в 2 раза быстрее, чем PHP 5. PHP 7 сочетает в себе подсказку статического типа, что делает возможным использование многих инструментов, доступных для статического анализа и обнаружения статических ошибок.
  • PHP7 обеспечивает качественную, масштабируемую и экономичную разработку.
  • Изменен синтаксис разыменования переменных, что сделало его более гармоничным.

Ключевые отличия

PHP7 намного более совершенен, чем PHP5 по скорости и связности, поэтому необходимо принять во внимание обновление, так как растущее число веб-серферов ожидает быстрого соединения. PHP 7 — это улучшенная версия PHP 5, обеспечивающая более высокую производительность при использовании меньшего объема памяти. Кодирование PHP5 намного проще традиционного кодирования, а PHP 7 предоставляет разработчикам простую систему кодирования. Модернизированный движок PHP7 считается дизайном следующего поколения. В PHP5 обработка ошибок в процессе разработки довольно утомительна для разработчиков. В PHP7 обработка фатальных ошибок выполняется без проблем. Одновременный запуск нескольких действий затруднен в версии PHP5, что преодолевается в сценарии PHP7.

Differences Between PHP5 and 7

PHP 5 Vs PHP 7
Parameter PHP 5 PHP 7
Engine Version PHP 5 uses the old version of the engine called Zend II , поэтому его производительность с точки зрения скорости намного ниже, чем у PHP 7.  PHP 7 использует совершенно новую модель движка, известную как PHP-NG или Next Generation. Этот движок значительно повышает производительность за счет оптимизированного использования памяти.
Тип возвращаемого значения функции   PHP 5 не позволяет программистам указывать возвращаемый тип функции или метода. PHP 7 позволяет программистам объявлять возвращаемый тип функций в соответствии с ожидаемым возвращаемым значением. Таким образом, это делает код надежным и точным.
Обработка фатальных ошибок Обработка фатальных ошибок в PHP 5 довольно сложна.
Процесс обработки фатальных ошибок сделан довольно простым. Эта функция скрипта используется для выполнения возвращаемого типа. Программистам необходимо определить тип возвращаемого значения после скобок аргумента. В этом скрипте основные ошибки могут быть преобразованы в исключения, что упрощает их обработку.
64-битная поддержка Не имеет 64-битной поддержки и поэтому не поддерживает 64-битные целые числа, а также большие файлы. Он имеет 64-битную поддержку, что позволяет программисту использовать собственные 64-битные целые числа, а также большие файлы и в связи с этим запускать различные приложения на 64-битных системных архитектурах без каких-либо недостатков
Оператор объединения В PHP5 нет оператора объединения. Программист должен написать явный код для возврата нулевого значения, если значение недоступно. Оператор объединения, обозначаемый двойным вопросительным знаком (??), является еще одной важной особенностью PHP 7. Оператор используется, чтобы указать, существует что-то или нет.
Оператор космического корабля В PHP5 нет оператора космического корабля. Для сравнения необходимо использовать множество операторов. PHP7 снабжен новым оператором, обычно называемым оператором космического корабля, который имеет обозначение <=>  Функция может автоматически возвращаться к нулю, когда значение недоступно.
Концепция анонимного класса В PHP5 нет концепции анонимных классов Анонимный класс используется для ускорения времени выполнения.
Объявление пространств имен В PHP5 есть объявление Individual для общих пространств имен. В PHP7 введена декларация группового использования, согласно которой разработчики смогут включать классы из одного пространства имен и делать код более простым и компактным.
Примеры расширенных функций Примерами расширенных функций PHP 5 являются улучшение расширения XML, улучшенная реализация Soap и т. д.  Примеры расширенных функций PHP 7 включают объявление типа возврата, функции CSPRNG и т. д.
Асинхронный поддержка программирования В предыдущих версиях PHP5 было сложно одновременно выполнять несколько действий. В PHP7 эта проблема эффективно решена, так как это обеспечивает беспрепятственное выполнение множества задач. Можно получить доступ к базе данных, сети, установить таймеры, а также выполнять несколько операций ввода-вывода одновременно и без каких-либо препятствий.

PHP 5 или PHP 7

С 1 января 2019 года PHP 5 больше не поддерживается исправлениями безопасности, начиная с 1 января. Это означает, что даже если уязвимость будет обнаружена, она не будет устранена, что поставит ваш сайт под угрозу. PHP 7 имеет много улучшений по сравнению с PHP версии 5. Анонс PHP 7 отбросил старый и устаревший код и проложил путь для новых функций и улучшений производительности в будущем. Таким образом, PHP7 зарекомендовал себя лучше, чем PHP5, с точки зрения скорости, обработки ошибок и т. д.


Заключение

Кроме того, предполагается, что в скором времени PHP получит дополнительную оптимизацию производительности. Несмотря на некоторые нарушения совместимости с прошлыми выпусками, большинство проблем легко исправить. Библиотеки и фреймворки теперь переносят свой код на PHP 7, что делает доступными последние версии. Мы рекомендуем вам попробовать и увидеть результат своими глазами. Возможно, ваше приложение уже совместимо и ожидает использования и преимуществ PHP 7.

В идеале вам следует обновиться до PHP 7.4, который является последней версией PHP. Эта версия будет полностью поддерживаться еще год, после чего в течение года будут получать обновления безопасности. Срок службы PHP 7.2 истек (EOL) 30 ноября 2020 года. Это означает, что недостатки безопасности больше не будут устраняться, а сайты подвержены значительным уязвимостям безопасности.


Часто задаваемые вопросы


Почему PHP 7 быстрее?
PHP 7 работает на движке PHPNG (или Zend Engine 3.0), который ускоряет приложения PHP больше, чем предыдущий интерпретатор PHP (Zend Engine 2.0). Благодаря PHPNG ваши приложения будут работать в 2 раза быстрее и потреблять на 50% меньше памяти, чем PHP 5.6. Это позволяет вам обслуживать больше одновременных пользователей без добавления нового оборудования.

Каковы наиболее важные преимущества использования PHP 7 по сравнению с PHP 5?
Обновление до PHP7 не только гарантирует быструю загрузку веб-сайта, но и обеспечивает гораздо более эффективный сценарий, который без усилий запускается каждый раз, когда пользователи заходят на веб-сайт. Следовательно, если предприятия решат обновить свои веб-сайты с PHP5 до PHP7, это поможет их бизнесу расти.

PHP 5 все еще поддерживается?
№ 31 декабря 2018 г. указывает на официальное прекращение поддержки безопасности для PHP 5.6. Рекомендуется не использовать PHP 5.6 (или любую версию PHP 5) в рабочей среде. Существует ряд устаревших и устаревших функций и библиотек, которые больше не следует использовать по соображениям безопасности.

Является ли PHP 7 более безопасным?
Каждая ветка выпуска PHP полностью поддерживается в течение 2 лет с момента ее первого стабильного выпуска. На этом этапе сообщения об ошибках и проблемах безопасности устраняются и выпускаются в виде обычных точечных выпусков. PHP 7 предлагает лучшие улучшения безопасности по сравнению с PHP 5, которые включают отфильтрованную несериализованную функцию и набор функций для простого получения криптографически безопасных случайных чисел.

Является ли PHP 5 угрозой безопасности?
К концу 2018 года PHP прекратил обновления безопасности и поддержку некоторых своих ранних версий. Это означает, что сотни миллионов веб-сайтов подвергнутся серьезной опасности с точки зрения кражи пользовательских данных, взлома сайтов и огромных штрафов. Вам необходимо обновить и использовать системы, которые позволяют развертывать только новые версии PHP по умолчанию .

Дополнительные ресурсы

  • PHP Вопросы для интервью
  • PHP MCQ с ответами
  • Проекты PHP
  • PHP Frameworks
  • Top PHP IDE
  • Возможности PHP
  • Как стать разработчиком PHP
  • Зарплата разработчика PHP
  • PHP против Python

Установка руководства по установке среды Linux PHP 5.60

Открыть тему с навигацией

В этой статье объясняется, как установить и настроить среду PHP 5.6 с Apache 2.4, чтобы она запускала Scriptcase.

Соблюдайте осторожность при выполнении следующих действий.

Примечание. Эта статья основана на дистрибутиве Debian Jessie

 

Установка PHP 5.

6

 

Используйте следующую команду для установки PHP 5.6

sudo apt-get установить php5-dev php5-cli php5 php5-pear



Примите установку зависимостей.


Проверьте версию PHP с помощью команды:

php -v

 

Важно : По умолчанию PHP имеет некоторые отключенные функции, которые будут необходимы для Scriptcase. Итак, откройте свой php.ini (/etc/php5/apache2/php.ini) и измените переменную disable_functions по примеру:


Чтобы включить базы данных, мы выбрали несколько примеров команд установки:

MSSQL Server используйте эту команду sudo apt-get install php5-mssql

PostgreSQL используйте эту команду sudo apt-get install php5-pgsql

MySQL используйте эту команду sudo apt-get install php5-mysql

SQLite используйте эту команду sudo apt-get install php5-sqlite

Firebird используйте эту команду sudo apt-get install php5-interbase

Odbc используйте эту команду sudo apt-get install php5-odbc

 

 

Активация библиотеки GD

 

Используйте команду sudo apt-get install php5-gd для активации библиотеки GD.

Принять установку зависимостей.

 

 

Активировать загрузчик Zend Guard

 

Загрузите Zend Guard Loader для Linux по ссылке ниже и поместите его вот так /usr/lib/php5/Zend .

Скачать ZendGuardLoader x86

Скачать ZendGuardLoader x64

 

Установите рекурсивные разрешения 777 для папки /usr/lib/php5/Zend

sudo chmod 777 -R /usr/lib/php5/Zend

 

Откройте файл php.ini (/etc/php5/apache2/php.ini) и в конце файла добавьте строку:

[зенд]
zend_extension=/usr/lib/php5/Zend/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.license_path=

 

После этой процедуры перезапустите Apache с помощью команды:
судо /etc/init. d/apache2 остановить
судо /etc/init.d/apache2 начать

 

Ручная установка Scriptcase

 

Загрузите Scriptcase с расширением zip или tgz с сайта www.scriptcase.net и распакуйте zip в корень веб-сервера, который был установлен ранее ( /var/www/html ).

После распаковки zip переименуйте папку в scriptcase .

 

Получите доступ к Scriptcase из браузера, используя приведенный ниже пример:

Пример: http://127.0.0.1/scriptcase

 

На странице ниже показаны параметры языка установки ScriptCase.

 

Здесь он проверяет установленные расширения. Если вы отметьте флажки не установленных расширений, он попытается настроить файл php.ini для распознавания выбранных расширений.

 

 

 

Теперь вы можете выбрать Типовую установку или Индивидуальную установку.

Типовая установка


 

Scriptcase установит все автоматически. После выбора стандартной установки вы будете автоматически перенаправлены в вашу среду разработки Scriptcase. По умолчанию имя пользователя: admin и пароль: admin.


 

Индивидуальная установка


 

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

Для правильной работы Scriptcase требуются некоторые разрешения, в данный момент он проверяет разрешения.

Этот шаг заключается в определении базы данных, в которую будет установлен ScriptCase. Параметр по умолчанию — SQLite, для которого требуется, чтобы в PHP был активен только его модуль. но его можно установить в другие базы данных, нажав «Изменить базу данных». Переходя к следующему шагу, таблицы будут созданы.