Linux
April 6, 2022

Настройка Debian сервера

Небольшая инструкция по базовой настройке сервера на Debian: создание пользователя, установка ssh, активация firewall и cборка python из исходников.


Подключение к серверу осуществляется через веб-панель или по ssh.
В качестве графического ssh клиента стоит рассмотреть: XShell, Putty или Termius.

ssh root@host

Настройка пользователя

Установка sudo для root-привелегий; создание пользователя www; смена пароля:

apt-get install -y sudo ; \
useradd -m -s /bin/bash www ; \
adduser www sudo ; \
passwd www

Новый пароль пользователя www важно запомнить!

useradd создаёт пользователя с домашней директорией и оболочкой

Переключение пользователя:

su - www

SSH

Установка SSH и UFW (firewall):

sudo apt-get install -y ssh ufw ; \
sudo systemctl enable ssh --now

Создание директории для SSH-ключей и настроек:

mkdir -p ~/.ssh && touch ~/.ssh/config ~/.ssh/authorized_keys

Добавление ключей

Сгенерировать хороший ключ можно командой (генерировать на клиенте):

ssh-keygen -t ed25519 -N passphrase -f ~/.ssh/key_name

Или при помощи XShell/Putty

passphrase - пароль для ключа, потребуется вводить при подключении

Добавление своего публичного ключа в список известных ключей на сервере (писать с клиента):

ssh-copy-id -i ~/.ssh/key_name -p 22 www@host
Ключ также можно просто вставить в файл authorized_keys на сервере:
nano ~/.ssh/authorized_keys

Права доступа и конфигурация

Настройка прав для ssh:

ln ~/.ssh/authorized_keys ~/.ssh/authorized_keys2 ; \
chown -R $USER:$USER ~/.ssh && chmod 700 ~/.ssh ; \
chmod 644 ~/.ssh/* ; \
chmod 400 ~/.ssh/authorized_keys*

Настройка sshd_config (правила работы ssh):

sudo nano /etc/ssh/sshd_config
Port 22022
AllowUsers www
Protocol 2
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
port - порт, по которому будет осуществляться подключение
Список TCP/UDP портов | Подробная настройка sshd

Добавление порта в UFW и запуск firewall:

sudo ufw default deny incoming; \
sudo ufw default allow outgoing; \
sudo ufw allow 22022/tcp ; \
sudo ufw enable

Перезапуск сервиса ssh

sudo service ssh restart

После этого подключиться к серверу можно только с ключом по порту 22022:

ssh www@host -p 22022 -i ~/.ssh/key_name

Установка пакетов

Основные пакеты

Обновление репозиториев и загрузка основных пакетов:

sudo apt-get update ; \
sudo apt-get install -y vim curl wget git tmux mosh zip unzip gcc build-essential make 

Дополнительные пакеты

Установка дополнительных пакетов для удобной работы на сервере:

sudo apt-get install -y zsh tree supervisor htop mc python3-dev libssl-dev python-dev libcurl4-openssl-dev
zsh - продвинутая оболочка
tree - просмотр файлов в виде дерева
supervisor - менеджер процессов
htop - программа для вывода списка запущенных процессов и информации
mc - файловый менеджер с текстовым интерфейсом

Установка python из исходников

Установка python 3.10 из исходников в директорию ~/.python (занимает много времени):

wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz ; \
tar xzvf Python-3.10.* ; \
mkdir ~/.python ; \
cd Python-3.10.4 ; \
./configure --enable-optimizations --prefix=/home/www/.python ; \
make -j8 ; \
sudo make altinstall
altinstall пропускает создание ссылки на python и ссылок на страницы руководства. Подробнее

ZSH

Установка oh-my-zsh в отдельную директорию и смена оболочки:

mkdir -p ~/.zsh ~/.zsh/custom; \
export ZSH="$HOME/.zsh/oh-my-zsh" && sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"; \
chsh -s $(which zsh)

Установка полезных плагинов:

export ZSH_CUSTOM="$HOME/.zsh/custom" ; \
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions ; \
git clone https://github.com/zdharma-continuum/fast-syntax-highlighting $ZSH_CUSTOM/plugins/fast-syntax-highlighting

Установка темы и алиасов:

nano ~/.zshrc
    ZSH_THEME="clean"
    plugins=( git zsh-autosuggestions fast-syntax-highlighting )
    alias vi="vim"
    alias cls="clear"
    alias mcd="function _mcd(){ mkdir -p '$1'; cd '$1'; };_mcd"

Основано на alexey-goloburdin/debian-set-up-for-django