Налаштування SSH-сервера, безпека sshd, sftp на базі ssh
SSH-сервер (sshd) служить для безпечного віддаленого адміністрування комп'ютерів, серверів та інших пристроїв. Інформація в цій статті буде корисною для користувачів та адміністраторів Linux (Ubuntu, Debian, ін.) та FreeBSD.
Підключення до сервера SSH
У користувачів UNIX-подібних операційних систем: Linux, Ubuntu, Debian, FreeBSD та ін клієнт SSH за замовчуванням доступний в системі. Підключення до віддаленого пристрою не складе труднощів і здійснюється простою командою: ssh USER@HOSTNAME_OR_IP .
У Windows, для підключення SSH доводиться використовувати сторонні утиліти. Найпопулярніша з них – термінал з відкритим вихідним кодом PuTTy (putty.exe).
Редагування налаштувань сервера SSH
Редагування налаштувань сервера SSH здійснюється у файлі /etc/ssh/sshd_config. Зверніть увагу, що файл називається ssh D _config, а у файлі з дуже схожою назвою, тільки без літери D, налаштовується клієнт.
Якщо редагування конфіга SSH проводиться віддалено, дуже важливо не втратити доступ до сервера після зміни налаштувань. Завжди перед використанням перевіряйте sshd_config на помилки: /usr/sbin/sshd -t . Також варто заздалегідь подбати про резервний доступ до пристрою за допомогою сервісів провайдера (IP-KVM, Rescue-система і т.п.). Як ще один варіант - можна налаштувати відкат змін у sshd_config по cron.
Журнал роботи (log) sshd веде до /var/log/auth або /var/log/secure, залежно від ОС. Важливість і кількість повідомлень у лог-файлі залежить від налаштувань у файлі sshd_config (відповідає параметр LogLevel, докладніше про нього - нижче). Якщо log-файл був видалений, то для того, щоб він з'явився знову, необхідно перезапустити Syslog (FreeBSD: service syslogd restart, Ubuntu: sudoservice rsyslog restart).
Всі зміни, внесені в /etc/ssh/sshd_config, набудуть чинності тільки після перезавантаження сервісу sshd: service ssh reload або service ssh restart (CentOS 7 - systemctl restart sshd.service ).
Подивитися статус SSHd можна за допомогою такої команди: systemctl status sshd.service (для CentOs 7).
Досить детальний опис налаштувань sshd_config українською знаходиться тут: Налаштування SSH - help.ubuntu.ru/wiki/ssh , нижче - список найбільш затребуваних з поясненнями, на що вони впливають.
Безпека sshd
Найбезпечніший варіант використання SSH – відокремлена мережа без доступу до Інтернету, у всіх інших випадках рівень захисту лежить на совісті адміністратора: чим безпечніше, тим менш зручно працювати за SSH. Основне завдання – знайти золоту середину між зручністю та безпекою. Загальна порада - використовувати тільки параметри з'єднання, які будуть затребувані, все зайве - відключити або звузити. Нижче будуть перераховані основні параметри, що впливають на рівень захищеності та варіанти їх налаштування.
У ssh-server іноді знаходять серйозні помилки, дозволяють хакеру, використовує знайдені вразливості, провести успішну спробу злому системи. Найпростіший шлях для вирішення цієї проблеми - завжди стежити за актуальністю програмного забезпечення SSH-сервера та оновлювати його одразу, після виходу латок або нових стабільних версій. Для більш досвідчених адміністраторів можна запропонувати ще один шлях: змінити вітальне повідомлення, яке видається sshd кожному, хто до нього підключається, наприклад: "SSH-2.0-OpenSSH_3.9.1p1 Debian-7.sarge.2". Використовуючи дані з цього привітання, можна досить легко перевірити, чи вразлива дана версія чи ні, і щоб не надавати зайву інформацію кому не потрапивши,варто скористатися інструкцією: Як змінити вітання SSH-сервісу.
Можна використовувати більше одного порту, наприклад:
Навіть після зміни порту за промовчанням спроби підбору пароля можуть продовжитися. Щоб звести успішність таких спроб до мінімуму, потрібно блокувати кожен IP, з якого здійснювався брутфорс після кількох невдалих аутентифікацій. Впоратися з цим завданням допоможуть спеціальні утиліти: Denyhosts, Fail2ban та інші. Приклад налаштування та використання Denyhosts знаходиться тут: Denyhosts - захищаємо ssh, ftp і не тільки.
Protocol - який протокол використовувати: ssh1 (застарілий і безпечний) чи ssh2. Параметр обов'язково має бути встановлений у 2: Protocol 2 .
SyslogFacility таLogLevel - два важливі параметри відповідальні за журналування подій. У SyslogFacility вказується, в якому файлі журналу (лог файл) будуть записані повідомлення sshd, а значення параметра LogLevel відповідально за деталізацію таких повідомлень. За замовчуванням встановлено значення, які будуть прийнятними для більшості адміністраторів:
PermitEmptyPasswords за промовчанням встановлено в no, що не дозволить зайти в систему користувачу з порожнім (не встановленим) паролем.
PasswordAuthentication - використовувати (yes - за замовчуванням) чи ні (no) автентифікацію за паролем. Найбільш безпечний спосіб аутентифікації на сьогоднішній день – аутентифікація за ключами. Для цього потрібно заздалегідь створити пару ключів (публічний та приватний), відправити SSH-серверу публічний ключ, перевірити роботу аутентифікації за ключами і лише після цього встановлювати PasswordAuthentication у no. Інструкцію з роботи з ssh-key можна прочитати тут: SSH, автентифікація за ключами, ssh-keygen, ssh-agent.
PermitRootLogin -дозволити чи ні вхід користувача root по ssh. Можливі значення: "yes" - root може зайти по SSH, "no" - root НЕ може зайти по SSH, "without-password" - root може пройти аутентифікацію тільки з використанням ssh-key, "forced-commands-only" - припускає вхід користувача root по відкритому ключу, але якщо встановлено параметр command.
Sftp на базі sshd
У sshd є вбудованийsftp сервер. Налаштувавши sftp, можна надати користувачам захищений доступ до своїх файлів, обмеживши їх виключно домашньою директорією.
- Параметр Subsystem прописує таке значення: sftp internal-sftp.
- Після UsePAM yes з нового рядка:
Застосувавши подібні налаштування, всім користувачам, які перебувають у групі sftp, буде відкритий доступ до своїх домашніх директорій. Щоб користувачі з групи sftp не змогли зайти в систему SSH, їм потрібно в якості оболонки встановити /bin/false. Як приклад, нижче буде створено користувач ernest, який зможе отримати доступ до своїх файлів за допомогою sftp:
Слід врахувати, що директорії /home та /home/ernest повинні належати користувачеві та групі root, щоб спрацювала директива ChrootDirectory із файлу sshd_conf.