Установка веб-сервера apache в centos 7

Настраиваем время

Узнать, какое время на сервере можно с помощью команды date:

# date

Чтобы сменить часовой пояс, необходимо выбрать подходящий файл часовой зоны в /usr/share/zoneinfo. В случае, если у вас часовой пояс Москвы, выполните следующее:

# mv /etc/localtime /etc/localtime.bak
# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Либо можете воспользоваться специальной утилитой, которая входит в комплект CentOS 7. Делает она ровно то же самое:

# timedatectl set-timezone Europe/Moscow

В CentOS 7 есть утилита для синхронизации времени chrony. В стандартной установке она должна быть установлена в системе, в минимальной ее нет. Если у вас она не стоит, то устанавливайте вручную:

# yum install chrony

Запускаем chrony и добавляем в автозагрузку:

# systemctl start chronyd
# systemctl enable chronyd

Проверяем, нормально ли запустился:

# systemctl status chronyd
● chronyd.service - NTP client/server
 Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
 Active: active (running) since Fri 2016-08-05 00:33:09 MSK; 52min left
 Main PID: 667 (chronyd)
 CGroup: /system.slice/chronyd.service
 └─667 /usr/sbin/chronyd

Aug 05 00:33:09 centos.local systemd: Starting NTP client/server...
Aug 05 00:33:09 centos.local chronyd: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +DEBUG +ASYNCDNS +IPV6 +SECHASH)
Aug 05 00:33:09 centos.local chronyd: Generated key 1
Aug 05 00:33:09 centos.local systemd: Started NTP client/server.
Aug 05 00:33:26 centos.local chronyd: Selected source 85.21.78.91
Aug 05 00:33:26 centos.local chronyd: System clock wrong by -3595.761368 seconds, adjustment started
Aug 04 23:33:30 centos.local chronyd: System clock was stepped by -3595.761368 seconds

Все в порядке, сервис работает. После запуска он автоматически синхронизирует время.

Для синхронизации времени вы можете воспользоваться более привычно программой, которая присутствует практически во всех unix дистрибутивах — ntp. Устанавливаем утилиту синхронизации времени ntp в CentOS:

# yum install ntp

Разово синхронизируем время:

# /usr/sbin/ntpdate pool.ntp.org

Если ntpdate не работает, посмотрите материал, может это ваш случай. Запустим демон синхронизации и запишем его запуск в автозагрузку:

# systemctl start ntpd
# systemctl enable ntpd
ln -s '/usr/lib/systemd/system/ntpd.service' '/etc/systemd/system/multi-user.target.wants/ntpd.service'

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

Не используйте одновременно оба демона синхронизации времени — chrony и ntp. Выберите какой-нибудь один. Лично я не вижу в них разницы, сам чаще всего ставлю привычный ntp.

Установка и базовая настройка vsFTPd

Обновляем систему:

yum update

Запускаем процесс установки:

yum install vsftpd

После открываем на редактирование следующий файл:

vi /etc/vsftpd/vsftpd.conf

И приводим его к следующему виду:

anonymous_enable=NO
chroot_local_user=YES

allow_writeable_chroot=YES
pasv_min_port=40900
pasv_max_port=40999

* первые две строчки мы редактируем: anonymous_enable разрешает подключение анонимных пользователей, поэтому мы отключаем такую возможность; chroot_local_user запрещает выход за пределы домашней директории пользователя. Третью, четвертую и пятую строки мы дописываем — allow_writeable_chroot разрешает подключения пользователю, у которого есть права на запись в корневую директорию; это диапазон динамических портов, которые будут использоваться vsFTPd

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

Отключаем SELinux следующими командами:

setenforce 0

sed -i «s/SELINUX=enforcing/SELINUX=disabled/» /etc/selinux/config

* первая команда отключит SELinux, вторая — отключит его автозапуск после перезагрузки.

Добавляем правила в брандмауэр для корректной работы FTP-сервера:

firewall-cmd —permanent —add-port=20-21/tcp

firewall-cmd —permanent —add-port=40900-40999/tcp

firewall-cmd —reload

Разрешаем автозапуск vsFTPd и запускаем его:

systemctl enable vsftpd

systemctl start vsftpd

По умолчанию, к vsFTPd нельзя подключиться с использованием учетной записи root. Поэтому нужно использовать другую пользовательскую запись или создать новую следующей командой:

useradd ftpuser -d /var/www -s /sbin/nologin

