Прошло почти 4 года с моего поста Linux: Мои первые 15 минут на сервере. Время идет, уже давно вышел в свет CentOS 7, инструкция в целом актуальна, но требует обновления в связи с особенностями дистрибутива.
Поехали…
Как настроить сеть, было постом ниже Centos 7: Настройка сети
Centos 7: Пользователи
Повторяем все тоже самое что и прошлый раз:
#Меняем пароль root: passwd root #Добавляем дополнительного пользователя: adduser username usermod -a -G wheel username #Разрешаем вновь созданному пользователю sudo:
/bin/sed -ie "s/# %wheel\tALL=(ALL)\tNOPASSWD: ALL/%wheel\tALL=(ALL)\tNOPASSWD: ALL/g" /etc/sudoers # проверяем grep "NOPASSWD: ALL" /etc/sudoers #Добавляем к ранее созданному пользователю публичный ключ mkdir /home/username/.ssh echo "my_public_key" >>/home/username/.ssh/authorized_keys chmod 700 /home/username/.ssh chmod 600 /home/username/.ssh/authorized_keys chown username:username /home/username/.ssh -R
Centos 7: Репозитории
Epel и Remi ставятся в 2 команды:
sudo yum install epel-release rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Проверяем:
#yum check-update Loaded plugins: fastestmirror epel/x86_64/metalink | 28 kB 00:00:00 epel | 4.3 kB 00:00:00 remi-safe | 2.9 kB 00:00:00 (1/4): epel/x86_64/group_gz | 170 kB 00:00:00 (2/4): epel/x86_64/updateinfo | 843 kB 00:00:00 (3/4): remi-safe/primary_db | 1.1 MB 00:00:00 (4/4): epel/x86_64/primary_db
Centos 7: SSH
/bin/sed -ie "s/#PermitRootLogin yes/PermitRootLogin no/g" /etc/ssh/sshd_config /bin/sed -ie "s/#PasswordAuthentication yes/PasswordAuthentication no/g" /etc/ssh/sshd_config # Делаем проверку grep RootLogin /etc/ssh/sshd_config grep PasswordAut /etc/ssh/sshd_config #Если все хорошо, то service sshd restart
Чтобы нас не сканировали, вешаем SSH на другой порт:
sudo vi /etc/ssh/sshd_config # Port 2224 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
Если при рестарте видим предупреждение:
# service sshd restart Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details. Oct 20 14:18:18 tvh5-test-1 sshd[27599]: error: Bind to port 2224 on 0.0.0.0 failed: Permission denied. Oct 20 14:18:18 tvh5-test-1 sshd[27599]: error: Bind to port 2224 on :: failed: Permission denied.
Значит необходимо добавить порт в selinux:
yum install policycoreutils-python semanage port -a -t ssh_port_t -p tcp 2224
Если включен файрвол, то добавляем правило и в него:
sudo firewall-cmd --permanent --zone=public --add-port=2224/tcp sudo firewall-cmd --reload
Перезапускаем сервис и проверяем доступность:
#sudo systemctl restart sshd.service #ss -tnlp | grep ssh LISTEN 0 128 *:2224 *:* users:((“sshd”,10783,3)) LISTEN 0 128 :::2224 :::* users:((“sshd”,10783,4)) # ИЛИ # netstat -antp | grep ss Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:2224 0.0.0.0:* LISTEN 27789/sshd
Если есть необходимость оставить порт, то стоит настроить хотя бы fail2ban.
Centos 7: fail2ban
Ставим пакет:
sudo yum install epel-release sudo yum install fail2ban
Настраиваем мониторинг перебора паролей SSH:
sudo vi /etc/fail2ban/jail.local [DEFAULT] # Ban hosts for one hour: bantime = 3600 # Override /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true
Рестартуем службу и проверяем статус:
sudo systemctl enable fail2ban sudo systemctl restart fail2ban sudo fail2ban-client status Status |- Number of jail: 1 `- Jail list: sshd
Centos 7: Nginx
Подключаем репозитарий:
#vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1
Ставим Nginx:
sudo yum install nginx sudo systemctl start nginx sudo systemctl enable nginx
Настраиваем файрвол:
sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --reload
Проверяем доступность:
# netstat -tulpn | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1392/nginx: master
Centos 7: История команд Linux
Для правильного сохранения истории команд со временем и без перетирания данных, в «~/.bashrc» добавляем строки:
#Учитывать дату и время выполнения команды export HISTSIZE=10000 export HISTTIMEFORMAT="%h %d %H:%M:%S " #Дописывает файл .history PROMPT_COMMAND='history -a' export HISTIGNORE="ls:ll:history:w"
Centos 7: Кто использует память?
Неожиданно в процессе настройки кончилась память, хотя на похожей конфигурации память есть и с запасом. Решил посмотреть, кто использует память:
#ps -eo size,pid,user,command | awk '{ hr=$1/1024 ; printf("%13.6f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | sort -g 1 97.144531 Mb /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid 2 142.906250 Mb php-fpm: pool www 3 145.253906 Mb /usr/sbin/rsyslogd -n 4 151.503906 Mb /usr/bin/python2 -s /usr/bin/fail2ban-server -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid -x -b 5 217.613281 Mb /usr/sbin/NetworkManager --no-daemon 6 297.339844 Mb /usr/bin/python -Es /usr/sbin/tuned -l -P 7 440.273438 Mb /usr/lib/polkit-1/polkitd --no-debug
Можно было сделать проще, но мы не ищем легких путей:
#ps aux --sort -vsz | head
5,6 и 7 процесс явно кандидаты на вылет. А вот с rsyslogd все в порядке, просто новая версия стала кушать память примерно в 2 раза больше.
#ps -L -C rsyslogd -o command,vsize,rss,%mem,size COMMAND VSZ RSS %MEM SIZE /usr/sbin/rsyslogd -n 210280 3448 0.3 148740 /usr/sbin/rsyslogd -n 210280 3448 0.3 148740 /usr/sbin/rsyslogd -n 210280 3448 0.3 148740
Продолжение следует…