Делаю сервак на firstbyte

Делаю сервак на firstbyte

// добавляем в группу sudoers
usermod -a -G sudo jek

// у меня не было моей папки пользователя, поэтому
sudo mkdir /home/jek
sudo chmod 750 jek
sudo chown jek:jek jek

sudo apt install nginx

Первым делом обнаружил, что там где я зарегистрировал домен за 55 рублей — это nic.ru нет редактирования записей зоны, точнее есть, но она платная и стоит 50 рублей в месяц.

Делегировал домен на хостинг, который у меня уже есть и подтвердил права на него в Яндекс коннект, затем перекинул DNS-сервера на nic.ru и вуаля, все заработало. Но больше регить домены на nic.ru не буду. Или буду 🙂

Дубль два — CentOS

Заходим пол рутом:

Создаем пользователя jek, настраиваем ему доступ по сертификату, делаем его судоером

// Добавляем юзера
adduser jek

// добавился?
groups jek
// должно выдать jek:jek

// пароль не добавляем - у нас будет доступ по сертификату
// passwd jek

// дальше я поступил хитро - инструкцию брал тут https://phoenixnap.com/kb/how-to-create-add-sudo-user-centos
visudo

// ищем строчку root ALL=(ALL) ALL и вставляем после нее аналогичную jek ALL=(ALL) ALL (режим вставки INSERT)
// в итоге должно выглядеть так 

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

jek ALL=(ALL) ALL

// жмем ESC, потом ":" и wq



Создаем пользователя www-data, настраиваем ему доступ по сертификату

Дубль три

Зарегистрировал домен на reg.ru. Там есть свои dns поэтому, магия с яндексом не нужна.

Купил сервак, дали IP, добавил три A записи на новый IP сервака.

Проверяю пинг до IP и доменного имени — ок. Но по 80 порту сайт не открывается: «curl: (7) Failed to connect to peskarik.site port 80 after 20 ms: Нет маршрута до узла»

Ну штош — идем на сервер.

Создаю в Remmina новое соединение SSH. Моя задача настроить другого пользователя (своего судоера) с доступом по сертификату. Настраиваю соединение — херак ошибка — неизвестное имя сервера, как так? Да просто при копировании в поля почему то в пробелы вставляются. Убираем, ура — успешный логин. Видим какое то странное сообщение:

Last failed login: Sun Sep  3 12:04:40 MSK 2023 from 79-139-244-235.dynamic.spd-mgts.ru on ssh:notty
There were 63 failed login attempts since the last successful login.
[root@peskarik ~]# 

Кстати в панели управления сервером провайдера есть консоль в браузере. Удобно, Реминой можно не пользоваться.

Когда это я интересно успел 63 раза залогиниться, ну лан. Чуть не забыл — выбрал CentOS.

Проверяю дату — ок, москва.

Проверяю локаль:

[root@peskarik ~]# date
Sun Sep  3 12:10:46 MSK 2023
[root@peskarik ~]# cat /etc/locale.conf
LANG="en_US.UTF-8"
[root@peskarik ~]# localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: n/a

Меняем локаль на доступную и нужную (https://www.osetc.com/en/centos-7-rhel-7-change-the-system-locale.html):

[root@peskarik ~]# localectl list-locales | grep ru
ru_RU
ru_RU.iso88595
ru_RU.koi8r
ru_RU.utf8
ru_UA
ru_UA.koi8u
ru_UA.utf8
russian
[root@peskarik ~]# localectl set-locale LANG=ru_RU.utf8

Теперь все таки переходим к юзеру.

Извините, но я без mc не могу дальше, в виме админы рулят, я не админ, так что

sudo yum install mc

Добавляем своего юзера, задаем ему домашнюю папку, логин, пароль, делаем его судоером.

# создаем пользака
adduser jek -mU -u1000

#Проверяем создался ли
groups jek
// должно выдать jek:jek

// задаем ему пароль
passwd jek

// Добавляем его в судоеры:
/// Ни в коем случае не редактируем /etc/sudoers через MC - сломаете файл и потом придется танцевать с бубном!

# Поэтому 
visudo
# и после строчки "root ALL=(ALL) ALL" добавляем свою "jek ALL=(ALL) ALL", а также убеждаемся, что расскоментирована строка "%wheel..."

# Кроме того строчка с пользователем добавляем так:
# jek<Табуляция>ALL=(ALL)<Пробел>ALL<Перенос строки>

# Теперь добавляем пользователя jek в группу wheel:
gpasswd -a jek wheel

# Тестируем пользака:
su - jek
sudo ls -la /root
[sudo] пароль для jek:
# Ураа, заработало

После этого можно создать новое подключение в Remmina , но уже с новым пользаком jek. Пока логинимся по паролю. Если все работает — движемся дальше.

Теперь нужно сделать так, чтобы мы логинились под нашим вновь созданным пользаком только при помощи сертификата. Для этого мне понадобится openssh-server на удаленном сервере, сгенерить пару ключей для доступа на моем домашнем компе, затем кидаем их на серв, тестируем, и убираем логин для этого юзера по паролю.

# Что то мне подсказывает, что если я логинюсь на серв через SSH, то openssh-server там уже есть
sshd --help
# что-то стоит

На локальном компе создаем пару ключей и заливаем публичный на серв:

jek@JEK-PC:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jek/.ssh/id_rsa): /home/jek/.ssh/peskarik
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/jek/.ssh/peskarik
Your public key has been saved in /home/jek/.ssh/peskarik.pub
The key fingerprint is:
SHA256:cFhOikeR6akif0CA1DGPpvizaxoM5Ms4puUFGWAl8v4 jek@JEK-PC
The key's randomart image is:
+---[RSA 3072]----+
|=+o+. o+o        |
|=o..+oo*         |
| ooo.o=.o        |
|+.+o .oo         |
|o++  .  S        |
|*.+o.            |
|+B+oE            |
|o=o+.            |
|oo+o             |
+----[SHA256]-----+

