Запуск вебсервера на Raspberry PI3

Что нужно: сама плата raspberry pi 3, блок питания USB не менее 2,5А, клавиатура, кабель HDMI (переходник — смотрим какой у нас монитор), сетевой кабель (подключаться будем к роутеру), флешка микро сд класс 10 от 8гб.
 Скачиваем систему https://www.raspberrypi.org/downloads/
 —–
 Форматируем флешку, программой Win32DiskImager  ставим на неё образ.
 Ставим флешку в raspberri pi, подключаем клавиатуру, монитор, питание.
 Включаем.
 Наблюдаем на экране загрузку системы, вводим логон pi, пароль raspberry.
 (если нет загрузки — или плохой блок питания или образ на флешке не рабочий — горит только красный светодиод, что либо другое встречается крайне редко)
 —–
 Входим в терминал
 sudo raspi-config
 —–
 Выключаем графическую оболочку
 Boot to Desktop off
 —–
 Чтобы работать с роутером нужно дать ХостНейм
 Advanced > Hostname
 —–
 Видеопамяти оставим минимум — она серверу не важна
 Advanced > Memory Split
 оставим минимальное значение — 16мб
 —–
 Так как это будущий сервер, то нет смысла в дополнительных устройствах (клавиатура, мышь, монитор)
 Работать будем с терминала, включим возможность работы с SSH
 Advanced > SSH
 —–
 Сохраняемся, выходим из терминала
 Подключаем сетевой кабель
 Перезагрузка
 sudo reboot
 —–
 Отключаем клавиатуру и монитор. Они не нужны, работаем в консоли.
 Узнаем IP компьютера, заходим в роутер, находим raspberry, присваиваем raspberry постоянный IP (сервер все ж).
 Качаем  putty, устанавливаем, подключаемся, (помним, что копирование Ctrl+C в винд. Shift+Ins вставка в Raspberry),
 апгрейдимся
 sudo apt-get update
 sudo apt-get upgrade
 sudo apt-get dist-upgrade
 sudo rpi-update
 —–
 Пароль root желательно поменять. Меняем.
 sudo passwd root
 —–
 Посмотрим какие у нас группы
 groups
 —–
 PI имеет смысл удалить вообще (но это по желанию). Копируем все кроме PI, PI – удалим
 sudo useradd -m -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi,ЮЗЕРРР
 —–
 Так как добавили ЮЗЕРРР, то сделаем пароль для ЮЗЕРРР
 sudo passwd ЮЗЕРРР
 —–
 Отключаем SSH с пользователем PI, включим SSH с пользователем ЮЗЕРРР
 Удалим пользователя PI
 sudo deluser –remove-all-files pi
 Отменим SU,
 sudo addgroup wheel
 sudo chgrp wheel /bin/su
 sudo chmod 4550 /bin/su
 Проверим, что действительно отмена сработала
 -bash: /bin/su: Permission denied
 —–
 дадим права пользователю ЮЗЕРРР на SU
 sudo adduser ЮЗЕРРР wheel
 —–
 SU должно работать только для этого пользователя (и всех других в группе wheel, но сейчас в группе только ЮЗЕРРР)
 Редактируем
 sudo visudo
 Удаляем эту запись
 pi ALL=(ALL) NOPASSWD: ALL
 И добавляем эту: разрешаем все команды группе wheel от имени суперюзера.
 Также добавим возможность обновлений без наборов пароля
 ЮЗЗЕРР ALL=(root)NOPASSWD:/usr/bin/apt-get update,/usr/bin/apt-get upgrade
 Удостоверимся, что в группе wheel только ЮЗЕРРР
 grep ‘wheel’ /etc/group
 —–
 Защищаем SSH
 sudo nano /etc/ssh/sshd_config
 Меняем порт со стандартного 22 на нестандартный — выберем  от 1024 до 65536
 И прописываем это
 PermitRootLogin no
 Рестарт……
 service ssh restart
 —–
 Заходим в  putty, меняем порт, подключаемся.
 —–
 Создаем длинный ключ
 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
 sudo mkdir ~/.ssh
 sudo chmod 700 ~/.ssh
 sudo chown -R ЮЗЕРРР:ЮЗЕРРР ~/.ssh
 nano ~/.ssh/authorized_keys
 Вписываем одной строкой длинный ключ (ssh-rsa JHGJHH……)
 sudo chmod 600 ~/.ssh/authorized_keys
 —–
 Включаем авторизацию по длинному ключу
 sudo nano /etc/ssh/sshd_config
 меняем
 PasswordAuthentication yes
 на
 PasswordAuthentication no
 —–
 service ssh restart
 —–
 Терминал держим открытым  и открываем новый, если вход получился — значит все заработало и можно выключать, рестартовать, закрывать.
 (если единственный терминал закрыли и что то пошло не так – начинаем заниматься увлекательным занятием – подключением монитора, клавиатуры, рестартом)
 —–
 Удаляем графический интерфейс – нам нужны свободные ресурсы
 sudo apt-get remove –auto-remove –purge ‘libx11-.*’
 sudo apt-get autoremove –purge
 —–
 Блокируем вайфай и блютуз, серверу это не нужно
 sudo nano /etc/modprobe.d/raspi-blacklist.conf
 Добавим это:
 wifi
 blacklist brcmfmac
 blacklist brcmutil
 bt
 blacklist btbcm
 blacklist hci_uart
 —–
 Рестартуем и убеждаемся, что это заблокировано
 sudo reboot
 ifconfig
 Фаервол поставим
 Удостоверимся что нули
 sudo iptables -L
 sudo nano /etc/iptables.firewall.rules
 *filter
 ————–loopback
 -A INPUT -i lo -j ACCEPT
 -A INPUT -d 127.0.0.0/8 -j REJECT
 ————–Already was there
 -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
 ————–allow DHCP
 -A INPUT -p udp -m udp –sport 67 –dport 68 -j ACCEPT
 ————– LOG
 -A INPUT -m limit –limit 5/min -j LOG –log-prefix “iptables denied: ” –log-level 7
 ————– SSH
 -A INPUT -p tcp -m tcp –dport (НАШ ПОРТ SSH)-j ACCEPT
 ————– WEB
 -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
 -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
 ————– PING
 -A INPUT -p icmp –icmp-type echo-request -j ACCEPT
 ————– Outgoing
 -A OUTPUT -j ACCEPT
 ————– Drop all other inbound – default deny unless explicitly allowed policy
 -A INPUT -j DROP
 -A FORWARD -j DROP
 COMMIT
 Тестируем
 sudo iptables-restore < /etc/iptables.firewall.rules
 sudo iptables -L
 —–
 Ставим его в автозагрузку
 sudo nano /etc/network/if-pre-up.d/firewall
 !/bin/sh
 /sbin/iptables-restore < /etc/iptables.firewall.rules
 sudo chmod +x /etc/network/if-pre-up.d/firewall
 —–
 Установим сервер nginx
 sudo apt-get install nginx php5-fpm php5-curl php5-gd php5-cli php5-mcrypt php5-mysql php-apc mysql-server
 —–
 sudo mysql_secure_installation
 sudo nano /etc/nginx/nginx.conf
 Коментируем
 keepalive_timeout 65;
 И пропишем ниже такие настройки
 client_header_timeout 10;
 client_body_timeout 10;
 keepalive_timeout 10 10;
 send_timeout 10;
 Без Gzip плохо..
 Ишем
 #
 Gzip Settings
 #
 добавим данные, чтобы получить примерно это
 gzip on;
 gzip_disable “msie6”;
 ADD THEeSE
 gzip_min_length 1100;
 gzip_vary on;
 gzip_proxied any;
 gzip_buffers 16 8k;
 gzip_comp_level 6;
 gzip_http_version 1.1;
 gzip_types text/plain text/css applciation/json application/x-javascript text/xml application/xml
 application/rss+xml text/javascript images/svg+xml application/x-font-ttf font/opentype
 application/vnd.ms-fontobject;
 —–
 sudo nano /etc/nginx/fastcgi_params
 Вид должен быть примерно таким:
 fastcgi_param QUERY_STRING $query_string;
 fastcgi_param REQUEST_METHOD $request_method;
 fastcgi_param CONTENT_TYPE $content_type;
 fastcgi_param CONTENT_LENGTH $content_length;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_param REQUEST_URI $request_uri;
 fastcgi_param DOCUMENT_URI $document_uri;
 fastcgi_param DOCUMENT_ROOT $document_root;
 fastcgi_param SERVER_PROTOCOL $server_protocol;
 fastcgi_param GATEWAY_INTERFACE CGI/1.1;
 fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
 fastcgi_param REMOTE_ADDR $remote_addr;
 fastcgi_param REMOTE_PORT $remote_port;
 fastcgi_param SERVER_ADDR $server_addr;
 fastcgi_param SERVER_PORT $server_port;
 fastcgi_param SERVER_NAME $server_name;
 fastcgi_param HTTPS $https;
 PHP only, required if PHP was built with –enable-force-cgi-redirect
 fastcgi_param REDIRECT_STATUS 200;
 —–
 удостоверьтесь что
 sudo nano /etc/php5/fpm/pool.d/www.conf
 строки
 listen.owner
 listen.group
 разкоментированы
 —–
 Создадим место жительство нашего сайта
 sudo mkdir -p /data/www/Сайт.ру/
 sudo mkdir -p /data/www/Сайт.ру/logs
 sudo mkdir -p /data/www/Сайт.ру/public_html
 sudo chown -R ЮЗЕРРР:ЮЗЕРРР /data/www/Сайт.ру/
 cd /etc/nginx/sites-available
 —–
 копируем дефолтный конфиг в наш сайт
 sudo cp default Сайт.ру
 —–
 создадим ярлык на конфигурацию сайта, чтобы был виден nginx
 sudo ln -s /etc/nginx/sites-available/Сайт.ру /etc/nginx/sites-enabled/Сайт.ру
 —–
 удалим дефолтные настройки
 sudo rm /etc/nginx/sites-enabled/default
 ——
 редактируем конфигурацию
 sudo nano /etc/nginx/sites-available/Сайт.ру
 server {
 listen 80 default_server;
 listen [::]:80 default_server;
 root /data/www/Сайт.ру/public_html;
 charset utf-8;
 location = /favicon.ico { access_log off; log_not_found off; }
 location = /robots.txt { access_log off; log_not_found off; }
 error_log /data/www/Сайт.ру/logs/error.log error;
 access_log /data/www/Сайт.ру/logs/access.log;
 index index.php index.html index.htm;
 server_name Сайт.ру;
 fastcgi_intercept_errors on;
 error_page 404 /404.html;
 location = /404.html {
 }
 error_page 500 502 503 504 /500.html;
 location = /500.html {
 }
 location / {
 try_files $uri $uri/ /index.php?$query_string;
 }
 sendfile off;
 client_max_body_size 100m;
 location ~ .php$ {
 try_files $uri /index.php =404;
 fastcgi_split_path_info ^(.+.php)(/.+)$;
 fastcgi_pass unix:/var/run/php5-fpm.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }
 location ~ /.ht {
 deny all;
 }
 }
 тестирум на ошибки
 sudo nginx -t
 —–
 Рестарт сервера
 sudo /etc/init.d/nginx reload
 —–
 Проверка работы PHP
 nano /data/www/Сайт.ру/public_html/index.php
 PHP:
 
 


system
”.system(“ls -l”).”


”); echo(“exec
”.exec(“ls -l”).”


”); echo(“eval
”.eval(“exec(\”ls -l\”);”).”


”); echo(“assert
”.assert(“exec(\”ls -l\”);”).”


”); echo(“shell_exec
”.shell_exec(“ls -l”).”


”); phpinfo(); ?> sudo nano /etc/php5/fpm/php.ini
 редактируем
 open_basedir=”/data/”
 ServerTokens Prod
 ищем
 disable_functions
 и добавлякм  туда эти функции
 exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,allow_url_fopen,allow_url_include,stream_select
 sudo /etc/init.d/php5-fpm restart

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>