* ftpuser — имя учетной записи; /var/www — домашняя директория; /sbin/nologin запрещает локальный вход в систему.

Задаем пароль новому пользователю:

passwd ftpuser

Базовая настройка закончена — можно пробовать подключаться к FTP-серверу.

Установка phpmyadmin

Устанавливаем phpmyadmin со всеми зависимостями:

# yum install -y phpmyadmin

После установки в каталоге с конфигурациями httpd /etc/httpd/conf.d появляется файл phpMyAdmin.conf. Сохраним сразу на всякий случай оригинальный файл, перед тем как начать его редактировать:

# cp /etc/httpd/conf.d/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf.orig

По-умолчанию, в конфиге закрыт доступ к панели управления для всех адресов, кроме 127.0.0.1. Чтобы открыть доступ для всех, приведите файл к следующему виду:

# mcedit /etc/httpd/conf.d/phpMyAdmin.conf
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
  AddDefaultCharset UTF-8
  Require all granted
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
  Require all granted
</Directory> 

<Directory /usr/share/phpMyAdmin/libraries/>
  Order Deny,Allow
  Deny from All
  Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
  Order Deny,Allow
  Deny from All
  Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
  Order Deny,Allow
  Deny from All
  Allow from None
</Directory>

Я удалил все лишнее из файла, в том числе настройки, которые относились к версии apache 2.2. Перезапускаем httpd:

# systemctl restart httpd

Заходим по адресу http://ip-адрес-сервера/phpmyadmin. Вы должны увидеть страницу логина:

В этот момент я понял, что мне некуда логиниться. На тестовом сервере, где я готовлю статью, нет mysql. Если у вас та же ситуация, что у меня, установите mariadb. Подробно об я рассказал в статье, посвещенной настройке web-сервера, все подробности можете там посмотреть. Сейчас быстро ставим базу данных и запускаем ее:

# yum install -y mariadb mariadb-server
# systemctl enable mariadb.service
# systemctl start mariadb
# /usr/bin/mysql_secure_installation

После этого можно еще раз окрыть web интерфейс phpmyadmin и зайти под учетной записью рута. Откроется главная страница панели с общей информацией о сервере:

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

Создание пользователя

Для каждого клиента необходимо создавать отдельного пользователя Linux, к которому будут привязаны виртуальные домены и базы данных. Это позволит изолировать ресурсы одного пользователя от другого и осуществить квотирование.

1. Создаем пользователя и группу Linux:

groupadd u10001 -g 10001

useradd u10001 -u 10001 -g virtwww -G u10001 -d /var/www/u10001 -m -k /dev/null

* где u10001 — имя пользователя/группы; 10001 — идентификатор пользователя в системе; virtwww — основная группа, которой будет принадлежать пользователь; опция -m создаст каталог пользователя; -k /dev/null — не использовать скелет для наполнения профиля файлами.

2. Создаем базу данных и пользователя mysql:

mysql -uroot -p -e «CREATE DATABASE b10001 DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;» -e «GRANT ALL PRIVILEGES ON b10001.* TO m10001@localhost IDENTIFIED BY ‘mysqlpass’;»

* где b10001 — название базы; m10001 — пользователя базы данных; mysqlpass — пароль доступа к mysql.

3. Создаем FTP-пользователя. Процесс зависит от того, где мы решили хранить пользователей.

Если храним в файле:

ftpasswd —passwd —file=/etc/proftpd.d/ftpd.passwd —name=f10001 —uid=10001 —gid=10001 —home=/var/www/u10001 —shell=/sbin/nologin

Если в базе данных:

mysql -uroot -p -e «INSERT INTO proftpd.users (username, password, uid, gid, homedir) values (‘f10001’, encrypt(‘ftpass’), 10001, 10001, ‘/var/www/u10001’);»

* f10001 — имя FTP-пользователя; ftpass — пароль пользователя.

4. Задаем права на каталоги:

chmod 4710 /var/www/u10001

chmod 4470 /home/mysql/b10001

chown u10001:virtwww /var/www/u10001

chown u10001:mysql /home/mysql/b10001

* где /home/mysql — путь, по которому хранятся базы.

Управление репозиториями в CentOS

Управление пакетами и репозиториями осуществляет утилита YUM (Yellowdog Updater, Modified) — менеджер RPM-пакетов, использующийся в дистрибутивах: RHEL, SentOS, Scientific Linux. В его задачи входит: поиск, установка, удаление пакетов, обновление системы.