jek@JEK-PC:~$ ssh-copy-id -i /home/jek/.ssh/peskarik.pub jek@peskarik.site
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/jek/.ssh/peskarik.pub"
The authenticity of host 'peskarik.site (45.90.217.93)' can't be established.
ED25519 key fingerprint is SHA256:TnLDKWjgCv4+JKNORpY7Z0aubboKHV63KPn9O2yul0M.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
jek@peskarik.site's password: 
Permission denied, please try again.
jek@peskarik.site's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'jek@peskarik.site'"
and check to make sure that only the key(s) you wanted were added.

Отлично, говорит что добавил, теперь пробуем залогинится через серт — добавляем еще один коннект в Remmina. Почему то по домену не захотел логинится, вписал IP .
Остается отключить логин по паролю:

# Редактируем в mc файл /etc/ssh/sshd_config:

PubkeyAuthentication yes
AuthorizedKeyFile  .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no

# Перезагружаем службу
systemctl reload sshd.service

Пробуем зайти под рутом через ssh — хрен. Пробуем под своим новым юзером — радость. Глава первая окончена.

Ставим докер и портнейнер

Ставил по инструкции отсюда:
https://docs.docker.com/engine/install/centos/ и постинсталл отсюдова: https://docs.docker.com/engine/install/linux-postinstall/

Чтобы ожил портейнер, нуна инициализировать болото:

docker swarm init

Нам сообщают, что теперь нас сервак — это менеджер. Можно добавить воркер командой. Можно добавить и менеджера еще одного, но меня пока интересует только портейнер.
Далее ставлю по инструкции https://docs.portainer.io/start/install-ce/server/swarm/linux

curl -L https://downloads.portainer.io/ce2-19/portainer-agent-stack.yml -o portainer-agent-stack.yml

docker stack deploy -c portainer-agent-stack.yml portainer
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer

# Ура, запустилось, проверяем https://peskarik.site:9443/

Отлично. Теперь следующая простая задача — нужно поставить прокси сервер nginx, отдать простой файл и настроить и получить wildcard let`s encrypt сертификат пока вручную. В будущем же нужно настроить автовыпуск сертификата через certbot и добавление записи txt через API Reg.ru

sudo docker run -it --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly --manual --agree-tos --email web@derin.ru --preferred-challenges=dns -d peskarik.site -d www.peskarik.site -d *.peskarik.site

Клиент выдает имя и значение TXT записи в зоне управления доменом. Прописываем ее, дожидаемся, когда сервис https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.peskarik.site. начинает отдавать ее, и заканчиваем получение.
Сертификат есть, теперь нужно научить nginx его хавать. Создаем новый стек main, а в нем, пописываем конфиг:

version: '3'

services:
  webserver:
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
    volumes:
      - /home/jek/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /etc/letsencrypt:/etc/letsencrypt
      - /home/jek/www:/var/www/html
      

Предварительно конечно размещаем в /home/jek/nginx/nginx.conf :

events {}
http {
    server_tokens off;
    charset utf-8;

    # always redirect to https
    server {
        listen 80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl http2;
        # use the certificates
        ssl_certificate     /etc/letsencrypt/live/peskarik.site/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/peskarik.site/privkey.pem;
        server_name peskarik.site;
        root /var/www/html;
        index index.php index.html index.htm;
    }
}

Вуаля все работает

Евгений

Яндекс.Метрика