Настройка SELinux, включение, отключение. Selinux настройка centos 7
Basic Setup / Первые настройки CentOS 7
Установить Net-Tools: yum -y install net-tools
Установить VMware-Tools:yum -y install open-vm-tools; service vmtoolsd start; systemctl enable vmtoolsd.service Отключаем FirewallD: systemctl stop firewalld; systemctl disable firewalld Устанавливаем и настраиваем IPtables и Wget: yum -y install iptables-services wget; systemctl enable iptables; systemctl start iptables
Подключиение репозиториев:
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E '%{rhel}').noarch.rpm
sudo yum install https://$(rpm -E '%{?centos:centos}%{!?centos:rhel}%{rhel}').iuscommunity.org/ius-release.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm; rpm -Uvhhttp://repo.webtatic.com/yum/el7/webtatic-release.rpm
https://support.rackspace.com/how-to/install-epel-and-additional-repositories-on-centos-and-red-hat/
Установка NTP:yum -y install ntp; cp /usr/share/zoneinfo/Europe/Moscow /etc/localtimecrontab -e0 0 * * * /sbin/ntpdate ru.pool.ntp.orgsystemctl enable ntpd
Устанавливаем количество ядер системы не более 2х:sed -i 's/installonly_limit=5/installonly_limit=2/g' /etc/yum.conf
Обновление системы:
yum -y update
Всё сразу:setenforce 0; sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux; yum -y install net-tools; yum -y install open-vm-tools; service vmtoolsd start; systemctl enable vmtoolsd.service; systemctl stop firewalld; systemctl disable firewalld; yum -y install iptables-services wget; systemctl enable iptables; systemctl start iptables; rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm; rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm; rpm -Uvh http://repo.webtatic.com/yum/el7/webtatic-release.rpm; sed -i 's/installonly_limit=5/installonly_limit=2/g' /etc/yum.conf; yum -y update
Создание шаблона под VMWARE
Начальная настройка Centos 7
Проверяем, что за система у нас
Увидим текущую версию ОС.
Обновляем ее:
Устанавливаем сетевой пакет
yum install net-tools.x86_64
yum install net-tools.x86_64 |
Чтобы работала команда nslookup:
Сразу для работы с текстовыми файлами (конфигами) устанавливаем Midnight Commander:
И сразу же для удобства, меняет расцветку синтаксиса:
# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax |
Сеть
Отключаем SELinux, для этого открываем файл на редактирование с помощью Midnight Commander:
mcedit /etc/sysconfig/selinux
mcedit /etc/sysconfig/selinux |
И у SELINUX ставим параметр disabled.
После отключения SElinux необходимо перезагрузиться или выполнить команду:
— тогда изменение выполнится без перезагрузки.
Firewall
Фаерволом в CentOS 7 является iptables. И для управления им в центос придумала другая утилита — Firewalld. Я ею не пользуюсь, поэтому останавливаю ее и удаляю из автозагрузки, т.к. удобнее пользоваться самописным скриптом, который кроссплатформенный между разными линуксами:
systemctl stop firewalld systemctl disable firewalld
systemctl stop firewalld systemctl disable firewalld |
Установливаем утилиты для iptables:
yum -y install iptables-services
yum -y install iptables-services |
Включаем iptables в автозагрузку:
systemctl enable iptables
systemctl enable iptables |
Посмотреть текущие настройки можно командой:
Теперь создадим текстовый файл (скрипт) для iptables:
mcedit /etc/iptables_rules.sh
mcedit /etc/iptables_rules.sh |
И заносим туда:
#!/bin/bash # # Объявление переменных export IPT="iptables" # Интерфейс который смотрит в интернет (свой ip-адрес) export WAN=eth0 export WAN_IP=99.99.99.99 # Очистка всех цепочек 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 # Открываем порт для NGINX $IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT # Открываем порт для Apache(httpd) $IPT -A INPUT -i $WAN -p tcp --dport 8080 -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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
#!/bin/bash # # Объявление переменных export IPT="iptables"
# Интерфейс который смотрит в интернет (свой ip-адрес) export WAN=eth0 export WAN_IP=99.99.99.99
# Очистка всех цепочек 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 # Открываем порт для NGINX $IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT # Открываем порт для Apache(httpd) $IPT -A INPUT -i $WAN -p tcp --dport 8080 -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
chmod 0740 /etc/iptables_rules.sh |
и запускаем его:
При каждом запуске скрипта, все изменения записываются в файл /etc/sysconfig/iptables и применяются при загрузке системы.
Проверить, применились ли правила можно командой:
SSH
По умолчанию, сервис работает на 22 порту. Для безопасности его лучше сменить на любой другой свободный. Открываем конфиг
mcedit /etc/ssh/sshd_config
mcedit /etc/ssh/sshd_config |
Нужно раскомментировать строку Port 22 и заменить значение 22 на любое другое, например 99999. Сохраняем.
Теперь нужно добавить в настройки фаервола наш новый порт в разрешенные. Открываем скрипт для iptables
mcedit /etc/iptables_rules.sh
mcedit /etc/iptables_rules.sh |
Находим строку
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT |
И вместо 22 пишем 99999. Сохраняем и запускаем этот скрипт!
Перезапускаем службу
Можно проверить на каком порту висит сейчас sshd
netstat -tulpn | grep sshd tcp 0 0 0.0.0.0:99999 0.0.0.0:* LISTEN 1799/sshd tcp6 0 0 :::99999 :::* LISTEN 1799/sshd
netstat -tulpn | grep sshd tcp 0 0 0.0.0.0:99999 0.0.0.0:* LISTEN 1799/sshd tcp6 0 0 :::99999 :::* LISTEN 1799/sshd |
видим 99999, значит все ок.
Добавление репозиториев
Добавим популярный репозиторий EPEL
yum install epel-release -y
yum install epel-release -y |
Настройка bash_history (по желанию)
Все подробно расписал товарищ в этой статье.
Самое основное. Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка).
Нам нужно отредактировать файл .bashrc, который находится в том же каталоге, что и файл с историей.
Добавляем в него следующие строки:
export HISTSIZE=10000 export HISTTIMEFORMAT="%h %d %H:%M:%S " PROMPT_COMMAND='history -a' export HISTIGNORE="ls:ll:history:w"
export HISTSIZE=10000 export HISTTIMEFORMAT="%h %d %H:%M:%S " PROMPT_COMMAND='history -a' export HISTIGNORE="ls:ll:history:w" |
Чтобы изменения применились, нужно разлогиниться и залогиниться снова.
Отключаем флуд сообщений в /var/log/messages
cd /etc/rsyslog.d && mcedit ignore-systemd-session-slice.conf
cd /etc/rsyslog.d && mcedit ignore-systemd-session-slice.conf |
Туда заносим:
if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then stop
if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then stop |
Сохраняем и перезапускаем:
systemctl restart rsyslog
systemctl restart rsyslog |
Мониторинг — iftop, atop, htop, lsof
iftop показывает в режиме реального времени загрузку сетевого интерфейса
Диспетчеры задач:
lsof поможет узнать какие файлы используются теми или иными процессами:
По идее все.
Обычно после этого требуется настроить веб-сервер, к примеру на связке nginx+apache. Статья описывающая эту связку.
Спасибо статье: https://serveradmin.ru/centos-7-nastroyka-servera
kilobax.ru
Настройка SELinux для Apache/Nginx в Unix/Linux
И так, я за свои 5 лет администрирования, никогда не настраивал SELinux — я его просто выключал. Но всегда бывает первый раз и сейчас, пришло время разобраться как же устроен и как с ним работать.
Многие из вас, уже сталкивались со следующей проблемой: При попытки использовать httpd сервер ( как пример) с включенным SELinux на борту — апач не работал вообще ( и не спроста, т.к SELinux блокирует пакеты).
Сейчас я, воспроизведу проблему. Для начала, установлю httpd сервер ( на примере CentOS):
$ sudo yum install httpd -yИли, проверим имеется ли он в ОС:
$ rpm -qa | grep httpdМой вывод такой:
httpd-2.2.15-54.el6.centos.x86_64 httpd-tools-2.2.15-54.el6.centos.x86_64Видим что апач установлен. Проверим, работает ли SELinux, для этого служат несколько команд ( но речь не об этом), я возьму одну из них:
# getenforce EnforcingЭто означает что он включен на сервере.
PS: вот чтиво как можно выключить SELinux:
Как отключить SELinux на CentOS
Запускаем апач:
$ service httpd restartЗапустить команду для просмотра процессов httpd:
# ps -eZ | grep httpd unconfined_u:system_r:httpd_t:s0 3182 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 3185 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 3186 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 3187 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 3188 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 3189 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 3190 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 3191 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 3192 ? 00:00:00 httpdКонтекст SELinux, связанный с процессами httpd, является unconfined_u: system_r: httpd_t: s0. Вторая последняя часть контекста, httpd_t, является типом. Тип определяет домен для процессов и тип для файлов. В этом случае процессы httpd выполняются в домене httpd_t.
Политика SELinux определяет, как процессы, запущенные в ограниченных доменах, такие как httpd_t, взаимодействуют с файлами, другими процессами и системой в целом. Файлы должны быть помечены правильно, чтобы разрешить доступ httpd к ним. Например, httpd может читать файлы, типом httpd_sys_content_t, но не может их писать, даже если разрешения Linux разрешают доступ на запись. Например разрешение доступа к скрипта сети, позволяя httpd обращаться к файловым системам NFS и CIFS, а httpd разрешено выполнять сценарии Common Gateway Interface (CGI).
Когда вы настраиваете /etc/httpd/conf/httpd.conf для того, чтобы httpd прослушивал порт, отличный от TCP-порта 80, 443, 488, 8008, 8009 или 8443, команда semanage port должна использоваться для добавления нового номера порта Конфигурация политики SELinux. В следующем примере демонстрируется настройка httpd для прослушивания порта, который не определен в конфигурации SELinux для httpd.
Для начала, останавливаем апач:
# service httpd stop && service httpd statusПри использовании semanage, у меня возникли проблемы, я получил следующую ошибку:
-bash: semanage: command not foundИсправление:Исправляем «semanage: command not found» в Unix/Linux
Запустим команду для просмотра httpd портов SELinux ( которые дают возможность httpd, прослушивать порты):
# semanage port -l | grep -w http_port_t http_port_t tcp 80, 443, 488, 8008, 8009, 8443Видим что стандартные порты используются и работают. Но если нас интересует кастомный проброс определенного порта? Давайте рассмотрим пример. Редактируем конфиг апача:
$ sudo vim /etc/httpd/conf/httpd.confИ настраиваем прослушивание порта ( предположим, что нужно прослушивать порт 54321)
Находим строку:
Listen 80Или:
Listen 127.0.0.1:80И приводим к виду:
Listen 127.0.0.1:12345Или ( как я сделал себе)
Listen 12345Запускаем службу апач:
# service httpd restartИ, получаем ошибку:
Starting httpd: (13)Permission denied: make_sock: could not bind to address 127.0.0.1:12345 no listening sockets available, shutting down Unable to open logs [FAILED]Смотрим лог:
[root@localhost ~]# cat /var/log/messages| grep SELinux Jan 19 19:29:22 localhost kernel: SELinux: Initializing. Jan 19 19:29:22 localhost kernel: dracut: Loading SELinux policy Sep 22 16:31:28 localhost kernel: SELinux: Initializing. Sep 22 16:31:28 localhost kernel: dracut: Loading SELinux policy Sep 22 16:36:52 localhost kernel: SELinux: Initializing. Sep 22 16:36:52 localhost kernel: dracut: Loading SELinux policy Apr 1 23:37:57 localhost kernel: SELinux: Initializing. Apr 1 23:37:57 localhost kernel: dracut: Loading SELinux policy Apr 4 10:16:06 localhost kernel: SELinux: Initializing. Apr 4 10:16:06 localhost kernel: dracut: Loading SELinux policy Apr 4 11:04:50 localhost kernel: SELinux: Initializing. Apr 4 11:04:50 localhost kernel: dracut: Loading SELinux policy Apr 5 01:07:48 localhost kernel: SELinux: Initializing. Apr 5 01:07:48 localhost kernel: dracut: Loading SELinux policy Apr 5 01:46:00 localhost kernel: SELinux: Initializing. Apr 5 01:46:00 localhost kernel: dracut: Loading SELinux policy [root@localhost ~]#И так, нужно разрешить 12345 порт в SELinux, чтобы чтобы httpd мог прослушивать его 12345, как используется в этом примере, требуется следующая команда:
# semanage port -a -t http_port_t -p tcp 12345Теперь, пробуем запустить снова апач:
# service httpd restart Starting httpd: [ OK ]Теперь, когда SELinux был сконфигурирован так, чтобы httpd мог прослушивать нестандартный порт (в нашем примере TCP 12345), httpd успешно запускается на этом порту.Чтобы доказать, что httpd прослушивает и передает на 12345 TCP-порт , откройте telnet-соединение с указанным портом и выполните команду HTTP GET, как показано ниже:
[root@localhost ~]# telnet localhost 12345 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. HTTP/GET/1.1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>501 Method Not Implemented</title> </head><body> <h2>Method Not Implemented</h2> <p>HTTP/GET/1.1 to / not supported.<br /> </p> <hr> <address>Apache/2.2.15 (CentOS) Server at localhost.localdomain Port 80</address> </body></html> Connection closed by foreign host. [root@localhost ~]#Как-то так!
Создание политик.
Создайте политику, чтобы назначить httpd_sys_content_t контекст для /webapps папки, а также для всех дочерних каталогов и файлов:
# semanage fcontext -a -t http_sys_content_t "/webapps(/.*)?"Создайте политику, чтобы назначить httpd_log_t контекст для ведения логов:
semanage fcontext -a -t httpd_log_t "/webapps/logs(/.*)?"Создайте политику, чтобы назначить httpd_log_t контекст для использования кешей:
semanage fcontext -a -t httpd_cache_t "/webapps/cache(/.*)?"Разрешаем чтение и запись (ReadWrite)
Apache теперь имеет право использовать наши собственные каталоги. Тем не менее, он не имеет доступа для чтения ко всему. Если у вашего приложения есть файлы или каталоги ( например WordPress), то можно создать правило и разрешить чтение-запись для определенных файлов\папок.
Следующему будет присвоен readwrite для Apache и он сможет писать или изменять данные:
# semanage fcontext -a httpd_sys_rw_content_t "/webapps/app1/public_html/uploads(/.*)?"Создайте политику, чтобы назначить httpd_sys_rw_content_t контекст для файла с конфигурацией WordPress (wp-config.php):
# emanage fcontext -a httpd_sys_rw_content_t "/webapps/app1/public_html/wp-config.php"Применяем SELinux политики
Наши политики созданы и готовы к применению. Чтобы все проделанные действия заработали, необходимо перечитать политики самого SELinux:
# restorecon -Rv /webappsВсе работает, а я завершаю свою статью «Настройка SELinux для Apache/Nginx в Unix/Linux».
linux-notes.org
Заметки сисадмина: Изменения в CentOS 7
Задача: развернуть выделенную площадку для размещения нескольких веб-сайтов. Рассматриваем процесс с нуля, разделяя на несколько этапов.
В качестве операционной системы для будущей хостинг-площадки вполне рационально выбрать операционную систему Linux, диструбутив Centos. Свой выбор на Centos остановим, так как дистрибутив стабильный, прекрасно обновляется, поддерживает работу с пакетами. А самое главное - является вариантом Red Hat Enterprise Linux. Удивительные вещи, которые ждут нас в седьмой версии:- Отказ от iptables, теперь вместо него firewall
- Отказ от chkconfig - теперь вместо него systemd
- Переход с MySQL к MariaDB.
Установка операционной системы
На данный момент актуальной является CentOS 7, ориентированный исключительно на архитектуру x86_64. Скачиваем образ ISO и устанавливаем с диска, но можно поставить и с флэшки. В процессе установки выбираем вариант Desktop: он достаточно лёгкий (не будет тащить за собой кучу лишних пакетов), а кроме того позволит на первых порах отлаживать систему в графическом режиме. В будущем установим дополнительные пакеты вручную.Аппаратная часть
В нашем распоряжении оказался уже морально устаревший двухядерный компьютер на базе процессора E3300, имеющий 2 Гб оперативной памяти. Как показала практика, его вполне достаточно.Разделы диска
На шаге Installation Destination нам предлагается выбрать диск для установки системы. Если ничего не трогать (Automatically Configure Partitioning), то инсталлятор самостоятельно справится с разбиением на разделы. Считаю, такие важные вещи нельзя пускать на самотёк, они требуют вмешательства; поэтому наш выбор - I will configure partitioning. Видим диалоговое окно, показанное ниже. Распределяем место на диске.- Нам необходимо выделить более 82 Мб для раздела boot.
- Всё оставшееся место за исключением размера оперативной памяти отводим под корневой раздел.
- Наконец, остаток отдаём под файл подкачки, помечая его swap.
Отладка
Первое, что надо сделать – отключить систему безопасности SELinux. Например, включенный selinux не позволит подключаться по протоколу ftp к серверу, если в будущем поставим vsftpd, клиент будет получать сообщения об ошибке500 OOPS: cannot change directory:/home/username В CentOS отключение SELinux выглядит просто. Открываем файл конфигаmcedit /etc/sysconfig/selinux меняем значениеSELINUX=disabled перезагружаемсяreboot Сделано, теперь нас не будут поджидать сюрпризы в будущем. Скептикам, ратующим за безопасность системы, сразу сообщаю, что наш сервер будет надёжно защищён настройкой firewall (пришёл на смену iptables). В соответствии с функциональным назначением нашего сервера настраиваем firewall, открывая для общего доступа порты 80 и 443:firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https Перезапускаем:firewall-cmd --reload Проверяем, что yum установлен. Если его нет, придётся вручную тащить пакет mirror.centos. org/centos/7/os/x86_64/Packages/ и устанавливать через менеджер пакетов. Устанавливаем необходимые пакеты, которые непосредственно отвечают за функционирование веб-сервера. В нашем случае это apache, mysql, php (для комплекса LAMP) или nginx, mysql, php (для комплекса LEMP), а возможно, и всё вместе. Например, установка веб-сервера apache выглядит следующим образом:yum -y install httpd httpd-devel Запускаем службу, добавляем в автозагрузку, проверяем результат:systemctl start httpd.service systemctl enable httpd.service Если потребуется перезапустить apache после каких либо настроек (или после установки php), пригодится командаsystemctl restart httpd.service Привычная утилита setup теперь отсутствует. Убеждаемся, что все службы будут стартовать при запуске системы с помощью systemctl is-enabled служба. Варианты использования systemctl:Остановка службы | systemctl stop httpd.service |
Запуск службы | systemctl start httpd.service |
Перечитать файл конфигурации | systemctl reload httpd.service |
Перезапуск службы | systemctl restart httpd.service |
Перезапуск службы, если она уже запущена | systemctl try-restart httpd.service |
Проверка статуса службы | systemctl status httpd.service |
Добавить в автозапуск | systemctl enable httpd.service |
Исключить из автозапуска | systemctl disable httpd.service |
Проверка присутствия в автозапуске | systemctl is-enabled httpd.service |
Вывести список служб | systemctl list-unit-files --type=service |
- Single-user text mode (without networking)
- Not used (user-definable)
- Full multi-user text mode
- Not used (user-definable)
- Full multi-user graphical mode (with an X-based login screen)
- Reboot
- Настроить mysql, однако необходимо заметить, что компания Red Hat предпочитает на данный момент альтернативную базу данных MariaDB
- Настроить высокопроизводительный веб-сервер (например, связку nginx+apache), или оставить только службу httpd
- Настроить php
vmog.blogspot.com
Блог о веб-разработке
Всем привет, давайте поговорим немного о SELinux, но перед этим немного определения для тех, кто не слышал что это вообще такое. SELinux сокращение от анг. слова Security-Enhanced Linux что означает Linux с улучшенной безопасностью. Иными словами это реализация системы принудительного контроля доступа, которая способна функционировать параллельно с классической избирательной системой контроля доступа. Разница в том, что в SELinux посредством определенных политик определяются права доступа самой системой, в свою очередь избирательная система контроля доступа выполняет разделение доступа процессов к ресурсам, основываясь на правах пользователя, для простого понимания это права rwx на трех уровнях – владелец, группа-владелец и остальные пользователи.После небольшого описания давайте попробуем рассмотреть некоторые команды и параметры SELinux. Наши примеры будут демонстрироваться на операционной системе Linux CentOS 6. Пожалуй, первое и наверное самое востребованное это команды для проверки статуса SELinux.
/usr/sbin/getenforceили
/usr/sbin/sestatusВозвращаемые значения для команды getenforceEnforcing – указывает на то что SELinux активирован и правила политики принудительные;Permissive – указывает на то что SELinux активирован, но правила политики не принудительные enforced и используются только правила DAC;Disabled – указывает на то, что SELinux отключен.
Возвращаемые значения для команды sestatusДанная команда возвращает помимо статуса SELinux так же используемую политику SELinux, пример:
$ /usr/sbin/sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 23 Policy from config file: targetedSELinux status: enabled – обозначает что SELinux включен;Current mode: enforcing – обозначает что SELinux включен в принудительном enforced режиме;Policy from config file: targeted – обозначает что используется политика SELinux targeted.
Включение SELinuxВключается / отключается SELinux в операционной системе в файле конфигурации/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Опция SELINUX=disabled обозначает, что SELinux отключен. Перед тем как запустить SELinux необходимо выполнить некоторые манипуляции.1. Проверить инсталляцию пакетов SELinux
rpm -qa | grep selinux rpm -q policycoreutils rpm -qa | grep setroubleshootТак же убедитеть в том, что установлены следующие пакеты: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins. Пакеты policycoreutils-gui, setroubleshoot, selinux-policy-devel, и mcstrans опциональны.Отсутствующие пакеты можно установить с помощью команды (под пользователем root)
yum install package-name2. Каждый файл файловой системы должен быть промаркирован контекстом SELinux перед запуском. До этого момента ограниченным доменам может быть отказано в доступе, что может привести к некорректной загрузке операционной системы. Ситуация исправляется выставлением опции SELINUX=permissive в конфигурационном файле /etc/selinux/config.
3. Маркировка файлов произойдет во время следующей перезагрузки системы. Метки для всех файлов выставляются в контексте SELinux в ходе процесса. В последней строке каждый символ * обозначает 1000 промаркированных файлов. Длительность процесса зависит от количества файлов в системе, а так же скорости работы дисков.
*** Warning -- SELinux targeted policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ****4. В случае когда политика SELinux принудительно не назначена, и работа происходит в расширительном режиме, то запреты пишутся в лог как действия, которые были бы запрещены в принудительном режиме. Убедитесь что SELinux не запрещает действия во время последней загрузки системы, для этого выполните команду
grep "SELinux is preventing" /var/log/messagesВывод должен быть пустой, это означает что всё в порядке, и SELinux не запрещает действия.5. После того как вы убедились что сообщений о запретах в логах нет, установите параметр SELINUX в enforcing (файл /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=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted6. После этого операционную систему следует перезапустить. После перезапуска нужно проверить возвращаемое значение Enforcing командой getenforce.
$ /usr/sbin/getenforce Enforcing7. Для просмотра отображений между SELinux и пользователями системы, выполните команду
/usr/sbin/semanage login –lВывод команды должен быть такого плана:
Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023Есть некоторые особенности, которые так же следует учитывать. При отключенном SELinux созданные пользователями файлы не маркируются, вследствие чего, при переводе в состояние enforcing могут появляться проблемы. Маркировка файлов произойдет по изменению опции с disabled на permissive/enforcing режим, таким образом, будет предотвращена проблема с появлением немаркированных файлов.
yournet.kz
Настройка сервера на VDS с виртуализацией KVM CentOS 7
У меня имеется только что установленный сервер с CentOS 7 на VDS с виртуализацией KVM.
Я расскажу о том, как сделать базовую настройку сервера для использования его в любом качестве на ваше усмотрение. Это может быть web сервер, vpn сервер, сервер мониторинга.
Я расскажу о начальных настройках системы CentOS, которые повышают безопасность и удобство работы с сервером. Отмечу, что в 7-й версии системы произошли некоторые изменения по сравнению с предыдущими версиями.
Содержание:
- Введение
- Начальная настройка CentOS 7
- Указываем сетевые параметры
- Настраиваем firewall
- Настройка SSH в CentOS 7
- Настраиваем время
- Добавление репозиториев
- Установка iftop, atop, htop на CentOS 7
- Заключение
- Видео по настройке CentOS 7
Введение
Для настройки практически любого сервера требуется выполнить ряд стандартных шагов, которые мало чем отличаются в различных ситуациях. Какой бы функционал вы не готовили, вам придется настроить правильное время и включить его автообновление. Без установки сетевых настроек я вообще не представляю работу современного сервера. В голову не приходит ни один пример. Один и тот же набор настроек практически на автомате выполняется после установки. Своими наработками по этой теме я хочу поделиться с вами — то, что я в первую очередь настраиваю на новоиспеченном сервере centos.
Начальная настройка CentOS 7
Итак, у нас имеется:
# uname -aLinux zeroxzed.ru 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/LinuxПервым делом обновим базовую систему:
# yum -y updateДля удобства администрирования, я всегда устанавливаю Midnight Commander, или просто mc:
# yum -y install mcДальше нам пригодятся сетевые утилиты. В минимальной настройке вы будете удивлены, когда наберете команду:
# ifconfigИ увидите ответ:
-bash: ifconfig: command not foundПо крайней мере я, когда впервые это увидел, прилично удивился. Подумал, что ошибся в написании команды, перепроверил все несколько раз, но без результата. Оказалось, что надо отдельно установить пакет для выполнения ifconfig и прочих сетевых утилит.
Вместо ifconfig в CentOS 7 теперь утилита ip. Я не понимаю, зачем пилить отдельные программы для управления сетевыми настройками, если ifconfig и так отлично справляется с задачей. К тому же мне всегда нравилось, что в различных дистрибутивах линукс все примерно одинаковое. С помощью ifconfig можно настроить сеть не только в linux, но и в freebsd. Это удобно. А когда в каждом дистрибутиве свой инструмент это неудобно. Так что предлагаю установить привычный ifconfig.
Сделаем это:
# yum -y install net-tools.x86_64Теперь, чтобы у нас работали команды nslookup или, к примеру, host необходимо установить пакет bind-utils. Если этого не сделать, то на команду:
# nslookupБудет вывод:
-bash: nslookup: command not foundТак что устанавливаем bind-utils:
# yum -y install bind-utilsОтключаем SELinux. Его использование и настройка отдельный разговор. Сейчас я не буду этим заниматься. Так что отключаем:
# mcedit /etc/sysconfig/selinuxменяем значение SELINUX=disabled
Чтобы изменения вступили в силу, перезагружаемся:
# rebootУказываем сетевые параметры
Теперь произведем настройку сети в CentOS. Для этого открываем файл /etc/sysconfig/network-scripts/ifcfg-eth0
# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0В поле IPADDR вводим свой адрес, в NETMASK маску сети, в GATEWAY шлюз, DNS1 адрес днс сервера. Сохраняем файл и перезапускаем сеть для применения настроек:
# /etc/init.d/network restartНастраиваем firewallОчень подробно вопрос настройки iptables в CentOS 7 я рассмотрел отдельно. Сейчас мы быстро и просто настроим 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 firewalldrm '/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=eth0export 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
# Открываем порт для 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
В принципе, добавить нечего, в файле даны все комментарии. В таком виде, логи всего заблокированного будут писаться в файл /var/log/messages и записей там будет очень много. Так что в обычной работе эти строки нужно закомментировать, и использовать только во время отладки. Более подробное описание правил и примеры настроек firewall в случае, когда ваш сервер является шлюзом локальной сети, приведено по ссылке в начале раздела.
Делаем файл c правилами исполняемым и запускаем:
# chmod 0740 /etc/iptables_rules.sh# /etc/iptables_rules.shПроверяем, применились ли правила:
# iptables -L -v -nПри каждом запуске файла с правилами iptables, все изменения записываются в файл /etc/sysconfig/iptables и применяются при загрузке системы.
Настройка SSH в CentOS 7
Дальше внесем некоторые изменения в работу ssh для увеличения безопасности. По-умолчанию, сервис работает на 22 порту и если все оставить как есть, то мы получим огромное количество попыток авторизоваться. Боты сканят непрерывно интернет и подбирают пароли к ssh. Чтобы обезопасить себя от сканов простых ботов, изменим порт, на котором работает ssh. Можно выбрать любой пятизначный номер, это не принципиально. От автоматического сканирования это защитит.
Повесим демон ssh на 25333 порт. Для этого редактируем файл /etc/ssh/sshd_config
# mcedit /etc/ssh/sshd_configРаскомментируем строку Port 22 и заменим значение 22 на 25333.
Так же я обычно разрешаю подключаться по ssh пользователю root. Мне так удобнее. Проблем с этим у меня никогда не возникало. Если вы считаете, что это не безопасно, не трогайте эту настройку. Чтобы разрешить пользователю root подключаться по ssh, раскомментируйте строку PermitRootLogin yes.
Сохраняем файл. Теперь обязательно изменяем настройки iptables, добавляем в разрешенные подключения вместо 22 порта 25333. Если этого не сделать, то после перезапуска sshd мы потеряем удаленный доступ к серверу. Итак, открываем /etc/iptables_rules.sh и меняем в строке
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT22 на 25333 и исполняем файл.
Наше текущее соединение не оборвется, так как оно уже установлено, но заново подключиться по ssh к 22 порту уже н получится.
Перезапускаем sshd:
# systemctl restart sshdПроверяем какой порт слушает sshd:
# netstat -tulpn | grep sshdtcp 0 0 0.0.0.0:25333 0.0.0.0:* LISTEN 1799/sshdtcp6 0 0 :::25333 :::* LISTEN 1799/sshdЕсли вывод такой же как у меня, то все в порядке, теперь к ssh можно подключаться по 25333 порту.
Настраиваем время
Узнать, какое время на сервере можно с помощью команды date:
# dateЧтобы сменить часовой пояс, необходимо выбрать подходящий файл часовой зоны в /usr/share/zoneinfo. В случае, если у вас часовой пояс Москвы, выполните следующее:
# mv /etc/localtime /etc/localtime.bak# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtimeУстанавливаем утилиту синхронизации времени в CentOS:
# yum install -y ntpРазово синхронизируем время:
# /usr/sbin/ntpdate pool.ntp.orgЕсли ntpdate не работает, посмотрите материал, может это ваш случай. Запустим демон синхронизации и запишем его запуск в автозагрузку:
# systemctl start ntpd# systemctl enable ntpdln -s '/usr/lib/systemd/system/ntpd.service' '/etc/systemd/system/multi-user.target.wants/ntpd.service'Теперь наши часы будут автоматически синхронизироваться с сервером времени.
Более подробно об этой теме написано отдельно в моем материале — установка, настройка и синхронизация времени в CentOS.
Добавление репозиториев
Для инсталляции различного софта необходимо подключить репозитории в CentOS. Наиболее популярные это EPEL и rpmforge, поэтому добавим их. Сначала ставим EPEL. С ним все просто, он добавляется из стандартного репозитория:
# yum -y install epel-releaseУстанавливаем rpmforge:
# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt# yum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpmУстановка iftop, atop, htop на CentOS 7
И напоследок добавим несколько полезных утилит, которые могут пригодиться в процессе эксплуатации сервера.
iftop показывает в режиме реального времени загрузку сетевого интерфейса, может запускаться с различными ключами, не буду останавливаться на этом подробно, в интернете есть информация на эту тему. Ставим:
# yum -y install iftopИ два интересных диспетчера задач, я чаще всего пользуюсь htop, но иногда пригодится и atop. Ставим оба, сами посмотрите, разберетесь, что вам больше нравится, подходит:
# yum -y install htop# yum -y install atopВот как выглядит htop:
На этом у меня все. Базовая настройка CentOS 7 закончена, можно приступать к установке и настройке основного функционала.
Видео по настройке CentOS 7
Заключение
Мы выполнили некоторые начальные шаги по настройке, которые я обычно делаю при подготовке сервера. Я не претендую на абсолютную истину, возможно что-то упускаю или делаю не совсем верно. Буду рад разумным и осмысленным комментариям и замечаниям с предложениями.
Полезно после настройки сразу же подключить сервер к системе мониторинга. Либо настроить ее, если у вас еще нет.
За информацию спасибо: http://serveradmin.ru
info-business.pro
Установка и первоначальная настройка сервера CentOS 6 и 7
CentOS 6CentOS 6, если её ставить в минимальной конфигурации, ставится уж очень аскетично. В базовую систему даже не входит пакет man, не говоря уже о многих других полезных утилитах. Поэтому решил написать небольшую шпаргалку, что нужно поставить, чтобы получить работоспособный и минимально-настроенный сервер.
Итак, начинаем установку (всё написанное делалось на CentOS 6.5 x64):
выбираем английский язык
когда просят ввести имя хоста, вводим и нажимаем кнопку "Configure Network"
в настройках адаптера включаем "Connect automatically" и настраиваем параметры IPv4
(если этого здесь и сейчас не сделать, то после перезагрузки система будет с отключенной и не настроенной сетью, и придётся править конфигурационные файлы вручную)
выбираем Minimal install
после окончания установки и первой перезагрузки:yum updatereboot
ставим минимально-необходимый на сервере набор пакетов: yum -y install man mc telnet bind-utils bzip2 unzip zip wget psmisc
настраиваем синхронизацию времени: yum -y install ntpchkconfig --level 345 ntpd onservice ntpd start
выключаем для начала брендмауэр, чтобы он не мешал настройке всего прочего; потом его можно при необходимости настроить и включитьchkconfig ip6tables offchkconfig iptables offservice iptables stopservice ip6tables stopможно ещё выключить selinux, написав в файле /etc/selinux/configSELINUX=disabledон тоже может помешать настройке сервера
Добавляем дополнительные репозитории EPEL и rpmforge:yum -y install epel-releaserpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txtyum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
yum updateставим оттуда ещё несколько полезных пакетов yum install bash-completion htop atop iftop
В принципе, это всё, но можно ещё для большей секурности добавить пользователя с правами администратора и отключить возможность root-логина через ssh:useradd administratorusermod -a -G wheel administratorили сразу одной командой:useradd -G wheel administrator
passwd administrator
в файле /etc/sudoers убираем комментарий в строке:# %wheel ALL=(ALL) ALL
в файле /etc/ssh/sshd_config убираем комментарий в строке:#PermitRootLogin yesи меняем yes на no
Всё. Теперь по ssh можно зайти только пользователем administrator и админить сервер уже через sudo.Дальше ставятся все остальные необходимые на сервере сервисы и пакеты, в зависимости от назначения этого сервера.
CentOS 7
В CentOS 7 много чего поменялось, но в плане первоначальной настройки сервера изменения не большие.Инсталлятор вполне интуитивно-понятный. Главное, как и с 6 не забыть сразу настроить сеть. Хотя, в 7 штатно появилась утилита nmtui, которая позволяет наглядно из консоли настроить все необходимые сетевые параметры, не прибегая к ручной правке конфигурационных файлов.
После инсталляции почти всё, как и с шестёркой:
yum -y updateyum -y install mc telnet bind-utils bzip2 unzip zip wget psmisc
В 7 исчезла команда ifconfig. Вместо неё появилась команда ip. Для элементарного просмотра сетевых настроек нужно ввести ip a. Но если хочется старых команд, то нужно поставить ещё один пакет:yum -y install net-tools.x86_64
Далее настраиваем синхронизацию времени. Тут есть два варианта:
1. Воспользоваться уже имеющимся в системе новым сервисом. (В Centos 7 вместо старого ntpd предустановлен и активирован новый сервис chrony).Проверяем, работает ли chrony:systemctl status chronydесли работает, то разрешаем синхронизацию времени:timedatectl set-ntp yesпроверяем состояние:chronyc sources
2. Если chrony не работает или хочется установить вместо него ntpd:
yum -y install ntpsystemctl start ntpdsystemctl enable ntpdотключаем chrony:systemctl stop chronydsystemctl disable chronyd
Добавление репозиториев:yum -y install epel-releaserpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txtyum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
ставим оттуда полезные утилиты:yum -y updateyum -y install bash-completion htop atop iftop
Далее можно сделать то же, что и в версии 6 касательно создания пользователя администратор и отключения логина root через ssh.
Также для начала отключаем selinux, написав в файле /etc/selinux/configSELINUX=disabled
и выключаем firewall.В CentOS 7 вместо привычных iptables появилась надстройка над ними под названием firewalld. Отключается он так:systemctl stop firewalldsystemctl disable firewalldКак его настраивать - отдельная тема. Почитать об этом можно, например, тут:http://bozza.ru/art-259.html
Если нужно вернуть iptables, то делается это так:yum -y install iptables-servicessystemctl enable iptables
Ну и последнее. Можно ещё отключить в системе ipv6, ибо оно пока непонятно зачем нужно в большинстве случаев.Во-первых, частично это можно было сделать при инсталляции, когда настраивались сетевые параметры, отключив автоматическую настройку ipv6.Если этого сделано не было, то уже после установки системы делается это так:Сначала смотрим, какие службы используют ipv6:netstat -tulnpВсе строки с названием протокола и 6 в конце или ::: это как раз оно. Как правило, на только что установленном сервере этот протокол используют sshd, ntpd и, возможно, postfix.
Для sshd в /etc/ssh/sshd_config находим строки:#AddressFamily any#ListenAddress 0.0.0.0и меняем их на:AddressFamily inetListenAddress 0.0.0.0
Для ntpd в /etc/ntp.conf добавляем в конце строку:interface ignore ipv6
И отключаем ipv6 в самой CentOS. Открываем файл /etc/sysctl.conf и добавляем туда строки:net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1
и в файле /etc/sysconfig/network, добавляем:NETWORKING_IPV6=noIPV6INIT=no
редактируем файл /etc/default/grubнаходим строку GRUB_CMDLINE_LINUX и добавляем в начало ipv6.disable=1, чтобы это выглядело примерно так:GRUB_CMDLINE_LINUX="ipv6.disable=1 rd.lvm.lv=rootvg/usrlv...создаём новую конфигурацию grub командой:grub2-mkconfig -o /boot/grub2/grub.cfg
Для postfix правим файл /etc/postfix/main.cfДелаем замену#inet_interfaces = localhost#inet_protocol = allнаinet_interfaces = 127.0.0.1inet_protocol = ipv4
Можно перегружаться и проверить, что ipv6 успешно выключен:netstat -tulnpникаких упоминаний об ipv6 там быть не должно.
dkomaleev.blogspot.com