Настройка SELinux, включение, отключение. Selinux настройка centos 7


Basic Setup / Первые настройки CentOS 7

Отключаем SElinux:      $ setenforce 0; sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

Установить 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 -Uvh

http://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

it.kuchuk.net

Начальная настройка 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. Удивительные вещи, которые ждут нас в седьмой версии:
  1. Отказ от iptables, теперь вместо него firewall
  2. Отказ от chkconfig - теперь вместо него systemd
  3. Переход с MySQL к MariaDB.

Установка операционной системы

На данный момент актуальной является CentOS 7, ориентированный исключительно на архитектуру x86_64. Скачиваем образ ISO и устанавливаем с диска, но можно поставить и с флэшки. В процессе установки выбираем вариант Desktop: он достаточно лёгкий (не будет тащить за собой кучу лишних пакетов), а кроме того позволит на первых порах отлаживать систему в графическом режиме. В будущем установим дополнительные пакеты вручную.

Аппаратная часть

В нашем распоряжении оказался уже морально устаревший двухядерный компьютер на базе процессора E3300, имеющий 2 Гб оперативной памяти. Как показала практика, его вполне достаточно.

Разделы диска

На шаге Installation Destination нам предлагается выбрать диск для установки системы. Если ничего не трогать (Automatically Configure Partitioning), то инсталлятор самостоятельно справится с разбиением на разделы. Считаю, такие важные вещи нельзя пускать на самотёк, они требуют вмешательства; поэтому наш выбор - I will configure partitioning. Видим диалоговое окно, показанное ниже. Распределяем место на диске.
  1. Нам необходимо выделить более 82 Мб для раздела boot.
  2. Всё оставшееся место за исключением размера оперативной памяти отводим под корневой раздел.
  3. Наконец, остаток отдаём под файл подкачки, помечая его swap.
 В  результате разделы будут видны примерно таким образом.  В  отличие от шестой версии, файловой системой по умолчанию в седьмой версии является XFS, а не ext4. К сожалению, в сети довелось натыкаться на негативные отзывы о ней, однако не могу высказать своё собственное мнение: я вынужден использовать ext4 для совместимости с некоторым необходимым программно-аппаратным обеспечением. Результат команды df -h после установки:

Отладка

Первое, что надо сделать – отключить систему безопасности 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
Устанавливаем PHP.yum -y install php php-mysql php-common php-gd php-xml php-mbstring Вариант наиболее полной установки PHP, с расчётом на разворачивание платформ для современных популярных движков Joomla, Wordpress и Drupal, будет выглядеть следующим образом:yum -y install php php-gd php-mysql php-common php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel Если оригинальная версия php не соответствует минимальным требованиям размещаемых сайтов, можно воспользоваться описанной методикой или лучше более прогрессивной методикой. Устанавливаем и запускаем MySQL.yum -y install mysql mysql-server systemctl enable mysqld systemctl start mysqld Не забываем задать пароль root для MySQL. Альтернативный вариант: устанавливаем и запускаем MariaDB:yum install -y mariadb mariadb-server systemctl enable mariadb systemctl start mariadb Теперь готовимся к отказу от графического интерфейса. Во всём семействе Red Hat Linux (Fedora, Red Hat, CentOS) используется следующая система уровней выполнения
  1. Single-user text mode (without networking)
  2. Not used (user-definable)
  3. Full multi-user text mode
  4. Not used (user-definable)
  5. Full multi-user graphical mode (with an X-based login screen)
  6. Reboot
Состояние подготовки к выключению кодируется нулём. Так как перед нами стоит задача развернуть выделенный сервер, наиболее рационально выбрать уровень 3, который является многопользовательским, но не использует графику. Редактируем/etc/inittab Прописываемid:3:initdefault: Теперь третий уровень выполнения становится уровнем по умолчанию, именно на нём будет работать система в случае перезапуска. В любой момент времени проверить текущий уровень можно командой runlevel:/sbin/runlevel Теперь дело за малым:
  1. Настроить mysql, однако необходимо заметить, что компания Red Hat предпочитает на данный момент альтернативную базу данных MariaDB
  2. Настроить высокопроизводительный веб-сервер (например, связку nginx+apache), или оставить только службу httpd
  3. Настроить 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: targeted

SELinux 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-name

2. Каждый файл файловой системы должен быть промаркирован контекстом 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=targeted

6. После этого операционную систему следует перезапустить. После перезапуска нужно проверить возвращаемое значение Enforcing командой getenforce.

$ /usr/sbin/getenforce Enforcing

7. Для просмотра отображений между 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-й версии системы произошли некоторые изменения по сравнению с предыдущими версиями.

Содержание:

  1.  Введение
  2.  Начальная настройка CentOS 7
  3.  Указываем сетевые параметры
  4.  Настраиваем firewall
  5.  Настройка SSH в CentOS 7
  6.  Настраиваем время
  7.  Добавление репозиториев
  8.  Установка iftop, atop, htop на CentOS 7
  9.  Заключение
  10.  Видео по настройке 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 ACCEPT

22 на 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 6

CentOS 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