Процесс установки пакетов происходит после выполнения команды — yum install packagename. После ввода команды менеджер пакетов проверяет наличие конфигурационных файлов «*.repo», эти файлы содержат информацию о репозиториях и хранятся в директории /etc/yum.repos.d. Во время проверки YUM получает всю необходимую информацию, указывающую откуда загружать пакет и какие зависимости имеют к нему отношение. После чего происходит установка пакета.

Конфигурационные файлы репозиториев содержат следующие параметры:

  • name — имя репозитория, может быть любым.
  • baseurl — ссылка указывающая на репозиторий. Может быть вида: ftp://link, http://link, https://link, если репозиторий размещен в сети интернет, или file://path, если репозиторий размещен локально.
  • enabled — указывает на активацию репозитория при выполнении обновления. Может иметь следующие значения, 1 — если подключен, 0 — если отключен.
  • gpgcheck — включить или выключить проверку сигнатуры GPG. Может иметь следующие значения, 1 — проверять, 0- не проверять.
  • gpgkey — ссылка на ключ GPG.
  • exclude — список исключаемых пакетов.
  • includepkgs — список включаемых пакетов.
  • mirrorlist — вместо ссылки на конкретный адрес репозитория, может использоваться ссылка на список адресов из которых будет выбран нужный адрес.

Подключение репозиториев в CentOS

Добавить репозиторий в CentOS можно несколькими способами. Можно создать файл «.repo» в директории /etc/yum.repos.d или установить rpm-пакет с информацией о репозитории. Если rpm-пакет отсутствует, то добавлять приходится ручками, создавая конф. файл репозитория.

Для просмотра списка активных репозиториев выполняют команду — yum repolist

yum repolist

# Выхлоп:
repo id                                 repo name                                                              status
base/7/x86_64                           CentOS-7 - Base                                                         9,007
epel/x86_64                             Extra Packages for Enterprise Linux 7 - x86_64                         10,580
extras/7/x86_64                         CentOS-7 - Extras                                                         390
updates/7/x86_64                        CentOS-7 - Updates                                                      2,469
repolist: 22,446

# repo id - id репозитория
# repo name - имя репозитория
# status - количество пакетов

Удаление репозиториев в CentOS

Для удаления репозиториев в системе должен быть установлен пакет yum-utils.

yum install yum-utils -y

Допустим мы хотим удалить из системы репозитории REMI и ELRepo, для этого надо узнать «repo id» при помощи команды yum repolist.

yum repolist

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.yandex.ru
 * elrepo: elrepo.0m3n.net
 * epel: mirror.23media.de
 * extras: mirror.yandex.ru
 * remi-safe: mirror.23media.de
 * updates: mirror.yandex.ru
repo id                           repo name                                                                    status
base/7/x86_64                     CentOS-7 - Base                                                               9,007
elrepo                            ELRepo.org Community Enterprise Linux Repository - el7                          162
epel/x86_64                       Extra Packages for Enterprise Linux 7 - x86_64                               10,580
extras/7/x86_64                   CentOS-7 - Extras                                                               390
remi-safe                         Safe Remi's RPM repository for Enterprise Linux 7 - x86_64                    1,144
updates/7/x86_64                  CentOS-7 - Updates                                                            2,469
repolist: 23,752

Удалим указанные репозитории.

yum-config-manager --disable remi-safe --disable elrepo

Команда скорее отключает указанные репозитории, чем удаляет их. Она выставляет значение параметра enabled равным 0. Файлы репозиториев «.repo» останутся на месте. Если выполнить команду yum repolist, то репозитории будут недоступны.

yum repolist

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.yandex.ru
 * epel: fedora-mirror01.rbc.ru
 * extras: mirror.yandex.ru
 * updates: mirror.yandex.ru
repo id                                 repo name                                                              status
base/7/x86_64                           CentOS-7 - Base                                                         9,007
epel/x86_64                             Extra Packages for Enterprise Linux 7 - x86_64                         10,580
extras/7/x86_64                         CentOS-7 - Extras                                                         390
updates/7/x86_64                        CentOS-7 - Updates                                                      2,469
repolist: 22,446

Теперь нужно обновить кэш YUM.

yum clean all
yum makecache

Для полного удаления репозиториев следует удалить их конфигурационные файлы.

# Переходим в каталог /etc/yum.repos.d
cd /etc/yum.repos.d

# Удаляем файлы
rm -f elrepo.repo remi-php70.repo remi-php71.repo remi-safe.repo remi.repo

Настраиваем firewall

