CentOS – Community ENTerprise Operating System
Инсталация на операционната система
Логвам се отдалечено като root през терминал от моя десктоп. По време на инсталацията аз зададох параметър системата да получи автоматично IP адрес чрез DHCP протокола
След като съм вече логнат в сървъра първата ми стъпка е да обновя на системата.
[root@server4 ~]# yum update
Инсталиране на основни пакети
[root@server4 ~]# yum install nano net-tools mc wget ntp traceroute whois nmap zip unzip
Конфигуриране на мрежов интерфейс
[root@server4 ~]# nano /etc/sysconfig/network-scripts/ifcfg-eth0
Вариант1: Автоматично получане на адрес – DHCP
TYPE="Ethernet" BOOTPROTO="dhcp" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth0" UUID="3516b1d3-4277-44fc-bb8c-ff639b9a3bbb" DEVICE="eth0" ONBOOT="yes"
Вариант2: Само статичен IPv4 адрес
TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="no" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth0" UUID="3516b1d3-4277-44fc-bb8c-ff639b9a3bbb" DEVICE="eth0" ONBOOT="yes" IPADDR="93.155.130.93" PREFIX="29" GATEWAY="93.155.130.89" DNS1="93.155.130.11" DNS2="93.155.130.14"
Вариант3: Статични IPv4/IPv6 адреси – Dual Stack
TYPE="Ethernet" HWADDR="52:54:00:c0:43:64" BOOTPROTO="none" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6ADDR="2001:470:20f1::5/64" IPV6_DEFAULTGW="2001:470:20f1::1" IPV6_AUTOCONF="no" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="eth0" UUID="3516b1d3-4277-44fc-bb8c-ff639b9a3bbb" DEVICE="eth0" ONBOOT="yes" IPADDR="93.155.130.93" PREFIX="29" GATEWAY="93.155.130.89" DNS1="93.155.130.11" DNS2="93.155.130.14" DNS3="2001:470:20::2" DNS4="2001:4860:4860::8888"
Рестартиране на правилата в мрежовата конфигурация (може да се изпълнява отдалечено)
[root@server4 ~]# systemctl restart network
Проверка на мрежата
Конфигуриране на hosts резолвера в IPv4/IPv6 Dual Stack режим
[root@server4 ~]# nano /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 93.155.130.93 server4.itservice-bg.net server4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 2001:470:20f1::5 server4.itservice-bg.net server4
[root@server4 ~]# nmtui
[root@server4 ~]# yum install epel-release
Инсталиране на Apache уеб сървър
[root@server4 ~]# yum install httpd mod_ssl
Стартиране и добавяне на услугата перманентно
[root@server4 ~]# systemctl start httpd.service [root@server4 ~]# systemctl enable httpd.service
Добавяне на протоколите HTTP/HTTPS във Firewall
[root@server4 ~]# firewall-cmd --permanent --zone=public --add-service=http [root@server4 ~]# firewall-cmd --permanent --zone=public --add-service=https [root@server4 ~]# firewall-cmd --reload
Проверка дали работи сървъра Apache отдалечено
Инсталиране на базата данни MariaDB
[root@server4 ~]# yum install mariadb-server mariadb
Стартиране и добавяне на услугата перманентно
[root@server4 ~]# systemctl start mariadb.service [root@server4 ~]# systemctl enable mariadb.service
Трябва да създадем парола на root аканта на MariaDB със скрипт mysql_secure_installation:
[root@server4 ~]# mysql_secure_installation /usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): <--ENTER OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] New password: <--yourmariadbpassword Re-enter new password: <--yourmariadbpassword Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] <--ENTER ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] <--ENTER ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] <--ENTER - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] <--ENTER ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! [root@server4 ~]#
Тест с базата данни
[root@server4 ~]# mysql -u root -p Enter password: ************* Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 5.5.52-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> quit; Bye [root@server4 ~]#
Добавяне на mysql порта 3306 във Firewall за достъп от Интернет
[root@server4 ~]# firewall-cmd --permanent --zone=public --add-service=mysql [root@server4 ~]# firewall-cmd --reload
Инсталиране на PHP и основните му пакети
[root@server4 ~]# yum install php php-mysql php-mcrypt php-gd php-snmp php-process \ php-xcache php-soap php-imap php-recode php-magickwand php-pspell php-php-gettext \ php-mbstring php-xml php-xmlrpc php-tidy php-ldap php-odbc php-devel php-pecl-apc \ perl-libwww-perl libxml2-devel mod_fcgid httpd-devel php-fpm
[root@server4 ~]# nano /etc/php.ini
memory_limit = 528M upload_max_filesize = 128M post_max_size = 64M upload_tmp_dir = /tmp
Рестартиране на сървъра Apache за да зареди модула на PHP
[root@server4 ~]# systemctl restart httpd.service
Създаваме тестов файл info.php за да тестваме php работи ли на сървъра
[root@server4 ~]# nano /var/www/html/info.php
Копираме следния код във файла
<?php phpinfo(); ?>
Съхраняваме го и посещаваме линк за проверка на сървъра
Инсталиране на phpMyAdmin
[root@server4 ~]# yum install phpMyAdmin
Трябва да редактираме конфигурационния файл в Apache на phpMyAdmin
[root@server4 ~]# nano /etc/httpd/conf.d/phpMyAdmin.conf
Като променим модула IfModule mod_authz_core.c по следния начин
<IfModule mod_authz_core.c> # Apache 2.4 # <RequireAny> # Require ip 127.0.0.1 # Require ip ::1 # </RequireAny> Require all granted </IfModule>
Също, трябва да редактираме конфигурациония файл на phpMyAdmin
[root@server4 ~]# nano /etc/phpMyAdmin/config.inc.php
Като в долния ред променим само параметъра от cookie на http
[...] $cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (config, http or cookie based)? [...]
След което задължително рестартираме Apache сървъра
[root@server4 ~]# systemctl restart httpd.service
Съхраняваме го и посещаваме линк за проверка на сървъра на адрес http://server4.itservice-bg.net/phpmyadmin
[root@server4 ~]# systemctl disable firewalld [root@server4 ~]# systemctl stop firewalld
И да се убедите след това, че вригите на защитната стена iptables са празни с командата:
[root@server4 ~]# iptables -nvL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Но аз ще продължа да ползвам тази защитна стена и ще я активирам отново:
[root@server4 ~]# systemctl enable firewalld [root@server4 ~]# systemctl start firewalld
Нека разгледаме какви услуги ни разрешава защитната стена в момента
[root@server4 ~]# firewall-cmd --list-services dhcpv6-client http ssh https mysql
Тъй като аз няма да използвам dhcpv6-client ще го махна от листата с командите:
[root@server4 ~]# firewall-cmd --remove-service=dhcpv6-client --permanent [root@server4 ~]# firewall-cmd --reload
Нека разгледаме резултата с командата firewall-cmd –list-services
[root@server4 ~]# firewall-cmd --list-services http ssh https mysql
Инсталиране на ProFTPd сървърa
[root@server4 ~]# yum install proftpd
Стартиране и добавяне на ftp услугата перманентно
[root@server4 ~]# systemctl start proftpd.service [root@server4 ~]# systemctl enable proftpd.service
Добавяне на ftp порта 21 във Firewall за достъп от Интернет
[root@server4 ~]# firewall-cmd --permanent --zone=public --add-service=ftp [root@server4 ~]# firewall-cmd --reload
[root@server4 ~]# adduser samyil [root@server4 ~]# passwd samyil Changing password for user samyil. New password: ********** Retype new password: ********** passwd: all authentication tokens updated successfully.
След като инсталирахме ftp сървъра и създадохме потребител в системата можем чрез ftp клиента Filezilla да се логнем в системата
Инсталиране на Bind/Named DNS сървърa. Bind ще го ползваме само като кешираш DNS сървър.
[root@server4 ~]# yum install bind bind-utils
Стартиране и добавяне на bind услугата перманентно
[root@server4 ~]# systemctl start named.service [root@server4 ~]# systemctl enable named.service
Добавяне на bind порта 53 във Firewall за достъп от Интернет
[root@server4 ~]# firewall-cmd --permanent --zone=public --add-service=dns [root@server4 ~]# firewall-cmd --reload
Трябва да редактираме nano /etc/named.conf и по скоро секцията options за нашите нужди по следния начин
options { listen-on port 53 { 127.0.0.1; 93.155.130.93; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { 192.168.0.0/16; 172.16.0.0/12; 10.0.0.0/8; 93.155.130.0/23; 93.155.162.0/24; 93.155.169.0/24; localhost; };
И да проверим отдалечено отговаря ли ни DNS сървъра на заявки
Конфигуриране на виртуални хостове в Apache. Първо нека се убедим от отдалечен компютър, че mysite.itservice-bg.net е асоцииран към IP адрес 93.155.130.93, операция която сме направили преди това в мастер DNS сървъра който ни обслужва
samyil@desktop:~$ ping mysite.itservice-bg.net -c 2 -n PING mysite.itservice-bg.net (93.155.130.93) 56(84) bytes of data. 64 bytes from 93.155.130.93: icmp_seq=1 ttl=62 time=3.37 ms 64 bytes from 93.155.130.93: icmp_seq=2 ttl=62 time=2.78 ms --- mysite.itservice-bg.net ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 2.786/3.079/3.373/0.298 ms
След което се връщаме в CentOS сървъра, създаваме директория където ще се намира новия ни сайт и в нея създаваме файл с разширение .html който ще ни послужи за тест, дали работи виртуалния домейн mysite.itservice-bg.net в сървъра Apache
[root@server4 ~]# mkdir /var/www/mysite.itservice-bg.net [root@server4 ~]# nano /var/www/mysite.itservice-bg.net/index.html
Копираме html кода във файла index.html
<html> <head> <title>новия сайт mysite.itservice-bg.net</title> </head> <body> <h1>Виртуалният ми хост mysite.itservice-bg.net работи !!!</h1> </body> </html>
Създаваме виртуалния домейн във конфигурационната директория на Apache сървъра (разширението .conf е задължително)
[root@server4 ~]# nano /etc/httpd/conf.d/mysite.itservice-bg.net.conf
Копираме следните директиви за Apache сървъра
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin webmaster@example.com ServerName mysite.itservice-bg.net ServerAlias www.mysite.itservice-bg.net DocumentRoot /var/www/mysite.itservice-bg.net/ ErrorLog /var/log/httpd/mysite.itservice-bg.net.error.log CustomLog /var/log/httpd/mysite.itservice-bg.net.access.log combined </VirtualHost>
Трябва обаче да направим още един конфигурационен файл за да запазим страницата по подразбиране на Apache сървъра защото ако вместо домейн име се напише IP адрес в браузера ще ни се покаже първия сайт което не е много приятно особено ако този сайт вече е с вдигнат сертификат.
[root@server4 ~]# nano /etc/httpd/conf.d/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog /var/log/httpd/error.log CustomLog /var/log/httpd/access.log combined </VirtualHost>
Рестартираме Apache за да влязат промените в сила
[root@server4 ~]# systemctl restart httpd.service
Проверка с любим браузер имаме ли сайт
Инсталиране на WordPress
Отиваме на официалната страница на WordPress за да изтеглим последната актуална версия на софтуера
С rm -rf изтриваме текущата директория на сайта ни, с wget изтегляме WordPress, с unzip разархивираме в директорията /var/www на Apache сървъра, с mv преименуваме директория както си беше с името на сайта и с chown променяме собственика на файловете в директорията да е Apache сървъра.
[root@server4 ~]# rm -rf /var/www/mysite.itservice-bg.net/ [root@server4 ~]# wget -c https://bg.wordpress.org/wordpress-4.7.3-bg_BG.zip [root@server4 ~]# unzip wordpress-4.7.3-bg_BG.zip -d /var/www/ [root@server4 ~]# mv /var/www/wordpress/ /var/www/mysite.itservice-bg.net [root@server4 ~]# chown -R apache:apache /var/www/mysite.itservice-bg.net/
Връщаме се в phpmyadmin и създаваме база с име mysite без съдържание която ще ни е необходима за WordPress инсталацията ни
Първата страничка на WordPress ще ни прекара през съветник за да можем да инсталираме системата
Копираме съдържанието в указания файл и продължаваме инсталацията
[root@server4 ~]# nano /var/www/mysite.itservice-bg.net/wp-config.php
Готово !!! Имаме инсталиран WordPress.
Конфигуриране на сайта със SSL сертификат на Letsencrypt
[root@server4 ~]# install python-certbot-apache [root@server4 ~]# certbot --apache
certbot –apache е скрипт на Letsencrypt който ще ни създаде няколко въпроса за да настрой автоматично конфигурацияра в Apache, нашият сайт да притежава валиден SSL сертификат. Важно е да се знае, че като изискване е сайта да има и www пред домейна
След като вече имаме сертификат на сайта той трябва да се обновява по някакъв начин. Един от вариантите е да се копира командата certbot renew в /etc/crontab например, като Letsencrypt ни препоръчва то да не е повече от два пъти на ден, аз ще направя проверката да е всеки ден в 4:20 сутринта.
[root@server4 ~]# nano /etc/crontab
02 4 * * * root certbot renew
systemctl restart crond.service
[root@server4 ~]# nano /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
[root@server4 ~]# reboot
[root@server4 ~]# rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm [root@server4 ~]# yum -y install yum-utils [root@server4 ~]# yum update
[root@server4 ~]# yum update Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.us.leaseweb.net * epel: fedora-epel.mirrors.tds.net * extras: mirror.us.leaseweb.net * remi-safe: mirrors.neterra.net * updates: mirror.us.leaseweb.net No packages marked for update
Много полезен топик! Благодаря!
Така и не разбрах какво ще ме накара да използвам стотинка ос пред дебиан например. Сички викат сигурност и стабилност а хакнати сайтове колко искаш ? С Дебилиана си ми е добре – научил съм му бъговете вече.
Мисля, че сам си отговаряш на въпроса, че написаното по горе не е адресирано до теб.
А може ли да се инсталира php 7 ? Имам впредвид не със емнайсет хиляди команди а с yum ?
Може
Много полезно, благодаря 🙂
@Zxel, някой се е потрудил да напише една чудесна статия а ти тролиш без никакъв смисъл !!! По думите ти разбирам, че нито Debian нито CentOS са ти ясни но анонимно като се направиш на капацитет се чувстваш по могъщ, нали ?
Много добре написано стъпка по стъпка, благодаря. Ще се радвам да виждам все повече такива статии 🙂