DuckDUckGo

DuckDuckGo Поиск: 1btc

Поисковая система, которая не отслеживает вас — проще говоря, приватность!

Для администраторов системы Linux. Раздел полезен специалистам, выполняющим системные работы в Linux.
#10
PHP (рекурсивный акроним словосочетания PHP: Hypertext Preprocessor) - это распространенный язык программирования общего назначения с открытым исходным кодом. PHP специально сконструирован для веб-разработок и его код может внедряться непосредственно в HTML.

Начиная с этого момента мы будем описывать установку NGINX и PHP-FPM на Debian GNU/Linux.

Этап 1 - Анализ и подготовка окружения

Для начала нам нужно подключиться к серверу по SSH, узнать количество процессоров, обновить список пакетов и произвести установку утилит.
Код: Выделить всё
cat /proc/cpuinfo | grep processor | wc -l
Код: Выделить всё
apt update -y
Код: Выделить всё
apt install mc htop -y

Этап 2 - Установка веб-сервера Nginx и PHP

APT автоматически установит модуль PHP-FPM для NGINX и все их зависимости и, затем, активирует их. NGINX должен быть перезапущен для того, чтобы изменения вступили в силу. Например:
Код: Выделить всё
apt install nginx php-fpm php-cli php-xml php-gd php-curl php-zip php-mbstring -y
APT автоматически добавит необходимые строки в соответствующие php.ini и т.д. В зависимости от расширения, будет внесены записи типа extension=foo.so. В любом случае, чтобы эти изменения вступили в силу, будет необходимо перезапустить сервер веб-сервер.

Все конфигурационные файлы находятся в папке /etc/php, например для PHP-FPM конфигурационный файл находится по адресу /etc/php/7.3/fpm:
Код: Выделить всё
nano /etc/php/7.3/fpm/php.ini
Конфигурационный файл php.ini является основным инструментом настройки ядра PHP. Он считается каждый раз при инициализации PHP.

Далее мы рассмотрим и изменим важные настройки в файле php.ini. Чтобы избежать ошибок не добавляйте новые строки, а ищите уже существующие и изменяйте значения на нужные.

Параметр open_basedir создан для обеспечения безопасности, ограничивая доступ к открытию файлов указанием директории, выше которой этого сделать нельзя. Укажите директорию где располагаются файлы для выполнения:
Код: Выделить всё
open_basedir = /var/www/
Параметр cgi.fix_pathinfo позволит пользователям сформировать PHP запросы таким образом, чтобы запускать скрипты, к которым у них не должно быть доступа. Мы можем предотвратить такое поведение раскомментировав эту строку и изменив её значение на “0”:
Код: Выделить всё
cgi.fix_pathinfo=0
Наберите ваш адрес или домен в вашем веб-браузере. Вы должны увидеть страницу Nginx по умолчанию. Для отображения *.php-страниц вашего сайта вам необходимо настроить конфигурацию Nginx. Отредактируйте файл конфигурации веб-сервера Nginx:
Код: Выделить всё
nano /etc/nginx/nginx.conf
Для строки worker_processes auto; установите значение равное числу процессоров, например 4.
Код: Выделить всё
user www-data;
pid /run/nginx.pid;
#worker_processes auto;
worker_processes 4;
worker_rlimit_nofile 65535;

events {
	multi_accept on;
	worker_connections 65535;
}

http {
	charset utf-8;
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	server_tokens off;
	log_not_found off;
	types_hash_max_size 2048;
	client_max_body_size 16M;

	# MIME
	include mime.types;
	default_type application/octet-stream;

	# logging
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log warn;

	# load configs
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}
Затем отредактируйте файл конфигурации сайта который создается по умолчанию. Вам нужно заменить домен example.com на ваш домен:
Код: Выделить всё
nano /etc/nginx/sites-available/default
Код: Выделить всё
# subdomains redirect
server {
	listen 80;
	listen [::]:80;

	server_name *.example.com;
	return 301 http://example.com$request_uri;
}

