Конфигуриране на сървър CentOS 7

Помощен център

Конфигуриране на сървър CentOS 7

В поредица от статии ще ви покажем как може да конфигурирате свой собствен сървър CentOS 7 и да хоствате на него сайт/ове. За примера сме инсталирали centos-7-x86_64-minimal-1810.iso на WMware Workstation 12 Player и се свързваме със сървъра през Putty (SSH клиент за Windows OS). Вие може да ползвате друг продукт на VMware или VirtualBox като виртуална среда.

В статиите следваме логичните стъпки като преследваме само една крайна цел - да постигнем достатъчно високо ниво на сигурност и производителност на сървъра по най-лесния възможен начин.

Потребители и привилегии в Linux

Разделянето на потребителските привилегии е една от основните характеристики на Linux OS. Нормалните потребители работят в сесии с ограничени привилегии, за да се намали обхвата на тяхното влияние върху цялата система. В Linux системите съществува един суперпотребител root, който има абосолютно всички привилегии.

Обикновените потребители могат да изпълняват команди с root привилегии по различни начини.

Влизане (логване) в системата като root

login as: root
root@192.168.237.131's password:
Last login: Mon Jul 29 11:41:01 2019
[root@centos7 ~]#

Използване на командата su

Влизане (логване) в системата като създаден потребител commonuser и използване на командата su. Системата ще ви попита за root паролата и след като я въведете, ще получите root сесия (shell). Можем да излезете от root shell като въведете Ctrl+D или използвате командата exit. След излизането се връщате в предишната потребителска сесия:

[commonuser@centos7 ~]$ whoami
commonuser
[commonuser@centos7 ~]$ su
Password:
[root@centos7 commonuser]# whoami
root
[root@centos7 commonuser]# exit
exit
[commonuser@centos7 ~]$ whoami
commonuser
[commonuser@centos7 ~]$

Използване на командата sudo

Изпълнявайте команди с root привилегии в потребителска сесия, използвайки sudo, без да преминавате в root shell или да се логвате като root:

[commonuser@centos7 ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[commonuser@centos7 ~]$ sudo ls /root/
anaconda-ks.cfg
[commonuser@centos7 ~]$ 

Важно:

  • su - изисква въвеждане на root паролата и ви премества в root shell (root@centos7).
  • sudo - изисква въвеждане на потребителската парола и присвоява root привилегии на потребителя в неговата собствена shell сесия (commonuser@centos7).

Създаване и управление на нов потребител

Нов потребител на сървъра се създава със следната команда:

adduser newusername

На новият потребител се присвоява парола с командата:

passwd newusername

и се потвърждава паролата чрез повторно въвеждане.

В примера създаваме потребител keyauth и малко по-късно ще разберете защо му избрахме това име:

[root@centos7 commonuser]# adduser keyauth
[root@centos7 commonuser]# passwd keyauth
Changing password for user keyauth.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@centos7 commonuser]#

Потребителят е създаден успешно и се логваме в сървъра през неговия акаунт. Но когато опитаме да му дадем root привилегии с sudo, системата не ни позволява (keyauth is not in the sudoers file):

login as: keyauth
keyauth@192.168.237.131's password:
[keyauth@centos7 ~]$ sudo ls /root/
[sudo] password for keyauth:
keyauth is not in the sudoers file.  This incident will be reported.
[keyauth@centos7 ~]$

За да може новият потребител да ползва root привилегии чрез sudo, трябва да го добавим към групата wheel. В CentOS 7 само потребителите от групата wheel могат да използват командата sudo.

От root shell (su + root парола) изпълнете следната команда, за да добавите новия потребител keyauth към групата wheel:

gpasswd -a newusername wheel

[root@centos7 keyauth]# gpasswd -a keyauth wheel
Adding user keyauth to group wheel
[root@centos7 keyauth]#

Излизаме от сървъра и се логваме в keyauth акаунта. Отново изпълняваме командата, която по-горе генерира грешка. След промените потребителят keyauth успешно получава root привилегии с sudo:

[keyauth@centos7 ~]$ sudo ls /root/
[sudo] password for keyauth:
anaconda-ks.cfg
[keyauth@centos7 ~]$

Може да видите кои потребители са добавени в групата wheel с командата:

lid -g wheel

[keyauth@centos7 ~]$ sudo lid -g wheel
[sudo] password for keyauth:
 commonuser(uid=1001)
 keyauth(uid=1002)
[keyauth@centos7 ~]$

Може да превключвате между профилите на отделните потребители с командата като въведете паролата на новия потребител (в примера: keyauth):

su - newusername

[commonuser@centos7 ~]$ su - keyauth
Password:
Last login: Tue Jul 30 00:07:06 EEST 2019 on pts/0
[keyauth@centos7 ~]$

Ако искате да изтриете потребител заедно с домашната му директория, въведете тази команда като root:

userdel -r newusername

Актуализиране на CentOS 7

Първата стъпка, която трябва да извършите след нова инсталация на CentOS е да се уверите, че системата е актуална с най-новите пачове за защита на ядрото и системата, хранилища и пакети.

За да актуализирате напълно CentOS 7, изпълнете следните команди през root акаунта или като добавите sudo в началото на командата:

# yum check-update

# yum upgrade

Инсталиране на системни помощни програми

Следните пакети от помощни програми са доказано полезни за ежедневна системна администрация, но не са включени в centos-7-minimal инсталацията: nano (текстов редактор), wget, curl (помощни програми, използвани за изтегляне на пакети през мрежа) net-tools, lsof, psmisc (помощни програми за управление на локални мрежи) , perl библиотека и bash-completion (автоматично завършване на командния ред).

