Блог

  • Рекомендации по безопасности PHP

    PHP – это широко используемый язык сценариев на стороне сервера с открытым исходным кодом. Веб-сервер Apache / Nginx / Lighttpd обеспечивает доступ к файлам и контенту по протоколу HTTP или HTTPS. Неправильно настроенный язык сценариев на стороне сервера может создать всевозможные проблемы. Таким образом, PHP следует использовать с осторожностью. Вот двадцать пять лучших практик безопасности php для системных администраторов Linux и Unix для безопасной настройки PHP.

    Лучшие практики безопасности PHP

    Наш пример настройки безопасности PHP

    • DocumentRoot: /var/www/html
    • Веб-сервер по умолчанию: Apache ( вместо Apache можно использовать Lighttpd или Nginx )
    • Файл конфигурации PHP по умолчанию: /etc/php.ini или /etc/php/7.0/fpm/php.ini
    • Каталог конфигурации расширений PHP по умолчанию: /etc/php.d/ или /etc/php/7.0/fpm/conf.d/
    • Наш пример файла конфигурации безопасности php: /etc/php.d/security.ini или /etc/php/7.0/fpm/conf.d/99-security.conf (вам нужно создать этот файл с помощью текстового редактора)
    • Операционные системы: RHEL / CentOS / Fedora Linux (инструкции должны работать с любыми другими дистрибутивами Linux, такими как Debian / Ubuntu или другими Unix- подобными операционными системами, такими как OpenBSD / FreeBSD / HP-UX ).
    • Порты TCP / UDP сервера PHP по умолчанию: нет

    Большинство действий, перечисленных в этом посте, написаны с предположением, что они будут выполняться пользователем root, запускающим bash или любую другую современную оболочку:

    $ php -v

    Примеры вывода результатов:

    PHP 5.3.3 (cli) (построено: 24 октября 2011 г., 08:35:41)
    Авторские права (c) 1997-2010 Группа PHP
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    

    или же

    PHP 7.3.7 (cli) (построено: 8 июля 2019 г., 09:58:12) (NTS)
    Авторские права (c) 1997-2018 Группа PHP
    Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
        с Zend OPcache v7.3.7, Copyright (c) 1999-2018, Zend Technologies
    

    В демонстрационных целях я собираюсь использовать следующую операционную систему:

    $ cat /etc/redhat-release

    Red Hat Enterprise Linux Server, выпуск 6.1

    Давайте посмотрим на некоторые из лучших практик безопасности php.

    1. Знай своего врага

    Приложения на основе PHP могут сталкиваться с различными типами атак. Я заметил разные типы атак:

    1. XSS – межсайтовый скриптинг – это уязвимость в веб-приложениях на PHP, которую злоумышленники могут использовать для кражи информации пользователей. Вы можете настроить Apache и написать более безопасные сценарии PHP (проверяющие все вводимые пользователем данные), чтобы избежать атак xss.
    2. SQL-инъекция – это уязвимость на уровне базы данных приложения php. Если пользовательский ввод неправильно отфильтрован, приложение может выполнять любые операторы SQL. Вы можете настроить Apache и написать безопасный код (проверяющий и фильтрующий все вводимые пользователем данных), чтобы избежать атак SQL-инъекций. Обычной практикой в ​​PHP является экранирование параметров с помощью функции mysql_real_escape_string () перед отправкой запроса SQL.
    3. Загрузка файлов – позволяет посетителю размещать файлы (загружать файлы) на ваш сервер. Это может привести к различным проблемам с безопасностью, таким как удаление ваших файлов, удаление базы данных, получение сведений о пользователе и многое другое. Вы можете отключить загрузку файлов с помощью php или написать безопасный код (например, проверить ввод данных пользователем и разрешить только файлы изображений, такие как png или gif).
    4. Выполнение локальных и удаленных файлов. Злоумышленник может открывать файлы с удаленного сервера и выполнять любой PHP-код. Это позволяет им загружать файл, удалять файл и устанавливать бэкдоры. Вы можете настроить php для отключения удаленного выполнения файла.
    5. eval () – оценивает строку как код PHP. Часто используется злоумышленниками, чтобы скрыть свой код и инструменты на самом сервере. Вы можете настроить php, чтобы отключить eval ().
    6. Cross-site request forgery – (подделка межсайтовых запросов – CSRF) – эта атака вынуждает конечного пользователя выполнять нежелательные действия в веб-приложении, в котором он / она в настоящее время аутентифицирован. Успешный эксплойт CSRF может поставить под угрозу данные и работу конечного пользователя в случае обычного пользователя. Если целевой конечный пользователь является учетной записью администратора, это может поставить под угрозу все веб-приложение.

    2. Проверьте встроенные модули PHP.

    Чтобы увидеть набор встроенных модулей PHP, введите следующую команду:

    # php -m

    Примеры вывода результатов:

    [PHP Modules]
    apc
    bcmath
    bz2
    calendar
    Core
    ctype
    curl
    date
    dom
    ereg
    exif
    fileinfo
    filter
    ftp
    gd
    gettext
    gmp
    hash
    iconv
    imap
    json
    libxml
    mbstring
    memcache
    mysql
    mysqli
    openssl
    pcntl
    pcre
    PDO
    pdo_mysql
    pdo_sqlite
    Phar
    readline
    Reflection
    session
    shmop
    SimpleXML
    sockets
    SPL
    sqlite3
    standard
    suhosin
    tokenizer
    wddx
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xsl
    zip
    zlib
    
    [Zend Modules]
    Suhosin

    Я рекомендую вам использовать PHP с сокращенным количеством модулей для повышения производительности и безопасности. Например, вы можете отключить модуль sqlite3, удалив (удалив) файл конфигурации , или переименовав (переместив) файл с именем /etc/php.d/sqlite3.ini.

    # rm /etc/php.d/sqlite3.ini

    или

    # mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable

    Скомпилированные модули можно удалить только путем переустановки PHP с уменьшенной конфигурацией. Вы можете загрузить исходный код php с php.net и скомпилировать его с поддержкой GD, fastcgi и MySQL следующим образом:

    ./configure --with-libdir=lib64 --with-gd --with-mysql --prefix=/usr --exec-prefix=/usr \
    --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share \
    --includedir=/usr/include --libexecdir=/usr/libexec --localstatedir=/var \
    --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info \
    --cache-file=../config.cache --with-config-file-path=/etc \
    --with-config-file-scan-dir=/etc/php.d  --enable-fastcgi \
    --enable-force-cgi-redirect

    3. Ограничьте утечку информации PHP

    Чтобы ограничить утечку информации PHP, отключите expose_php. Отредактируйте /etc/php.d/cuity.ini и установите следующую директиву:

    expose_php=Off

    Когда включено, expose_php сообщает миру, что на сервере установлено php, и какой версии в заголовке HTTP (например, X-Powered-By: PHP / 5.3.3). Также отображаются идентификаторы логотипа PHP поэтому добавление их к URL-адресу сайта с поддержкой PHP приведет к отображению соответствующего логотипа. Когда expose_php включен, вы можете увидеть версию php, используя следующую команду:

    $ curl -I https://itfb.com.ua/index.php

    Примеры вывода результатов:

    HTTP / 1.1 200 OK
     X-Powered-By: PHP / 5.3.3
    Тип содержимого: текст / html; charset = UTF-8
    Варьируется: кодировка принятия, cookie
    X-Vary-Options: Accept-Encoding; list-contains = gzip, Cookie; string-contains = wikiToken; string-contains = wikiLoggedOut; string-contains = wiki_session
    Последнее изменение: Вт, 3 ноября 2011 г., 22:32:55 GMT
    ...
    

    Я также рекомендую вам настроить директивы ServerTokens и ServerSignature в httpd.conf, чтобы скрыть версию Apache и скрыть версию PHP 5/7 при использовании Nginx.

    4. Минимизируйте загружаемые модули PHP (динамические расширения)

    PHP поддерживает «Динамические расширения». По умолчанию RHEL загружает все модули расширения, находящиеся в каталоге /etc/php.d/. Чтобы включить или отключить конкретный модуль, просто найдите файл конфигурации в каталоге /etc/php.d/ и закомментируйте имя модуля. Вы также можете переименовать или удалить файл конфигурации модуля. Для лучшей производительности и безопасности PHP вам следует включать только те расширения, которые требуются вашим веб-приложениям. Например, чтобы отключить расширение gd, введите следующие команды:

    # cd /etc/php.d/
    # mv gd.{ini,disable}
    #/sbin/service httpd restart
    Чтобы включить модуль php с именем gd, введите:
    # mv gd.{disable,ini}
    #/sbin/service httpd restart

    5. Регистрировать все ошибки PHP

    Не показывайте сообщения об ошибках PHP всем посетителям сайта. Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

    display_errors=Off

    Убедитесь, что вы записываете все ошибки php в файл журнала :

    log_errors = On 
    error_log = /var/log/httpd/php_scripts_error.log

    6. Запретить загрузку файлов

    Отредактируйте /etc/php.d/security.ini и установите следующую директиву, чтобы отключить загрузку файлов по соображениям безопасности:

    file_uploads = Off

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

    file_uploads = On
    # пользователь может загружать не более 1 МБ через php
    upload_max_filesize = 1MB

    7. Отключите удаленное выполнение кода.

    Если включено, allow_url_fopen позволяет файловым функциям PHP, таким как file_get_contents () и операторам include и require, получать данные из удаленных мест, таких как FTP или веб-сайт.

    Параметр allow_url_fopen позволяет файловым функциям PHP, таким как file_get_contents () и операторам include и require, получать данные из удаленных мест с использованием протоколов ftp или http. Программисты часто забывают об этом и не выполняют надлежащую фильтрацию ввода при передаче данных, предоставленных пользователем, этим функциям, что делает их уязвимыми для внедрения кода . Большое количество уязвимостей, связанных с внедрением кода, о которых сообщается в веб-приложениях на основе PHP, вызвано сочетанием включения allow_url_fopen и плохой фильтрации ввода. Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

    allow_url_fopen = Off

    Также рекомендую отключить allow_url_include из соображений безопасности:

    allow_url_include = Off

    8. Включите безопасный режим SQL.

    Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

    sql.safe_mode = On

    Если включено , mysql_connect () и mysql_pconnect () игнорируют любые переданные им аргументы. Обратите внимание, что вам может потребоваться внести некоторые изменения в свой код. Сторонние приложения и приложения с открытым исходным кодом, такие как WordPress и другие, могут вообще не работать, если включен sql.safe_mode. Я также рекомендую вам отключить magic_quotes_gpc для всех установок php 5.3.x, так как его фильтрация неэффективна и не очень надежна. mysql_escape_string () и пользовательские функции фильтрации служат лучше:

    magic_quotes_gpc = Off

    9. Контроль размера POST

    Метод запроса HTTP POST используется, когда клиенту (браузеру или пользователю) необходимо отправить данные на веб-сервер Apache как часть запроса, например, при загрузке файла или отправке заполненной формы. Злоумышленники могут попытаться отправить POST-запросы большого размера, чтобы съесть ресурсы вашей системы. Вы можете ограничить максимальный размер POST-запроса, который будет обрабатывать PHP. Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

    ; Установите здесь реалистичное значение 
    post_max_size = 1K

    1K устанавливает максимальный размер данных публикации, разрешенный приложениями php. Этот параметр также влияет на загрузку файлов. Для загрузки больших файлов это значение должно быть больше, чем upload_max_filesize. Я также предлагаю вам ограничить доступные методы с помощью веб-сервера Apache. Отредактируйте httpd.conf и установите следующую директиву для DocumentRoot /var/www/html:

    <directory /var/www/html>
        <limitExcept GET POST>
            Order allow,deny
        </limitExcept>
    ## Add rest of the config goes here... ##
    </directory>

    10. Контроль ресурсов (DoS Control)

    Вы можете установить максимальное время выполнения каждого скрипта php в секундах. Другой рекомендуемый вариант – установить максимальное количество времени, в течение которого каждый сценарий может тратить на анализ данных запроса, и максимальный объем памяти, который может потреблять сценарий. Отредактируйте /etc/php.d/security.ini и установите следующие директивы:

    # задается в секундах
     max_execution_time  =   30 
    max_input_time  = 30 
    memory_limit  = 40M

    11. Установите систему расширенной защиты Suhosin для PHP.

    Со страницы проекта :

    Suhosin – это продвинутая система защиты для установок PHP. Он был разработан для защиты серверов и пользователей от известных и неизвестных недостатков в приложениях PHP и ядре PHP. Сухосин состоит из двух независимых частей, которые можно использовать по отдельности или в комбинации. Первая часть представляет собой небольшой патч для ядра PHP, который реализует несколько низкоуровневых средств защиты от переполнений буферов или уязвимостей строки форматирования, а вторая часть представляет собой мощное расширение PHP, которое реализует все остальные средства защиты.

    Посмотрите, как установить и настроить suhosin в операционных системах Linux.

    12. Отключение опасных функций PHP

    PHP имеет множество функций, которые можно использовать для взлома вашего сервера, если они используются неправильно. Вы можете установить список функций в /etc/php.d/security.ini с помощью директивы disable_functions :

    disable_functions  = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source

    13. PHP Fastcgi / CGI – директива cgi.force_redirect

    PHP работает с FastCGI. Fascgi уменьшает объем памяти, занимаемый вашим веб-сервером, но по-прежнему дает вам скорость и мощность всего языка PHP. Вы можете настроить Apache2 + PHP + FastCGI или cgi, как описано здесь . Директива конфигурации cgi.force_redirect запрещает кому-либо вызывать PHP напрямую с URL-адресом, например http://itfb.com.ua/cgi-bin/php/hackerdir/backdoor.php. Включите cgi.force_redirect из соображений безопасности. Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

    ; Включите cgi.force_redirect из соображений безопасности в типичной настройке * Apache + PHP-CGI / FastCGI * 
    cgi.force_redirect = On

    14. Пользователь PHP и идентификатор группы

    mod_fastcgi – это cgi-модуль для веб-сервера Apache. Он может подключаться к внешнему серверу FASTCGI. Вам необходимо убедиться, что php запускается как пользователь без полномочий root. Если PHP выполняется как root или UID ниже 100, он может обращаться к системным файлам и / или манипулировать ими. Вы должны выполнять PHP CGI от имени непривилегированного пользователя, используя suEXEC или mod_suPHP Apache . Функция suEXEC предоставляет пользователям Apache возможность запускать программы CGI под идентификаторами пользователя, отличными от идентификатора пользователя вызывающего веб-сервера. В этом примере мой php-cgi работает как пользователь phpcgi, а apache – как пользователь apache:

    # ps aux | grep php-cgi

    Примеры вывода результатов:

    phpcgi 6012 0,0 0,4 225036 60140? С 22 ноября 0:12 /usr/bin/php-cgi
    phpcgi 6054 0,0 0,5 229928 62820? С 22 ноября, 0:11 /usr/bin/php-cgi
    phpcgi 6055 0,1 0,4 224944 53260? С 22 ноября 0:18 /usr/bin/php-cgi
    phpcgi 6085 0,0 0,4 224680 56948? С 22 ноября, 0:11 /usr/bin/php-cgi
    phpcgi 6103 0,0 0,4 224564 57956? С 22 ноября, 0:11 /usr/bin/php-cgi
    phpcgi 6815 0,4 0,5 228556 61220? S 00:52 0:19 /usr/bin/php-cgi
    phpcgi 6821 0,3 0,5 228008 61252? S 00:55 0:12 /usr/bin/php-cgi
    phpcgi 6823 0,3 0,4 225536 58536? S 00:57 0:13 /usr/bin/php-cgi
    

    Вы можете использовать такой инструмент, как spawn-fcgi, для создания удаленных и локальных процессов FastCGI от имени пользователя phpcgi (сначала добавьте пользователя phpcgi в систему ):

    # spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgi

    теперь вы можете настроить веб-сервер Apache , Lighttpd и Nginx для использования внешнего php FastCGI, работающего на порт 9000 с IP-адресом 127.0.0.1.

    15. Ограничьте доступ PHP к файловой системе

    Директива open_basedir устанавливает каталоги, из которых PHP разрешен доступ к файлам, используя такие функции, как fopen () и другие. Если файл находится за пределами путей, определенных open_basdir, PHP откажется его открыть. Вы не можете использовать символическую ссылку в качестве временного решения. Например, разрешить доступ только к каталогу /var/www/html, но не к каталогам /var/www, /tmp или /etc:

    ; Ограничивает доступ процесса PHP к файлам извне 
    ; специально назначенных каталогов, таких как /var/www/html/ 
    open_basedir = "/var/www/html/" 
    ; ------------------------------------ 
    ; Пример нескольких директорий 
    ; open_basedir = "/home/httpd/vhost/itfb.com.ua/html/: /home/httpd/vhost/itfb.com.ua/html/" 
    ; ------------------------------------

    16. Путь сеанса

    Хранение сессий в PHP заключается в способе сохранения определенных данных при последующих доступах. Это позволяет вам создавать более индивидуализированные приложения и повышать привлекательность вашего веб-сайта. Этот путь определен в файле /etc/php.ini, и все данные, относящиеся к конкретному сеансу, будут храниться в файле в каталоге, указанном параметром session.save_path. По умолчанию в RHEL /CentOS/Fedora Linux установлено следующее:

    session.save_path = "/var/lib/php/session" 
    ; Установите временный каталог, используемый для хранения файлов при загрузке файла 
    upload_tmp_dir = "/var/lib/php/session"

    Убедитесь, что путь за пределами /var/www/html и не доступен для чтения или записи другими пользователями системы:

    # ls -Z /var/lib/php/

    Примеры вывода результатов:

    drwxrwx---. root apache system_u:object_r:httpd_var_run_t:s0 session

    Примечание. Параметр -Z команды ls отображает контекст безопасности SELinux, такой как режим файла, пользователь, группа, контекст безопасности и имя файла.

    17. Своевременно обновляйте PHP, программное обеспечение и ОС

    Применение исправлений безопасности – важная часть поддержки серверов Linux, Apache, PHP и MySQL. Все обновления безопасности php должны быть проверены и применены как можно скорее с помощью любого из следующих инструментов (если вы устанавливаете PHP через диспетчер пакетов): или Вы можете настроить Red Hat / CentOS / Fedora Linux для отправки уведомления об обновлении пакета yum по электронной почте. Другой вариант – применить все обновления безопасности через задание cron.

    #yum update
    #apt-get update && apt-get upgrade
    В Debian Ubuntu Linux вы можете использовать apticron для отправки уведомлений безопасности.

    18. Ограничение доступа к файлам и каталогам

    Убедитесь, что вы запускаете Apache как пользователь без полномочий root, например Apache или www. Все файлы и каталог должны принадлежать пользователю без полномочий root (или пользователю apache) в /var/www/html:

    #chown -R apache:apache /var/www/html/
    /var/www/html/ является подкаталогом, а DocumentRoot может быть изменен другими пользователями, поскольку root никогда не выполняет никаких файлов. не должны создавать там файлы.

    Убедитесь, что права доступа к файлам установлены на 0444 (только для чтения) в /var/www/html/:

    # chmod -R 0444 /var/www/html/

    Убедитесь, что все права доступа к каталогам установлены на 0445 в /var/www/html/:

    #find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}

    Настройка правильных разрешений для файлов

    Команды chown и chmod гарантируют, что ни при каких обстоятельствах DocumentRoot или файлы, содержащиеся в DocumentRoot, не будут доступны для записи пользователю веб-сервера apache. Обратите внимание, что вам нужно установить разрешения, которые наиболее подходят для модели разработки вашего веб-сайта, поэтому не стесняйтесь настраивать команды chown и chmod в соответствии с вашими требованиями. В этом примере сервер Apache запущен как пользователь apache. Это настраивается с помощью директив User и Group в вашем файле httpd.conf. Пользователь apache должен иметь доступ на чтение ко всему в DocumentRoot, но не должен иметь доступа на запись к чему-либо.

    Убедитесь, что httpd.conf имеет следующие директивы ограничений:

    <directory / >
        Options None
        AllowOverride None
        Order allow,deny
    </directory>

    Вы должны предоставлять доступ на запись только при необходимости. Некоторым веб-приложениям, таким как wordpress и другим, может потребоваться каталог кеширования. Вы можете предоставить доступ на запись в каталог кеширования, используя следующие команды:

    # chmod a+w /var/www/html/blog/wp-content/cache
    ### block access to all ###
    # echo 'deny from all' > /var/www/html/blog/wp-content/cache/.htaccess

    19. Защита от записи файлов конфигурации Apache, PHP и MySQL.

    Используйте команду chattr для защиты от записи файлов конфигурации:

    # chattr +i /etc/php.ini
    # chattr +i /etc/php.d/*
    # chattr +i /etc/my.ini
    # chattr +i /etc/httpd/conf/httpd.conf
    # chattr +i /etc/

    Команда chattr также может защитить ваш php файл или файлы в каталоге /var/www/html:

    # chattr +i /var/www/html/file1.php
    # chattr +i /var/www/html/

    20. Используйте расширения безопасности Linux (например, SELinux).

    Linux поставляется с различными патчами безопасности, которые можно использовать для защиты от неправильно настроенных или скомпрометированных серверных программ. По возможности используйте SELinux и другие расширения безопасности Linux, чтобы наложить ограничения на сеть и другие программы. Например, SELinux предоставляет множество политик безопасности для ядра Linux и веб-сервера Apache. Чтобы просмотреть все переменные защиты Apache SELinux, введите:

    # getsebool -a | grep httpd

    Примеры вывода результатов:

    allow_httpd_anon_write -> Off
    allow_httpd_mod_auth_ntlm_winbind -> Off
    allow_httpd_mod_auth_pam -> Off
    allow_httpd_sys_script_anon_write -> Off
    httpd_builtin_scripting -> на
    httpd_can_check_spam -> Off
    httpd_can_network_connect -> Off
    httpd_can_network_connect_cobbler -> Off
    httpd_can_network_connect_db -> Off
    httpd_can_network_memcache -> Off
    httpd_can_network_relay -> Off
    httpd_can_sendmail -> Off
    httpd_dbus_avahi -> на
    httpd_enable_cgi -> на
    httpd_enable_ftp_server -> Off
    httpd_enable_homedirs -> Off
    httpd_execmem -> Off
    httpd_read_user_content -> Off
    httpd_setrlimit -> Off
    httpd_ssi_exec -> Off
    httpd_tmp_exec -> Off
    httpd_tty_comm -> на
    httpd_unified -> на
    httpd_use_cifs -> Off
    httpd_use_gpg -> Off
    httpd_use_nfs -> Off

    Чтобы отключить поддержку Apache cgi, введите:

    # setsebool -P httpd_enable_cgi off

    21. Установите Mod_security

    ModSecurity – это механизм обнаружения и предотвращения вторжений с открытым исходным кодом для веб-приложений. Вы можете легко установить mod_security под Linux и защитить приложения на основе apache и php от xss и различных других атак:

    ## Несколько примеров ##
    # Не разрешать открывать файлы в /etc/
    SecFilter /etc/
     
    # Остановить SQL-инъекцию
    SecFilter "delete[[:space:]]+from"
    SecFilter "select.+from"

    22. Если возможно, запустите Apache / PHP в Chroot Jail

    Поместите PHP и / или Apache в chroot jail, это сводит к минимуму ущерб, наносимый потенциальным взломом, за счет изоляции веб-сервера в небольшом разделе файловой системы. Вы можете использовать традиционный способ настройки chroot с Apache. Тем не менее, я рекомендую FreeBSD jails, XEN виртуализация , KVM виртуализация , или виртуализация OpenVZ , которая использует концепцию контейнеров.

    23. Используйте брандмауэр для ограничения исходящих подключений

    Злоумышленник может загрузит файл локально на ваш веб-сервер с помощью таких инструментов, как wget. Используйте iptables, чтобы заблокировать исходящие соединения от пользователя apache. Модуль ipt_owner пытается сопоставить различные характеристики создателя пакетов для локально сгенерированных пакетов. Он действителен только в цепочке OUTPUT. В этом примере разрешите пользователю vivek подключаться снаружи через порт 80 (полезно для доступа к репо RHN или centos):

    /sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED  -j ACCEPT

    Вот еще один пример, который блокирует все исходящие соединения от пользователя apache, кроме нашего собственного smtp-сервера и службы API проверки спама:

    # ....
    /sbin/iptables --new-chain apache_user
    /sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    /sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user
    # allow apache user to connec to our smtp server
    /sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN
    # Allow apache user to connec to api server for spam validation
    /sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.62 --dport 80 -j RETURN
    /sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.61 --dport 80 -j RETURN
    /sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.89 --dport 80 -j RETURN
    /sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.88 --dport 80 -j RETURN
    #########################
    ## Add more rules here ##
    #########################
    # No editing below
    # Drop everything for apache outgoing connection
    /sbin/iptables --append apache_user -j REJECT

    24. Следите за своими логами и аудитом

    Проверьте файл журнала apache . Используйте команду grep / egrep :

    # tail -f /var/log/httpd/error_log

    # grep 'login.php' /var/log/httpd/error_log
    # egrep -i "denied|error|warn" /var/log/httpd/error_log
    

    Проверьте файл журнала php

    # tail -f /var/log/httpd/php_scripts_error.log
    # grep "...etc/passwd" /var/log/httpd/php_scripts_error.log

    Просмотр файлов журнала – хорошая практика безопасности php. Файлы журналов дадут вам некоторое представление о том, какие атаки совершаются на сервер, и позволят вам проверить, присутствует ли необходимый уровень безопасности или нет. Услуга auditd предназначена для системного аудита. Включите её, чтобы контролировать события SELinux, события аутентификации, модификации файлов, модификации учетной записи и т. Д. Я также рекомендую использовать стандартные « Инструменты мониторинга системы Linux » для мониторинга вашего веб-сервера.

    25. Запуск службы для каждой системы или экземпляра виртуальной машины.

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

    ///////////////
    / ISP/Router /
    //////////////
      \
       |
       Firewall
         \
          |
         +------------+
         | LB01       |
         +------------+                 +--------------------------+
                      |                 | static.lan.itfb.com.ua |
    		  +-----------------+--------------------------+
                                        | phpcgi1.lan.itfb.com.ua|
                                        +--------------------------+
                                        | phpcgi2.lan.itfb.com.ua|
                                        +--------------------------+
                                        | mysql1.lan.itfb.com.ua |
                                        +--------------------------+
                                        | mcache1.lan.itfb.com.ua|
                                        +--------------------------+
    

    Запускайте разные сетевые службы на отдельных серверах или экземплярах виртуальных машин. Это ограничивает количество других сервисов, которые могут быть скомпрометированы. Например, если злоумышленник сможет успешно использовать программное обеспечение, такое как поток Apache, он / она получит доступ ко всему серверу, включая другие службы, работающие на том же сервере (например, MySQL, сервер электронной почты и т. д.). Но в приведенном выше примере контент обслуживается следующим образом:

    1. static.lan.itfb.com.ua – используйте сервер lighttpd или nginx для статических ресурсов, таких как js / css / images.
    2. phpcgi1.lan.itfb.com.ua и phpcgi2.lan.itfb.com.ua – веб-сервер Apache с php, используемый для генерации динамического контента.
    3. mysql1.lan.itfb.com.ua – сервер базы данных MySQL.
    4. mcache1.lan.itfb.com.ua – Сервер Memcached – это очень быстрая система кеширования для MySQL. Он использует libevent или epoll (среда выполнения Linux) для масштабирования до любого количества открытых подключений и использует неблокирующий сетевой ввод-вывод.
    5. LB01 – веб-сервер nginx и обратный прокси-сервер перед веб-серверами Apache. Все соединения, поступающие из Интернета и адресованные одному из веб-серверов, маршрутизируются через прокси-сервер nginx, который может либо обрабатывать сам запрос, либо передавать его полностью или частично на основные веб-серверы. LB01 обеспечивает простую балансировку нагрузки.

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

    Со страницы проекта :

    PHPIDS (PHP-система обнаружения вторжений) – это простой в использовании, хорошо структурированный, быстрый и современный уровень безопасности для вашего веб-приложения на основе PHP. IDS не удаляет, не дезинфицирует и не фильтрует вредоносный ввод, он просто распознает, когда злоумышленник пытается взломать ваш сайт, и реагирует именно так, как вы этого хотите.

    Вы можете использовать PHPIDS для обнаружения злоумышленников и регистрации любых обнаруженных атак для последующего просмотра.

    Со страницы проекта :

    PhpSecInfo предоставляет эквивалент функции phpinfo (), которая сообщает информацию о безопасности среды PHP и предлагает предложения по улучшению. Это не замена безопасным методам разработки и не выполняется какой-либо аудит кода или приложений, но может быть полезным инструментом в многоуровневом подходе к безопасности.

    Примечание о бэкдорах PHP

    Вы можете встретить скрипты php или так называемые общие бэкдоры, такие как c99, c99madshell, r57 и так далее. Скрипт backdoor php – это не что иное, как скрытый скрипт для обхода всей аутентификации и доступа к вашему серверу по запросу. Он устанавливается злоумышленниками для доступа к вашему серверу, пытаясь остаться незамеченным. Обычно сценарий PHP (или любого другого сценария CGI) по ошибке позволяет включить код, использующий уязвимости в веб-браузере. Злоумышленник может использовать такие уязвимости для загрузки оболочек бэкдора, которые могут дать ему или ей ряд возможностей, таких как:

    • Скачать файлы
    • Загрузить файлы
    • Установить руткиты
    • Установите почтовые серверы для спама / сервер ретрансляции
    • Установите прокси-сервер, чтобы скрыть треки
    • Получить контроль над сервером
    • Получить контроль над сервером базы данных
    • Украсть всю информацию
    • Удалить всю информацию и базу данных
    • Открытые порты TCP / UDP и многое другое

    Совет: как искать бэкдоры PHP?

    Используйте команду grep в Unix / Linux для поиска оболочки c99 или r57:

    # grep -iR 'c99' /var/www/html/
    # grep -iR 'r57' /var/www/html/
    # find /var/www/html/ -name \*.php -type f -print0 | xargs -0 grep c99
    # grep -RPn "(passthru|shell_exec|system|base64_depre|fopen|fclose|eval)" /var/www/html/

    Если Вам нужна помощь в настройке безопасности веб сервера и php обращайтесь office@itfb.com.ua

    Заключение

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

  • CentOS Linux 8 станет CentOS Stream

    CEntOS – это аббревиатура от Community Enterprise Operating System, и это практически полный аналог RHEL (Red Hat Enterprise Linux). Хотя RHEL стоит денег, CentOS предлагается как бесплатный корпоративный дистрибутив Linux, поддерживаемый сообществом. Разработчики и компании, которые хорошо разбираются в Linux и не хотят платить за поддержку RHEL, всегда выбирали CentOS, чтобы сэкономить деньги и получить программное обеспечение корпоративного класса. Однако бесплатный проезд окончен. Red Hat объявила, что CentOS Linux 8, как ребилд RHEL 8, завершится в 2021 году. CentOS Stream продолжится после этой даты, выступая в качестве ответвления (разработки) Red Hat Enterprise Linux.

    История проекта CentOS

    Мы увидели первый выпуск CentOS в мае 2004 года под названием CentOS версии 2, который был получен из RHEL 2.1AS (расширенный сервер). Он мгновенно стал хитом среди любителей Linux, компаний, предоставляющих веб-хостинг, разработчиков и сообщества HPC. CentOS предлагала бесплатное программное обеспечение корпоративного уровня с самостоятельной поддержкой, а поддержка сообщества осуществляется через списки рассылки электронной почты или онлайн-форумы. Это отличный способ сэкономить на дорогостоящем контракте RHEL, когда вам не нужны контракты на поддержку или обучение.

    Что такое CentOS stream?

    CentOS stream находится между Fedora и RHEL. Другими словами, CentOS Stream – это постоянно обновляемый дистрибутив для RHEL. Он действует как шлюз между Fedora и RHEL:

    Upstream ➡️ Downstream ➡️ RHEL

    Итак, у нас есть:

    Fedora Linux ➡️ CentOS Stream ➡️ RHEL

    Проект CentOS переносит акцент на CentOS Stream, а CentOS Linux 8 завершится в 2021 году

    Из электронного письма с объявлением :

    Будущее проекта CentOS – это CentOS Stream, и в течение следующего года мы переключим внимание с CentOS Linux, ребилд Red Hat Enterprise Linux (RHEL), на CentOS Stream, которая является пре релизом к текущему выпуску RHEL. CentOS Linux 8, как ребилд RHEL 8, завершится в конце 2021 года. CentOS Stream продолжится после этой даты, выступая в качестве ответвления (разработки) Red Hat Enterprise Linux. Когда завершится поддержка CentOS Linux 8, лучшим вариантом будет переход на CentOS Stream 8, которая представляет собой небольшую дельту от CentOS Linux 8 и имеет регулярные обновления, такие как традиционные выпуски CentOS Linux. Если вы используете CentOS Linux 8 в производственной среде и обеспокоены тем, что CentOS Stream не удовлетворит ваши потребности, мы рекомендуем вам связаться с Red Hat по поводу вариантов.

    Как будут обрабатываться CVE в CentOS Stream?

    Проблемы безопасности будут устранены в CentOS Stream после их решения в текущей версии RHEL.  Хотя соглашения об уровне обслуживания не будет, инженеры Red Hat будут создавать и тестировать пакеты для этих выпусков. Так как если они не будут выпускать обновления, это может повлиять на другое программное обеспечение, которое они создают, и, следовательно, его придется переделывать. Следовательно, они заинтересованы в выпуске этих обновлений, чтобы не повлиять на их другие сборки.

    Другими словами, пользователи CentOS Streams будут тестировать RHEL раньше всех и сообщать об ошибках, но они не будут получать обновления безопасности до тех пор, пока они не будут устранены в RHEL. Очень непростая ситуация.

    Означает ли это, что CentOS Stream теперь является тестовой платформой RHEL BETA?

    Согласно FAQ :

    Нет . CentOS Stream будет получать исправления и новые функции раньше, чем RHEL. Вообще говоря, в компании ожидают, что CentOS Stream будет иметь меньше ошибок и больше функций, чем RHEL, пока эти пакеты не войдут в выпуск RHEL.

    Теперь невозможно использовать CentOS для CI, потому что вы не можете использовать лицензии разработчика RHEL. Также обратите внимание, что CentOS Stream иногда будет иметь разные ABI / API, поэтому вы больше не сможете тестировать или создавать пакеты EPEL локально.

    Может ли сообщество CentOS продолжить разработку / ребилд CentOS linux?

    Red Hat заявляет, что мы не будем давать оборудование, ресурсы или просить добровольцев работать над этим, и мы не позволим использовать бренд CentOS для такого проекта, поскольку они считают, что это размывает то, что они пытаются сделать с переориентацией на CentOS Stream. Тем не менее, код является открытым исходным кодом, и они не будут пытаться помешать кому-либо использовать его или создавать свои собственные пакеты из кода.

    Не влияет на CentOS 7

    CentoS 7 будет продолжать работать до конца жизненного цикла RHEL 7. Так что никакого влияния на пользователей CentOS 7 не произойдет.

    Заключение

    Я думаю, что это неправильный ход со стороны Red Hat. Основное преимущество CentOS – это обеспечение 100% бинарной совместимости с RHEL. На работе мы в основном использовали CentOS для тестирования, поскольку ориентируемся на RHEL, это экономит много денег. CentOS была нашей «серьезной тестовой платформой» для MySQL, PHP, Nginx, Java и многих других приложений. Когда приложение готово, мы разворачиваем его в кластере RHEL 8. Конечно, мы можем получить подписку разработчика RHEL, но только одна бесплатная подписка разработчика Red Hat может быть предоставлена ​учетной записи пользователя для таких целей. Итак, если у вас семь разработчиков, еще шесть разработчиков могут создать свои собственные учетные записи на сайте developers.redhat.com. Нам приходится иметь дело с дополнительными счетами. В итоге если разработчикам нужен бесплатный клон RHEL, то лучшим выбором теперь может быть Oracle Linux.

    Многие пользователи расстроены. Возможно, мы увидим и новый форк, время покажет. Другие дистрибутивы Linux, такие как Ubuntu или Debian LTS, увидят много новых пользователей.

    Red Hat сильно выиграла от огромного сообщества CentOS, и в этом изменении не было необходимости. Это мое честное мнение. Что вы думаете? Повлияло ли это новое изменение на вас, и если да, то какой дистрибутив Linux выберет для замены CentOS 8?

  • Как проверить, нужна ли CentOS / RHEL перезагрузка

    Как проверить, нужна ли CentOS / RHEL перезагрузка

    Я использую сервер CentOS / RHEL 6/7/8. Как мне проверить из командной строки, требуется ли перезагрузка моего хоста CentOS? Как проверить, требуется ли перезагрузка хоста под управлением CentOS Enterprise Linux после выполнения команды yum update ?

    Мы можем быстро проверить, требуется ли перезагрузка CentOS / RHEL, используя параметр командной строки . Давайте выясним, нужна ли полная перезагрузка CentOS Linux и какие службы Linux нужно перезапустить на хосте. Мы собираемся использовать команду необходимости перезапуска. Она сообщает список идентификаторов процессов программ, которые были запущены до того, как они или какой-либо компонент, который они используют, были обновлены.

    Установка утилиты, чтобы проверить, требуется ли перезагрузка CentOS / RHEL

    Выполните следующую команду yum :

    # yum whatprovides needs-restarting

    Теперь все, что вам нужно сделать, это установить yum-utils следующим образом:

    # yum install yum-utils
    Последняя проверка метаданных истечения: 0 : 00: 47 назад Вт сен   8  20 : 13 : 44  2020 .
    Зависимости разрешены.
    ================================================== =============================
     Размер репозитория версии пакета Arch
    = ================================================= =============================
    Установка:
     yum-Utils noarch 4.0.12- 3 .el8 BaseOS       66 K
    Установка зависимостей:
     DNF-плагинов-Core noarch 4.0.12- 3 .el8 BaseOS       64 к
     python3-dateutil noarch      1 : 2.6.1- 6 .el8 BaseOS      251 K
     python3-DNF-плагинов-жильный noarch 4.0.12- 3 .el8 BaseOS      203 к
     python3-six noarch 1.11.0- 8 .el8 BaseOS       38 k
     
    Сводка транзакции
    = ================================================= ============================= 
    Установка   5 пакетов
     
    Общий размер загрузки: 622 k
    Установленный размер: 1,3 м
    Это нормально [да / нет ] : да
    Скачивание пакетов:
    ( 1 / 5 ) : python3-dateutil-2.6.1- 6 .el8.noarch.rpm 1,6 Мб / с | 251 кБ 00:00    
     ( 2 / 5 ) : python3-шесть-1.11.0- 8 .el8.noarch.rpm      1,3 Мбайт / с |   38 кБ 00:00    
     ( 3 / 5 ) : DNF-плагинов одножильных-4.0.12- 3 .el8.noarch.rp 320 кбит / с |   64 Кбайт 00:00    
     ( 4 / 5 ) : ЯМ-Utils-4.0.12- 3 .el8.noarch.rpm       1,1 МБ / с |  66 кБ 00:00    
     ( 5 / 5 ) : python3-DNF-плагинов одножильных-4.0.12- 3 .el8.n 675 Кбайт / с | 203 кБ 00:00    
    -------------------------------------------------- -----------------------------
    Всего                                           898 КБ / с | 622 кБ 00:00     
    Выполняется проверка транзакции
    Проверка транзакции прошла успешно.
    Запуск теста транзакции
    Проверка транзакции прошла успешно.
    Выполняемая транзакция
      Подготовка:                                                        1 / 1  
      Установка: python3-шесть-1.11.0- 8 .el8.noarch                        1 / 5  
      Установка: python3-dateutil- 1 : 2.6.1- 6 .el8.noarch                  2 / 5  
      Установка: python3-DNF-плагинов -core-4.0.12- 3 .el8.noarch           3 / 5  
      Установка: DNF-плагинов-ядро-4.0.12- 3 .el8.noarch                   4 / 5  
      Установка: YUM-Utils-4.0.12- 3.el8.noarch                          5 / 5  
      Запуск скриптлет: YUM-Utils-4.0.12- 3 .el8.noarch                          5 / 5  
      Проверка: DNF-плагинов одножильных-4.0.12- 3 .el8.noarch                   1 / 5  
      Проверка: python3- dateutil- 1 : 2.6.1- 6 .el8.noarch                  2 / 5  
      Проверка: python3-DNF-плагинов одножильных-4.0.12- 3 .el8.noarch           3 / 5  
      Проверка: python3-шесть-1.11.0- 8.el8.noarch                        4 / 5  
      Проверка: YUM-Utils-4.0.12- 3 .el8.noarch                          5 / 5 
     
    Установлены:
      dnf-plugins-core-4.0.12- 3 .el8.noarch                                         
      python3-dateutil- 1 : 2.6.1- 6 .el8.noarch                                        
      python3-dnf-plugins-core-4.0.12- 3 .el8.noarch                                 
      python3-шесть-1.11.0- 8 .el8.noarch                                              
      yum-utils-4.0.12- 3 .el8.noarch                                                
     
    Готово!
    

    Проверка, требуется ли полная перезагрузка CentOS

    Синтаксис:

    # needs-restarting

    Как проверить, требуется ли полная перезагрузка хоста CentOS

    Вывод следующей команды покажет, требуется ли полная перезагрузка (exit code 1) или нет (exit code 0). Синтаксис:

    # needs-restarting --reboothint
    # needs-restarting -r
    # echo $? # see exit status #
    Основные библиотеки или службы не обновлялись.
    Перезагрузка, вероятно, не нужна.

    Выполните в CentOS 8 следующее, чтобы обновить установленные пакеты в целях безопасности :

    # yum -y update

    Посмотрите, требуется ли перезагрузка после установки обновлений RHEL или CentOS Linux

    Все, что вам нужно сделать, это:

    # needs-restarting -r
    Core libraries or services have been updated:
      dbus -> 1:1.10.24-14.el7_8
      systemd -> 219-73.el7_8.9
    
    Reboot is required to ensure that your system benefits from these updates.

    Вот как я проверяю, требуется ли перезагрузка моего CentOS 7:

    # needs-restarting
    # needs-restarting -r
    # needs-restarting -r >/dev/null
    # echo $?
    # [ $(needs-restarting -r >/dev/null ) ] || echo "Reboot $HOSTNAME to install kernel or core libs."


    Перезагрузите рабочий стол CentOS Linux или сервер RHEL, используя любую из следующих команд:

    # shutdown -r now
    # reboot
    # systemctl reboot

    Используйте Ansible для перезагрузки Linux-машины или сервера с playbooks

    Вывод

    Вы узнали, как определить, нужно ли перезагружать сервер после обновления CentOS или RHEL, используя параметр командной строки. Чтобы увидеть справку, введите :

    $ needs-restarting --help

     

  • Вышла CentOS Linux 8.2 (2004), как обновить?

    Вышла CentOS Linux 8.2 (2004), как обновить?

    Выпущена ОС CentOS Linux 8.2 (2004). Это дистрибутив Linux, полученный из исходного кода RHEL (Red Hat Enterprise Linux) 8.2. CentOS была создана, когда Red Hat перестала распространяться бесплатно. CentOS 8.2 предоставляет полный контроль над пакетами программного обеспечения с открытым исходным кодом и полностью адаптирован для исследовательских нужд или для работы высокопроизводительного веб-сайта без необходимости платить за лицензию. Давайте посмотрим, что нового в CentOS 8.2 (2004) и как обновить существующий сервер CentOS 8.1.1199 до 8.2.2004, используя командную строку и bash.

    Выпущен CentOS Linux 8.2 (2004)

    Из примечания к выпуску:

    Проект CentOS объявляет об общедоступности CentOS Linux 8. Фактически сразу был выпущен релиз для CentOS Linux 8 с тегом 2004. Обновления, выпущенные с момента выпуска апстрима, доступны для всех архитектур. Мы настоятельно рекомендуем применить все обновления. Этот релиз заменяет весь ранее выпущенный контент для CentOS Linux 8, и поэтому мы настоятельно рекомендуем всем пользователям обновить свои машины. Информация о различных стратегиях обновления и о том, как обновиться в примечания к релиузу.

    ВНИМАНИЕ : сделайте резервную копию. Перед тем, как обновляться, важно сделать резервную копию вашего сервера / рабочего стола CentOS. Автор не несет ответственности за сломанную систему без резервных копий.

    Как выполнить обновление до CentOS Linux 8.2 (2004)

    Проверяем текущую версию CentOS Linux 8, набрав следующую команду cat :

    # cat /etc/centos-release
    CentOS Linux, выпуск 8.1.1911 (Core)

    Проверяем текущую версию ядра Linux :

    # uname -mrs
    Linux 4.18.0-147.8.1.el8_1.x86_64 x86_64

    Как обновить CentOS 8.1 до 8.2

    Мы можем обновить существующий сервер CentOS Linux 8, просто выполнив любую из следующих команд dnf или yum :

    # dnf update

    ИЛИ

    # yum update


    В конце необходимо выполнить перезагрузку Linux с помощью команды:

    # shutdown -r now

    ИЛИ

    # reboot

    Проверка

    Убедитесь, что обновление прошло гладко, с помощью [nixmd name = ”cat”] / grep command / egrep command следующим образом:

    # uname -mrs
    # cat /etc/centos-release
    # dmesg | egrep -i 'err|warn|critical'
    # tail -f /var/log/nginx/access_log
    # tail -f /var/log/nginx/error_log

    Вывод

    Вы узнали, как обновить существующую версию CentOS Linux 8.1 до 8.2 (2004) с помощью командной строки. Также можно использовать ISO образ для полной установки.  Удачных обновлений!

  • Системный администратор интернет-магазина – кто это и что входит в обязанности?

    Системный администратор интернет-магазина участвует в создании, эксплуатации и обслуживании веб-сайтов e-commerce. Как правило, эта должность сделает вас неотъемлемым членом команды с разнообразными и уникальными обязанностями.

    Что входит в сферу задач сисадмина интернет-магазина

    Системный администратор интернет-магазина участвует во множестве различных проектов. Среди них:

    • Установка, настройка, обновление и миграция операционных систем Windows и Linux на физических и виртуальных серверах, а также работа с такими приложениями, как Interworld Commerce Exchange, Microsoft SQL Server, mySQL, IIS, PHP, Subversion, Websphere Commerce, Nagios, Endeca и другие. Все зависит непосредственно от проекта, над которым вам предстоит работать.
    •  Управление учетными записями пользователей и безопасностью в разных системах.
    •  Мониторинг и тестирование резервного копирования, состояния системы и запланированных заданий.
    •  Устранение неполадок веб-сайта и проблем с сетевым подключением. Необходимо доскональное знание Интернет-протоколов и сетевых компонентов, которые включают межсетевые экраны, коммутаторы и балансировщики нагрузки.
    •  Настройка и масштабирование производительности системы.
    •  Документирование конфигураций и изменений системы.

    Системное администрирование интернет-магазина может стать сложной задачей.  Ведь такие системы затрагивают все аспекты взаимодествия клиентов с проектом в Интернете.

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

    Вы также будете делать то, что, вероятно, еще никто не делал на проекте до Вас.

    Если вы умеете видеть несколько способов выполнения задачи и знаете, какой из них лучше всего сработает в той или иной ситуации, Вы понимаете важность структуры, но при необходимости можете работать без нее, Вы можете предвидеть, чего хотят клиенты и члены команды, можете работать в короткие сроки, но с вниманием к деталям,  Вы дважды проверяете свою работу  – поздравляем, Вы – идеальный системный администратор интернет-магазина!

    А если же вы не планируете заниматься такой деятельностью самостоятельно, ищите надежного подрядчика в сфере системного администрирования интернет-магазина – мы к вашим услугам.

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

    Мы верим в автоматизацию процедур и решение повторяющихся проблем, поэтому вам больше не нужно будет о них беспокоиться. Мы умеем исследовать проблемы и хорошо разбираемся в их устранении. Доверьтесь профессионалам – доверьтесь ITFB и напишите нам прямо сейчас!

  • Сервер дома – стоит ли использовать?

    Создание собственного веб-сайта – захватывающее занятие. Вы можете познакомиться с многочисленными программными технологиями  такими как Mongo DB, Express.js, Angular, React и Node. Если хотите разместить их на домашнем сервере, то должны знать, как создать собственный сервер дома для веб-хостинга (для размещения медиафайлов, текстовой информации и пр.). В данном посте вы узнаете какие шаги нужно сделать, чтобы не было сбоев.

    Домашний сервер своими руками

    «Прикроватный» хостинг – это сервер, который расположен у вас дома. К нему подсоединен домашний интернет-канал. Чаще всего для сервера выделяют старый компьютер, который дополнительно укомплектовывается надежными жесткими дисками. ПК может использоваться как фаервол или роутер.

    Выбираем ПК

    Как собрать сервер дома своими руками? Можете начать даже с простого Core 2 Duo. Однако если вы ожидаете большого объема трафика (более 1000 посетителей), то рекомендуется собирать ПК с мощными процессорами. Это позволит получить больше ресурса для обработки и уменьшит затраты на обновление.

    Рекомендуется перейти на i-5 5-го поколения или выше для сервера веб-хостинга среднего диапазона. Вы можете выбрать умные мобильные процессоры для уменьшения потребления энергии и тепловой отдачи. Однако они не будут обеспечивать одинаковую мощность обработки.

    В большинстве случаев домашний сервер не требует GPU. Следует отметить, что он использует GPU для поддержки графически интенсивных программ. Распространенные примеры – игровые серверы и программы Photoshop. По сравнению с ними, ваш сервер домашний будет (в большинстве случаев) сравнительно простым и не потребует GPU.

    Можно выбрать несколько разных брендов, таких как Seagate, Corsair, Kingston и т.д. Поскольку сервер работает 24/7, рассмотрите несколько планок оперативной памяти низкой мощности, чтобы компенсировать падение МГц.

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

    IP-адрес: основное требование для хостинга

    Итак, рассмотрим, что же нужно делать дальше. Основное требование для создания «прикроватного» хостинга – это установка правильного IP-адреса. Некоторые провайдеры для физических лиц не предоставляют такой услуги, и IP нужно приобретать самостоятельно по отдельным договоренностям. Иногда необходимо будет даже заключить договор с провайдером.

    Хорошо, если у вас получилось приобрести статичный IP-адрес, так как с помощью него будет намного проще подключить все доменные имена. С плавающими адресами будет это сделать сложнее, так как они меняются каждый день, и придется дополнительно подключать платные сервисы (например, Dyn.com).

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

    В поисках подкроватного сервера-соседа

    За счет применения RPT каждый пользователь может отслеживать соседей, которые используют DNS-записи для своего IP-адреса. Для настройки достаточно взять свой IP и выполнить команду whois. В результате появится диапазон адресов, предоставляемых клиентам провайдерами.

    Например, провайдер Ростелеком (ОнЛайм):

    1. Зайти на 2ip.ru.
    2. Получить личный IP.

    Обратим внимание, что это один из провайдеров, который предоставляет постоянные адреса, без дополнительных соглашений. Проверим диапазон адресов – получаем порядка 16 тысяч. Если использовать опцию –sl, мы не отсканируем активных хостов, а только увидим строчки с доменами, привязанными к IP.

    Отсканировать домены

    Отсканировав домены, можно понять, какие IP активные, а какие находятся в блок-листе. Во втором случае письма по почте до адресатов доходить не будут. Этот параметр нужно учитывать в процессе выбора сервиса для почты.

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

    Как видим, создать сервер дома для сайта, форума, не создаст ни малейшего труда, если обращать внимание на нюансы и подойти к данному вопросу серьезно. Изучите про сервер дома плюсы и минусы. Только после этого принимайте решение, нужен ли он вам, и полагаться следует на себя, или же доверить работу профессионалам?

  • Рабочие узлы Kubernetes: что это и какую структуру подобрать

    Kubernetes – это инструмент с открытым кодом. Он заботится об организации контейнеров, автоматизирует их развертывание,обеспечивает беспрерывное увеличение и снятие масштаба, балансировку загрузки и тому подобное.

    Kubernetes – это подходящая платформа для расположения микросервисных программ, динамично масштабируемых. Когда работа происходит в производственной среде, такой инструмент является наиболее желаемым и надежным для контейнерной оркестрации.

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

    С помощью облачной платформы Google (GCP) вы можете запустить Kubernetes всего несколькими кликами. Его поддерживают другие провайдеры, например, AWS и Azure. Существует число управляемых платформ Kubernetes со средами docker, kubelet и cAdvisor.

    Kubernetes узлы: как настроить под ключ

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

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

    Но организация и запуск нескольких контейнеров – тоже непростая задача. Для работы с  динамическими программами, увеличением/уменьшением количества, число контейнеров – это обычное дело. Выполнять такие задачи вручную может быть сложно и рискованно. Следовательно, нужен инструмент для оркестровки контейнеров. Поэтому необходимо использовать Kubernetes.

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

    Чтобы получить необходимую емкость кластера, существуют несколько способов. Например, необходима общая емкость кластера в 32 ГБ ОЗУ или в 8 процессорных ядер. Для этого рекомендуется установить 2 узла объемомпо 16 ГБ ОЗУ или небольшие 4 по 8, 2 процессора по 4 ядра, или 4 по 2.

    Концепция использования больших узлов или маленьких в результате дает один и тот же результат по ресурсам. Какой же вариант будет оптимальным?

    Чтобы их сравнить, разберем все преимущества того и другого способа и соберем в таблице.

    Большие Kubernetes узлы Маленькие 
    On-premise управлять проще Автоматическое масштабирование производится плавно
    Система On-premise – доступнее по цене В облаке цена практически не отличается
    Есть возможность запустить более одного приложения Наличие полноценной репликации
    Наличие оверхеда на системы-демоны меньше (все ресурсы применяются максимально эффективно) Отказоустойчивость – повышенная

    Обращаем внимание, что речь идет только о рабочих составляющих.

    Из недостатков использования нескольких крупных узлов стоит отметить такие:

    1. Предусматривается больше нагрузка pod’ов.
    2. Наличие ограничений на репликации.
    3. Последствия сбоев ощущаются тяжелее.
    4. Шаги автоматического масштабирования больше.

    Маленькие Kubernetes узлы имеют следующие недостатки:

    1. Настроить управление сложнее.
    2. Увеличение накладных расходов.
    3. Применение ресурсов менее эффективное.

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

    Например, если для того чтобы создать и запустить приложение, необходимо 10 ГБ ОЗУ, то лучше установить большие. А вот, если для него нужно поставить исходную десятикратную репликацию, рисковать и устанавливать большие Kubernetes узлы не стоит. Для такого кластера оптимальный вариант – 10 шт. по 1 ГБ. Каждая ситуация имеет свои нюансы, поэтому учитывайте все плюсы и минусы при выборе или проконсультируйтесь со специалистами.

  • 10 команд для обследования Linux

    10 команд для обследования Linux

    1. Free – получить свободную и использованную память

    У вас заканчивается память? Используйте команду free, чтобы показать общий объем свободной и используемой физической (ОЗУ) и памяти подкачки в системе Linux. Эта команда также отображает буферы и кеши, используемые ядром: однако команда free не дает информации о конфигурации памяти, максимальной памяти, поддерживаемой сервером Linux , и скорости памяти Linux . Следовательно, мы должны использовать команду dmidecode: Чтобы определить объем видеопамяти в Linux.

    free
    # human readable outputs
    free -h
    # use the cat command to find geeky details
    cat /proc/meminfo

    sudo dmidecode -t memory
    lspci | grep -i vga
    glxinfo | egrep -i 'device|memory'

    2. hwinfo – проверка оборудования

    Мы можем быстро проверить оборудование на сервере или рабочем столе Linux: в качестве альтернативы вы можете использовать команду lshw и команду inxi для отображения информации об оборудовании Linux:

    # Find detailed info about the Linux box
    hwinfo
    # Show only a summary #
    hwinfo --short
    # View all disks #
    hwinfo --disk
    # Get an overview #
    hwinfo --short --block
    # Find a particular disk #
    hwinfo --disk --only /dev/sda
    hwinfo --disk --only /dev/sda
    # Try 4 graphics card ports for monitor data #
    hwprobe=bios.ddc.ports=4 hwinfo --monitor
    # Limit info to specific devices #
    hwinfo --short --cpu --disk --listmd --gfxcard --wlan --printer

    sudo lshw -short
    inxi -Fxz

    inxi – это системный информационный инструмент для получения конфигурации системы и оборудования. Он показывает системное оборудование, ЦП, драйверы, Xorg, рабочий стол, ядро, версию (и) gcc, процессы, использование ОЗУ и множество другой полезной информации 

    3. id – информация о пользователе

    Отображение информации о пользователе и группе Linux для данного имени ПОЛЬЗОВАТЕЛЯ. Если имя пользователя не указано, покажет информацию для текущего пользователя:

    id
    
    uid = 1000 (vivek) gid = 1000 (vivek) groups = 1000 (vivek), 4 (adm), 24 (cdrom),
     27 (sudo), 30 (dip), 46 (plugdev), 115 (lpadmin), 998 (lxd)

    Посмотрите, кто вошел на ваш Linux-сервер:

    who
    who am i

    4. lsblk – список блочных устройств хранения

    Все блочные устройства Linux предоставляют буферизованный доступ к аппаратным устройствам и позволяют читать и записывать блоки в соответствии с конфигурацией. У блочного устройства Linux есть имена. Например, /dev/nvme0n1 для NVMe и /dev/sda для устройств SCSI, таких как HDD / SSD. Но запоминать их не обязательно. Вы можете легко просмотреть их, используя следующий синтаксис:

    lsblk
    # list only #
    lsblk -l
    # filter out loop devices using the grep command #
    lsblk -l | grep '^loop'
    NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    md0             9:0    0   3.7G  0 raid1 /boot
    md1             9:1    0 949.1G  0 raid1 
    md1_crypt     253:0    0 949.1G  0 crypt 
    nixcraft-swap 253:1    0 119.2G  0 lvm   [SWAP]
    nixcraft-root 253:2    0 829.9G  0 lvm   /
    nvme1n1       259:0    0 953.9G  0 disk  
    nvme1n1p1     259:1    0   953M  0 part  
    nvme1n1p2     259:2    0   3.7G  0 part  
    nvme1n1p3     259:3    0 949.2G  0 part  
    nvme0n1       259:4    0 953.9G  0 disk  
    nvme0n1p1     259:5    0   953M  0 part  /boot/efi
    nvme0n1p2     259:6    0   3.7G  0 part  
    nvme0n1p3     259:7    0 949.2G  0 part

    5. lsb_release – информация о дистрибутиве Linux.

    Хотите получить информацию, относящуюся к конкретному дистрибутиву, такую ​​как описание установленного в настоящее время дистрибутива, номер выпуска и кодовое имя:

    lsb_release -a
    Идентификатор распространителя: Ubuntu
    Описание: Ubuntu 20.04.1 LTS
    Релиз: 20.04
    Кодовое имя: focal

    6. lscpu – отображать информацию о процессорах

    Команда lscpu собирает и отображает информацию об архитектуре ЦП в удобном для чтения формате, включая различные ошибки ЦП:

    lscpu
    Architecture:                    x86_64
    CPU op-mode(s):                  32-bit, 64-bit
    Byte Order:                      Little Endian
    Address sizes:                   39 bits physical, 48 bits virtual
    CPU(s):                          12
    On-line CPU(s) list:             0-11
    Thread(s) per core:              2
    Core(s) per socket:              6
    Socket(s):                       1
    NUMA node(s):                    1
    Vendor ID:                       GenuineIntel
    CPU family:                      6
    Model:                           158
    Model name:                      Intel(R) Core(TM) i7-9850H CPU @ 2.60GHz
    Stepping:                        13
    CPU MHz:                         976.324
    CPU max MHz:                     4600.0000
    CPU min MHz:                     800.0000
    BogoMIPS:                        5199.98
    Virtualization:                  VT-x
    L1d cache:                       192 KiB
    L1i cache:                       192 KiB
    L2 cache:                        1.5 MiB
    L3 cache:                        12 MiB
    NUMA node0 CPU(s):               0-11
    Vulnerability Itlb multihit:     KVM: Mitigation: Split huge pages
    Vulnerability L1tf:              Not affected
    Vulnerability Mds:               Not affected
    Vulnerability Meltdown:          Not affected
    Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
    Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
    Vulnerability Spectre v2:        Mitigation; Enhanced IBRS, IBPB conditional, RSB filling
    Vulnerability Srbds:             Mitigation; TSX disabled
    Vulnerability Tsx async abort:   Mitigation; TSX disabled
    Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_g
                                     ood nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes x
                                     save avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep 
                                     bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d arch_capabilities
    

    ЦП также можно указать с помощью команды lshw:

    sudo lshw -C cpu

    7. lstopo – отображение топологии оборудования

    Хотите увидеть топологию сервера или рабочего стола Linux? Попробуйте: вы увидите информацию о:

    lstopo
    lstopo-no-graphics

    1. Узлы памяти NUMA
    2. общие кеши
    3. Пакеты ЦП
    4. Ядра процессора
    5. «потоки» процессора и многое другое

    8. lsusb – список USB-устройств

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

    lsusb
    # Want a graphical summary of USB devices connected to the system? #
    sudo usbview
    usbview предоставляет графическую сводку USB-устройств, подключенных к системе. Подробная информация может быть отображена путем выбора отдельных устройств в древовидной структуре.

    lspci – список устройств PCI

    Мы используем команду lspci для вывода информации о шинах PCI в системе и подключенных к ним устройствах:

    lspci

    9. timedatectl – просмотреть текущую дату и часовой пояс

    Обычно мы используем команду date для установки или получения информации о дате / времени в CLI:

    date

    однако современные дистрибутивы Linux используют команду timedatectl для запроса и изменения системных часов и их настроек, а также для включения или отключения служб синхронизации времени (NTPD и другие). :

    timedatectl
                   Местное время: вс 2020-07-26 16:31:10 IST
               Всемирное время: вс 2020-07-26 11:01:10 UTC
                     Время RTC: Вс 2020-07-26 11:01:10    
                    Часовой пояс: Азия / Калькутта (IST, +0530)  
    Системные часы синхронизированы: да                        
                  Служба NTP: активна                     
              RTC в местной ТЗ: нет 
    

    10. w – кто авторизован

    Запустите команду w в Linux, чтобы просмотреть информацию о пользователях Linux, которые в настоящее время находятся на компьютере, и их процессах:

    $ w

     

  • Администрирование облачных сервисов Microsoft Azure

    Microsoft Azure – признанный лидер как среди частных, так и среди публичных облачных решений. Это открытое облако, предоставляющее доступ к более чем 200 предварительно настроенным службам и возможности выбора технологий, которые вы хотите получить или в которые уже инвестировали. Azure предоставляет полностью интегрированный набор возможностей IaaS и PaaS, включая такие технологии, как AI и машинное обучение, аналитику, DevOps, IoT и безопасность, которые дополняютcя и интегрируются с локальными системами.

    Как опытный партнер облачных служб Microsoft Azure с большим количеством сертифицированных специалистов Microsoft в Azure, мы поможем вам использовать возможности этого облака на максимум. Скорость, масштабируемость, экономичность, данные, аналитика, искусственный интеллект, когнитивные услуги и многое другое – все от одного поставщика, оптимизированного специально для вас.

    ITFB предоставит Вам полный набор облачных сервисов, а также опыт создания инновационных решений на платформе Microsoft Azure. Мы поможем вам максимально эффективно использовать Azure для Вашего бизнеса “под ключ”.

    Безопасноть Azure

    Безопасность, интегрирована во все составляющие Azure. Вы можете надежно защитить свои данные, приложения и инфраструктуру с помощью встроенных служб безопасности. Они включают в себя беспрецедентную аналитику безопасности, помогающую выявлять быстро развивающиеся угрозы на самом раннем этапе и многоуровневую углубленную стратегию для идентификации, данных, хостов и сетей. Также возможно унифицированное управление безопасностью и расширенная защита от угроз в гибридных облачных средах.

    Сервисы Azure Stack

    Microsoft Azure Stack задал новые тренды в сфере гибридных облачных платформ с помощью настоящего гибридного облака, повышающего эффективность, гибкость и производительность. Впервые вы можете иметь общую платформу от одного поставщика для облачных и локальных дата-центров. Чтобы удовлетворить различные отраслевые потребности, мы можем предоставить полностью управляемое решение, поставляемое локально в вашем дата-центре, в удаленных локациях или размещенное на наших серверах.

    Azure AI и машинное обучение

    Машинное обучение Microsoft Azure позволяет data-специалистам готовить данные, разрабатывать эксперименты и разворачивать модели в облаке. Затем вы можете использовать контейнеры Docker для экспериментов в управляемых средах и иметь возможность применять самое современное оборудование для ускорения выполнения задач. Машинное обучение Azure включает три компонента (Workbench, Experimentation Service и Model Management Service), обучающую библиотеку, а также инструменты Visual Studio Code для AI.

    Azure SQL

    База данных SQL Azure – это реляционная облачная база данных, которая позволяет ускорить разработку приложений и использовать знакомый механизм базы данных SQL. Можно осуществить перенос базы данных SQL-сервера без изменения приложений, подключить свои данные к встроенному искусственному интеллекту и расширенным возможностям аналитики, чтобы максимально повысить производительность, защитить данные и ускорить разработку приложений. Преимущество этого подхода заключается в низких затратах на обслуживание и такой же производительности, масштабируемости и надежности облака Microsoft Azure в моделях IaaS и PaaS.

    Мы можем помочь вам объединить мощь платформы данных Microsoft, базы данных SQL Azure и расширенной аналитики, чтобы превратить аналитику мечты в реальность. Мы поможем вам качественно использовать все ваши данные, управлять ими и поддерживать их, а также получать аналитическую информацию, необходимую для ускорения вашего бизнеса.
    Когнитивные сервисы Azure
    Над чем бы Вы не работали, всегда есть возможность наполнить свои приложения, веб-сайты и ботов интеллектуальными алгоритмами, позволяющими видеть, слышать, говорить, понимать и интерпретировать потребности ваших пользователей с помощью естественных методов общения.

    Microsoft Cognitive Services использует алгоритмы обработки изображений, сложное отображение информации в сочетании с семантическим поиском, обработкой естественного языка, преобразованием речи и поиском для решения самых сложных бизнес-задач.

    Azure Databricks

    Azure Databricks – это ключевой инструмент, помогающий клиентам масштабировать ИИ и раскрывать ценность разрозненных и сложных данных. Если вы хотите быстро перейти на облачные сервисы, можно использовать Azure Databricks для перехода от проприетарных и дорогих систем к повышению операционной эффективности и новым бизнес-моделям.

    Независимо от того, на каком этапе развития находятся ваши данные и уровень ИИ, у вас есть время и возможность преобразовать ценность ваших данных с помощью платформы Azure и Azure Databricks.

    Узнайте больше о том, как мы можем помочь вам использовать постоянно расширяющиеся возможности облачных служб Azure. Обратитесь за консультацией прямо сейчас office@itfb.com.ua

  • [Кейс DevOps] Решения для E-commerce. Часть 2

    Работа web-ресурса и архитектура приложения

    У нас имеется php-приложение работающее с базами данных: MySQL и PostgreSQL. PHP-приложение работает в докер-кластере перед, которым стоит балансировщик нагрузки. Вся вышеописанная инфраструктура расположена на основной площадке и дублируется на резервной.

    Общая схема работы решения

    Для каждого разработчика поставлена задача. Программист работает над задачей в локальном окружении. Есть ветка каждого разработчика, в которой он работает. Когда разработчик готов он отправляет push-request в ветку dev.  ТимЛид одобряет push-requestы пакетом так часто, как этого требует ситуация. Изменения попадают в дев.

    По этому событию срабатывает запуск job в Jenkins,который развертывает инфраструктуру в дев  окружении, выполняет ряд автоматических тестов, результаты которых видны в Jira и почте.

    По завершению сборки  и тестирования, инфраструктура для тестирования удаляется. Если тестирование прошло неудачно, разработчики работают над исправлением проблем. Если тестирование успешно, ТимЛид делает для ветки Dev merge в ветку Test.

    По событию merge Jenkins  запускает  deploy в тестовую среду, набор автоматических тестов. В последующем в этой среде выполняется ручное тестирование QA-инженерами. Для чего ТимЛидом создается соответствующая задача. В нее линкуются задачи разработчиков, по которым выполнялись изменения.

    Из тестового окружения в продуктивное делается точно такой же merge репозитория в master ветку.Bручную ТимЛидом запускается задача в Jenkins выполняющая build и deploy «боевого»  приложения.

    Как организовать рабочее место программиста

    Для рабочего окружения разработчика предполагается  использовать уже готовые докер-контейнеры. У сотрудника есть доступ на скачивание контейнера. И каждый программист на своей рабочей машине будет получать идентичную среду. Это может быть как докер, так и другая заготовленная виртуальная машина. Но, в целом, докер может работать под любой ОС (в там числе Windows и MacOS).

    Организация тестирования

    Для тестирования кода предполагается использовать SonarQube. Его результаты будут отображаться в Jenkins. Эти тесты будут проходить на Jenkins перед развертыванием. Помимо тестов на SonarQube ,будут также тесты для функционала приложения и интеграционные тесты, которые встраиваются в само приложение.

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

    Среда проведения тестов

    Все предполагается сделать на CubrerNets от Google.Будем делать общий кластер и делить его по принадлежности к среде. На нем будет несколько окружений, в каждом будут свои контейнеры и свои сервера. Сервера приложений будут работать в  докере, автоматически балансироваться

    Развертывание среды

    Развертывание среды производится средствами Jenkins. Удаление контейнеров предыдущей среды выполняется автоматически непосредственно перед развертыванием новой.

    Тестирование нескольких веток

    Нет смысла выполнять что-то одновременно.  Дженкинс не позволит сделать это без вмешательства оператора. Да, можно запускать Job с параметрами, но я не сторонник такого подхода. Разные ветки будут тестироваться  все равно по порядку.

    Как разработчики узнают о результатах тестирования

    Дженкинс рассылает отчет о результатах тестирования на почту программистам. Также информация о состоянии сборки будет доступна в Jira. Результаты ручного тестирования QA-инженер будет оформлять в виде подзадач с описанием найденных проблем внутри задач, поставленных разработчикам.

    Чем тестирование в среде Dev отличается от тестирования в среде Test помимо наличия ручных проверок работы

    Во-первых, Test Environment отличается от Dev инфраструктурой. Dev пердназначена для проверки работы приложения, в то время как Test – для проверки корректной работы всех взаимосвязей в среде, максимально приближенной к реальной. Таким образом, на Dev мы имеем минимально необходимое количество серверов, в то время как инфраструктура Test копирует инфраструктуру, для работы приложения в одном из ЦОД.

    Во вторых, на стадии Dev  у нас коммиты в git-ветку Dev представляют собой изменения от каждого отдельного разработчика. В то время как на стадии Test коммит представляет собой уже пакет изменений от нескольких разработчиков. Следовательно на ТимЛида ложится ответственность за отбор изменений, формирующих этот пакет, поскольку на стадии теста уже затруднительно вычленение отдельного изменения из пакета. Для этого ТимЛид должен будет откатить commit в ветке Test, содержащий пакет изменений, откатить commit на ветке Dev, в котором применяется сбойное изменение, запустить Job для тестирования в среде Dev, при условии успешного выполнения предыдущего шага  -сделать commit в ветку Test, применяющий скорректированный пакет изменений, заново провести тестирование в среде Test. На практике этого не должно происходить.

    Права доступа в Jenkins

    Доступ в Jenkins есть у DevOps инженера, как у «главного дирижера». Также ТимЛид должен иметь возможность запускать Job-ы вручную.

    Как происходит обновление Production? интересуют не только технические, но и организационные подробности, то есть кто это делает и после каких согласований и одобрений?

    ТимЛид делает merge в ветку master. И вручную запускает на Jenkins job по сборке и развертыванию приложения в продуктивной среде. Jenkins работает по следующему плану:

    1.  Поскольку во время деплоя контейнеров новых версий сайт  не должен изменяться пользователями, то нужно на это время поставить заглушку и выгнать пользователей.
    2. Сделать резервную копию предыдущей версии.
    3. Выключить контейнер с приложением
    4. Внести изменения в базу из файла SQL, если они есть
    5. Поднять новый контейнер с обновленным приложением
    6. Выполнить набор автоматических тестов на работоспособность приложения
    7. Убрать заглушку  и разрешить доступ пользователям.

    Что делать, если ошибка закралась в продуктивную среду

    Такого быть не должно. Если такое случилось – это большой просчет ТимЛида. Если исправление не может быть выпущено в кратчайшие сроки, предусмотрена процедура  отката до предыдущей версии. Для этого будет репозиторий с докер-контейнерами, в котором будут храниться более старые сборки. Особо острый момент связан с откатом базы. Потому что при появлении необходимости возврата к предыдущей версии базы будут потеряны, транзакции совершенные обновленным приложением, что грозит интренет-магазину большим ущербом, как материальным, так и репутационным.

    Как работать с тестированием изменений базы

    При необходимости изменения базы разработчик формирует SQL файл с требуемыми изменениями. Этот SQL файл Jenkins накатывает поверх уже существующей базы с данными.

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

    Проверки в Test Environment прогоняются на полном наборе свежих данных, снятых с продуктивной среды в процессе развертывания тестовой. Это необходимо потому что  в Test Environment  в том числе делаются нагрузочные тесты и нужно видеть реальную картину.

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