server {
	listen 80;
	listen [::]:80;

	server_name example.com;
	#set /var/web/www;
	root /var/web/www;

	# logging
	access_log /var/log/nginx/example.com.access.log;
	error_log /var/log/nginx/example.com.error.log warn;

	# index.php
	index index.php;

	# index.php fallback
	location / {
		try_files $uri $uri/ /index.php?$args;
	}

	# security
	# add_header X-Frame-Options "SAMEORIGIN" always;
	# add_header X-XSS-Protection "1; mode=block" always;
	# add_header X-Content-Type-Options "nosniff" always;
	# add_header Referrer-Policy "no-referrer-when-downgrade" always;
	# add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;

	# . files
	# location ~ /\.(?!well-known) {
	#	deny all;
	# }

	# handle .php
	location ~ \.php$ {
	
	# 404
        try_files $fastcgi_script_name =404;

        # default fastcgi_params
        include fastcgi_params;

        # fastcgi settings
        fastcgi_pass			unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_index			index.php;
        fastcgi_buffers			8 16k;
        fastcgi_buffer_size		32k;

        # fastcgi params
        fastcgi_param DOCUMENT_ROOT		$realpath_root;
        fastcgi_param SCRIPT_FILENAME	$realpath_root$fastcgi_script_name;
        fastcgi_param PHP_ADMIN_VALUE	"/usr/lib/php/:/tmp/";
	}

	# additional config
	# favicon.ico
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    # robots.txt
    location = /robots.txt {
        log_not_found off;
        access_log off;
    }

    # assets, media
    location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
        expires 7d;
        access_log off;
    }

    # svg, fonts
    location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
        add_header Access-Control-Allow-Origin "*";
        expires 7d;
        access_log off;
    }

    # gzip
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
	
    # WordPress: deny wp-content, wp-includes php files
    location ~* ^/(?:wp-content|wp-includes)/.*\.php$ {
        deny all;
    }

    # WordPress: deny wp-content/uploads nasty stuff
    location ~* ^/wp-content/uploads/.*\.(?:s?html?|php|js|swf)$ {
        deny all;
    }

    # WordPress: deny wp-content/plugins (except earlier rules)
    location ~ ^/wp-content/plugins {
        deny all;
    }

    # WordPress: deny scripts and styles concat
    location ~* \/wp-admin\/load-(?:scripts|styles)\.php {
        deny all;
    }

    # WordPress: deny general stuff
    location ~* ^/(?:xmlrpc\.php|wp-links-opml\.php|wp-config\.php|wp-config-sample\.php|wp-comments-post\.php|readme\.html|license\.txt)$ {
        deny all;
    }
}
Создайте директорию которая у вас указана в конфигурации (/var/web/www):
Код: Выделить всё
mkdir /var/web/www
После создания директории вы должны установить права:
Код: Выделить всё
chown -R www-data:www-data /var/web
Далее требуется перезапустить Nginx и PHP службы. Вам нужно использовать инструмент командной строки systemctl.
Код: Выделить всё
systemctl restart nginx
Код: Выделить всё
systemctl restart php7.3-fpm
Отредактируйте файл в директории которую использует Nginx.
Код: Выделить всё
nano /var/web/www/index.php
Код: Выделить всё
<?php
phpinfo();
?>
Наберите IP-адрес вашего хоста в веб-браузере. Вы должны увидеть страницу c информацией о сервере. После вы можете поместить файлы вашего в сайта в директорию.

Этап 3 - Установка базы данных MySQL Community Edition

Установим систему управления базами данных MySQL Community Edition, через официальные репозитории. Прежде чем мы это сделаем, нам нужно установить необходимый пакет GnuPG, реализацию стандарта OpenPGP с открытым исходным кодом.
Код: Выделить всё
apt install gnupg -y
Откройте страницу загрузки репозитория MySQL в веб-браузере https://dev.mysql.com/downloads/repo/apt/. Репозиторий MySQL APT предоставляет простой и удобный способ установки и обновления продуктов MySQL. Найдите кнопку «Download» (Скачать) в правом нижнем углу и перейдите на следующую страницу. На этой странице вам будет предложено войти в систему или зарегистрировать учетную запись Oracle. Вы можете пропустить и вместо этого нажать ссылку «No thanks, just start my download» (Нет, спасибо, просто начните загрузку). Щелкните правой кнопкой мыши ссылку и выберите «Копировать адрес ссылки» (эта опция может быть сформулирована по-разному, в зависимости от вашего браузера).

Загрузите файл с помощью утилиты wget, не забудьте вставить только что скопированный адрес вместо выделенной части ниже:
Код: Выделить всё
wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
Внимание! Ссылка меняется с появлением новых версий пакета.

Теперь вы можете приступить к установке:
Код: Выделить всё
dpkg -i mysql-apt-config_0.8.13-1_all.deb
Обновите кэш пакетов apt, чтобы сделать новые пакеты программного обеспечения доступными:
Код: Выделить всё
apt update
После обновления вы можете использовать apt для установки последнего пакета сервера MySQL.
По умолчанию вам будет доступна установка 8.0 версии MySQL:
Код: Выделить всё
apt install mysql-server -y
MySQL с помощью команды позволяет запустить сценарий для выполнения изменений, связанных с безопасностью. Для этого вам потребуется ввести следующую команду:
Код: Выделить всё
mysql_secure_installation
После запуска сценария введите пароль пользователя root для MySQL, который вы задали во время установки и нажмите клавишу ВВОД (Enter). Далее вам потребуется ответить на ряд запросов. Давайте пройдемся по ним:

Во-первых, вам потребуется задать определенные правила надежности пароля для пользователей MySQL. Введите Y и ENTER, чтобы включить его, или просто нажмите ENTER, чтобы пропустить его. Если этот параметр включен, вам также будет предложено выбрать уровень 0–2 для строгой проверки пароля. Выберите номер и нажмите ENTER, чтобы продолжить. Рекомендуется выбрать 1.

Затем вас спросят, хотите ли вы изменить пароль root. Поскольку мы только что создали пароль при установке MySQL, мы можем смело пропустить это. Нажмите клавишу ВВОД, чтобы продолжить без обновления пароля.

На остальные запросы можно ответить да. Вам будет предложено удалить анонимного пользователя MySQL, запретить удаленный вход в систему root, удаление тестовой базы данных и перезагрузку таблиц привилегий, чтобы гарантировать, что предыдущие изменения вступили в силу должным образом. Введите Y и нажмите клавишу ВВОД для каждого запроса. Сценарий завершится после того, как будут получены ответы на все запросы. Теперь MySQL достаточно защищена.
Код: Выделить всё
mysql -u root -p
Код: Выделить всё
CREATE DATABASE database CHARACTER SET utf8 COLLATE utf8_general_ci;
Код: Выделить всё
CREATE USER 'dbadmin'@'localhost' IDENTIFIED BY '[email protected]';
Код: Выделить всё
GRANT ALL PRIVILEGES ON database.* TO 'dbadmin'@'localhost';
Код: Выделить всё
FLUSH PRIVILEGES;

Первый этап реализации атак - это сбор информации […]

Введение XMPP (Extensible Messaging and Presence[…]

По словам пресс-секретаря Роскомнадзора Вадима Амп[…]

Чтобы преобразовать несколько или все файлы в ката[…]

Не упустите самое интересное!