Препоръчаме да инсталирате всички тези програми като изпълните командата по-долу:

# yum install nano wget curl net-tools lsof psmisc perl bash-completion

Управление на услуги в CentOS 7

CentOS 7 управлява демони или услуга чрез програмата systemctl. За да видите списък с всички услуги на сървъра и техния статус, изпълнете следната команда:

# systemctl list-units

Едно от приложенията, които са стартирани автоматично и което почти сигурно няма да ползваме, е мейл сървъра postfix (Postfix Mail Transport Agent). Може да премахнем postfix като изпълним следните команди в посочения ред:

# systemctl stop postfix

# systemctl disable postfix

# yum remove postfix

Бъдете внимателни при спирането на услуги за да не повредите непоправимо сървъра.

Удостоверяване с публичен ключ

Настройването на удостоверяване с публичен ключ в сървъра e добра практика и увеличава сигурността на вашия сървър. В статията Удостоверяване с публичен ключ показваме подробно как се генерира SSH двойка ключове (публичен и частен) и как се конфигурира процеса на свързване от Windows и Linux компютър.

Тук накратко припомняме стъпките:

Windows

  • генерираме двата ключа в програмата PuTTYgen;
  • копираме публичния ключ във файла /home/user/.ssh/authorized_keys като даваме права на .ssh директорията (chmod 700) и на файла authorized_keys (chmod 600);
  • в примера запазваме частния ключ на компютъра без да го осигуряваме с парола (за максимална сигурност препоръчаме да ползвате парола);
  • в интерфейса на PuTTY създаваме нова сесия и запазваме в нея IP адреса на сървъра, SSH порта, потребителя и пътя до частния ключ.

При кликане върху името на сесията или избиране на сесията > Load > Open, се свъзваме със сървъра в акаунта на съответния потребител.

Linux

  • изпълняваме командата ssh-keygen и системата генерира двата ключа (id_rsa.pub и id_rsa) в директорията /home/user/.ssh/.
  • копираме публичния ключ на сървъра автоматично с помощта на командата ssh-copy-id user@192.168.1.10;
  • за да се свържем със сървъра изпълняваме командата ssh user@192.168.1.10

Конфигуриране на SSH

Сега ще променим някои настройки в конфигурацията на SSH демона (програмата, която ни позволява да се логваме дистанционно).

Силно препоръчаме да си създадете навик преди да правите промени в конфигурационни файлове да правите копие на оригиналния файл като добавите дума по ваше желание към името на файла (backup, orig, archive...):

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig

Отваряме конфигурационният файл /etc/ssh/sshd_config с текстов редактор по избор с root привилегии:

sudo nano /etc/ssh/sshd_config

Деактивиране логване на root потребител

Ще деактивираме логването на root потребител чрез SSH тъй като може да достъпим сървъра през потребителски акаунт и при необходимост да му дадем root привилегии.

Във файла трябва да намерим реда, който съдържа настройката PermitRootLogin и да променим нейната стойност от yes на no, както и да премахнем символа за коментар (#) в началото на реда.

В nano може да търсите по следния начин - натиснете клавишите Ctrl+W и в промпта в долната част на екрана въведете част от името (напр. rootlogin, въвеждането не е чувствително към регистъра и не прави разлика между малки и главни букви):

# PermitRootLogin yes

PermitRootLogin no

Запазете промяната като кликнете Ctrl+O и натиснете Enter без да затваряте редактора.

Промяна на SSH порт

Друга силно препоръчителна промяна е да смените SSH порта по подразбиране 22. Използвайте търсенето през nano, въведете 22 и ще попаднете на реда:

#Port 22

Сменете 22 с цифра между 1025 и 65536 и премахнете символа за коментар (#) в началото на реда. В примера променяме порта на 51234 и реда с кода изглежда така:

Port 51234

Запазете промяната с Ctrl+O и Enter, затворете редактора с Ctrl+X.

Рестартиране на SSH

За да активираме направените промени трябва да рестартираме SSD демона (sshd) като изпълним следната команда като root:

systemctl reload sshd

[commonuser@centos7 ~]$ sudo systemctl reload sshd
[commonuser@centos7 ~]$

За да разрешим свързването през новия порт, трябва да го добавим в настройките на защитната стена firewalld със следните команди:

sudo firewall-cmd --permanent --add-port=51234/tcp

sudo firewall-cmd --reload

С командата sudo firewall-cmd --list-ports може да проверим дали наистина порта е отворен:

[commonuser@centos7 ~]$ sudo firewall-cmd --list-ports
51234/tcp
[commonuser@centos7 ~]$

* Управлението на firewalld разглеждаме подробно в статията конфигуриране на защитна стена.

Сега трябва да въведем новата стойност на SSH порта (51234) в PuTTY (Windows) и в командата за логване през команден ред (Linux), за да се логнем успешно:

ssh -p 51234 keyauth@192.168.1.10

tshb120@tshb120:~$ ssh -p 51234 keyauth@192.168.1.10
Last login: Tue Jul 30 08:57:05 2019 from 192.168.1.9
[keyauth@centos7 ~]$

Сега ако опитаме да се логнем като root, сървъра ни отказва достъп:

login as: root
root@192.168.1.10's password:
Access denied

Ако опитаме да се логнем през друг порт, различен от този в sshd_config файла (51234), сървъра не зарежда промпта за удостоверяване, а връща грешка Network error: Connection refused.