Сейчас мы быстро и просто настроим firewall. В CentOS 7 в качестве фаервола выступает iptables. По-умолчанию он запущен. Чтобы посмотреть текущие правила, нужно ввести команду:

# iptables -L -v -n

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

В 7-й версии CentOS для управления iptables разработан новый инструмент под названием firewalld и все управление производится через него. Я не понял зачем это сделали, и не могу сказать, удобнее с ним стало или нет. По мне, так удобнее использовать одни и те же наработки по iptables. Мигрируя от сервера к серверу и от дистрибутива к дистрибутиву, я просто редактирую скрипт настроек фаервола.

Но CentOS зачем-то придумали firewalld, в Ubuntu стоит ufw, но суть одна и та же — это утилиты для конфигурирования iptables, который один и тот же во всех дистрибутивах. Я привык управлять iptables через самописный скрипт, который переношу от сервера к серверу и редактирую под конкретные потребности. Этим скриптом я и поделюсь. Так что для начала остановим и отключим firewalld:

# systemctl stop firewalld
# systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'

Установим утилиты для iptables:

# yum -y install iptables-services

Включим автозапуск iptables:

# systemctl enable iptables

Теперь создадим файл /etc/iptables_rules.sh следующего содержания:

#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=149.154.71.205

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Рзрешаем пинги
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Открываем порт для DNS
#$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
# Открываем порт для NTP
#$IPT -A INPUT -i $WAN -p udp --dport 123 -j ACCEPT

# Логирование
# Все что не разрешено, но ломится отправим в цепочку undef

$IPT -N undef_in
$IPT -N undef_out
$IPT -N undef_fw
$IPT -A INPUT -j undef_in
$IPT -A OUTPUT -j undef_out
$IPT -A FORWARD -j undef_fw

# Логируем все из undef

$IPT -A undef_in -j LOG --log-level info --log-prefix "-- IN -- DROP "
$IPT -A undef_in -j DROP
$IPT -A undef_out -j LOG --log-level info --log-prefix "-- OUT -- DROP "
$IPT -A undef_out -j DROP
$IPT -A undef_fw -j LOG --log-level info --log-prefix "-- FW -- DROP "
$IPT -A undef_fw -j DROP

# Записываем правила
/sbin/iptables-save  > /etc/sysconfig/iptables

Делаем файл c правилами исполняемым и запускаем:

# chmod 0740 /etc/iptables_rules.sh
# /etc/iptables_rules.sh

Проверяем, применились ли правила:

# iptables -L -v -n

При каждом запуске файла с правилами iptables, все изменения записываются в файл /etc/sysconfig/iptables и применяются при загрузке системы.

Ограничение доступа ssh по группам и пользователям домена

На текущий момент подключиться к серверу может любой пользователь домена. Исправим это и разрешим подключаться только пользователям из группы gr_linux_adm. Для этого правим конфиг /etc/sssd/sssd.conf, добавляя туда новые параметры.

# mcedit /etc/sssd/sssd.conf
access_provider = simple
simple_allow_users = [email protected]
simple_allow_groups = [email protected]

Обращаю внимание, что параметр access_provider у вас уже будет установлен в другое значение. Надо это изменить

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

# systemctl restart sssd

Теперь подключиться по ssh к серверу сможет только пользователь домена user55 и все члены группы gr_linux_adm.

Для разбора полетов и решения проблем нужно использовать лог файл — /var/log/secure. Вот пример успешного подключения:

Jul 12 18:10:44 xs-centos7-test sshd: pam_sss(sshd:auth): authentication success; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.1.3.221 user=lin-user
Jul 12 18:10:44 xs-centos7-test sshd: Accepted password for lin-user from 10.1.3.221 port 51063 ssh2
Jul 12 18:10:45 xs-centos7-test sshd: pam_unix(sshd:session): session opened for user lin-user by (uid=0)

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

Jul 12 18:08:28 xs-centos7-test sshd: pam_sss(sshd:auth): authentication success; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.1.3.221 user=vzap
Jul 12 18:08:28 xs-centos7-test sshd: pam_sss(sshd:account): Access denied for user vzap: 6 (Permission denied)
Jul 12 18:08:28 xs-centos7-test sshd: Failed password for vzap from 10.1.3.221 port 51057 ssh2
Jul 12 18:08:28 xs-centos7-test sshd: fatal: Access denied for user vzap by PAM account configuration 

Здесь видно, что идентификация пользователя прошла корректно, но доступ к серверу запрещен.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: