Як встановити та використовувати SFTP на серверах Linux
SFTP або SSH File Transfer Protocol – це метод безпечної передачі даних між двома комп’ютерами та більше. Це FTP, який працює поверх протоколу SSH і використовує переваги його безпеки, а також повністю підтримує його аутентифікацію.
Сьогодні рекомендується використовувати протокол SFTP замість застарілого протоколу FTP або FTP/S. SFTP є безпечним за замовчуванням, оскільки саме так працює SSH. З точки зору безпеки, SFTP також захищає вас від винюхування пароля та атак типу “людина посередині” (MiTM).
Як і SSH, SFTP захищає цілісність даних за допомогою шифрування та криптографічної хеш-функції. Він також підтримує кілька безпечних методів автентифікації, включаючи автентифікацію за допомогою пароля та ключа. Крім того, він зменшує відкритий порт сервера для зовнішньої мережі, оскільки він працює на тому ж порту, що й протокол SSH.
Передумови
У цьому посібнику ви дізнаєтеся, як налаштувати SFTP-сервер у системі Linux. Крім того, ви вивчите базову команду sftp-клієнта.
Нижче наведено поточне середовище для впровадження:
- Сервер Linux – ви можете використовувати Debian, Ubuntu, CentOS, Fedora, Rocky або будь-який інший дистрибутив Linux.
- Переконайтеся, що пакети OpenSSH доступні у вашій системі Linux.
- SFTP-клієнт – командний рядок sftp або будь-який клієнт з графічним інтерфейсом, який вам більше подобається.
Перевірка пакетів OpenSSH
Щоб налаштувати SFTP-сервер, пакети OpenSSH повинні бути встановлені у вашій системі Linux. Майже на всіх серверах дистрибутивів Linux за замовчуванням встановлені пакети OpenSSH. Але, якщо у вашій системі немає пакета OpenSSH, ви можете встановити його з офіційного репозиторію.
1. Щоб переконатися, що пакети OpenSSH встановлені у вашій системі Linux, використовуйте наступну команду.
Для серверів Debian або Ubuntu ви можете використовувати команду dpkg, наведену нижче.
dpkg -l | grep ssh
Нижче наведено вихідні дані з нашої системи Debian.
ii libssh2-1:amd64 1.9.0-2 amd64 SSH2 client-side library ii openssh-client 1:8.4p1-5 amd64 secure shell (SSH) client, for secure access to remote machines ii openssh-server 1:8.4p1-5 amd64 secure shell (SSH) server, for secure access from remote machines ii openssh-sftp-server 1:8.4p1-5 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines
Перший стовпець ‘ii‘ означає, що пакунок встановлено. Пакет ‘openssh-sftp-server‘ встановлено на системі Debian/Ubuntu.
Ви можете використовувати наведену нижче команду rpm для користувачів RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux.
rpm -qa | grep ssh
Створення групи та користувача
На цьому кроці ви створите нову групу та користувача для SFTP-сервера. Користувачам цієї групи буде дозволено доступ до сервера SFTP. З міркувань безпеки користувачі SFTP не можуть отримати доступ до служби SSH; вони можуть отримати доступ лише до SFTP-сервера.
1. Виконайте наступну команду, щоб створити нову групу ‘sftpgroup‘.
sudo groupadd sftpgroup
2. Створіть нового користувача ‘sftpuser‘ за допомогою наступної команди.
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
Детальні параметри:
- -G : автоматично додавати користувача до ‘sftpgroup‘.
- -d : вказати домашній каталог для нового користувача.
- -s : встановити за замовчуванням для нового користувача ‘/sbin/nologin‘, що означає, що користувач не може отримати доступ до сервера SSH.
3. Далі створіть пароль для користувача ‘sftpuser‘ за допомогою наведеної нижче команди.
passwd sftpuser
Введіть свій надійний пароль і повторіть, а потім натисніть «Enter» для підтвердження.
Щоб додати більше користувачів, повторіть етапи номер 2 і 3, і найголовніше, всі користувачі SFTP повинні бути в групі ‘sftpgroup‘ без доступу до оболонки через SSH.
Налаштуйте директорію Chroot Jail
Після створення нової групи та користувача необхідно створити та налаштувати каталог chroot для користувачів SFTP.
1. Для користувача ‘sftpuser’ новий домашній каталог буде за адресою ‘/srv/sftpuser’. Виконайте наведену нижче команду, щоб створити його.
mkdir -p /srv/sftpuser
2. Щоб налаштувати chroot для користувача ‘sftpuser‘, ви повинні змінити право власності на кореневий каталог користувача, але залишитися групою для читання та виконання без доступу на запис.
Змініть власника каталогу на користувач ‘root’ за допомогою наступної команди.
sudo chown root /srv/sftpuser
Надайте групі дозвіл на читання і виконання, але не на запис.
sudo chmod g+rx /srv/sftpuser
3. Далі створіть новий каталог ‘data’ у каталозі ‘/srv/sftpuser‘ і змініть право власності на цей каталог ‘data‘ користувача ‘sftpuser‘.
mkdir -p /srv/sftpuser/data chown sftpuser:sftpuser /srv/sftpuser/data
Поки що нижче наведено детальну конфігурацію для каталогу користувачів SFTP.
- Каталог ‘/srv/sftuser’ є домашнім каталогом за замовчуванням.
- Користувач ‘sftpuser‘ не може записувати до каталогу ‘/srv/sftpuser‘, але може читати в цьому каталозі.
- Користувач ‘sftpuser‘ може завантажувати файли на сервер SFTP у директорії ‘/srv/sftpuser/data‘.
Увімкніть SFTP на SSH-сервері
Щоб увімкнути сервер SFTP на OpenSSH, вам слід відредагувати конфігурацію SSH ‘/etc/ssh/sshd_config’.
1. Відредагуйте конфігурацію ssh ‘/etc/ssh/sshd_config‘ за допомогою nano або vim.
sudo nano /etc/ssh/sshd_config
2. Прокоментуйте наступну конфігурацію, щоб вимкнути автономну функцію ‘sftp-server‘.
#Subsystem sftp /usr/lib/openssh/sftp-server
3. Вставте наступну конфігурацію в нижню частину лінії.
Subsystem sftp internal-sftp Match Group sftpgroup ChrootDirectory %h X11Forwarding no AllowTCPForwarding no ForceCommand internal-sftp
Збережіть конфігурацію та вийдіть.
Детальна конфігурація:
- Замість використання підпроцесу ‘sftp-server‘, ми використовуємо ‘internal-sftp‘.
- Увімкнено сервер SFTP для групи ‘sftpgroup‘.
4. Щоб застосувати нову конфігурацію, перезапустіть службу ssh за допомогою наведеної нижче команди.
sudo systemctl restart sshd
Сервер SFTP готовий і доступний, і він працює на тому ж порту, що й служба SSH.
Доступ до SFTP-сервера
На стороні клієнта ми будемо використовувати командний рядок sftp, який встановлений за замовчуванням у більшості дистрибутивів Linux. Але ви також можете використовувати інший клієнт командного рядка або FTP-клієнт з графічним інтерфейсом, наприклад FileZilla, Cyberduck тощо.
1. Щоб підключитися до сервера SFTP, виконайте команду sftp, як показано нижче.
sftp ftpuser@SERVER-IP
Якщо ваш SFTP та/або SSH-сервер працює на спеціальному порту, ви можете використовувати команду sftp, як показано нижче.
sftp -P PORT ftpuser@SERVER-IP
Введіть пароль для ‘sftpuser‘.
2. Після підключення до сервера SFTP виконайте наступну команду.
Показати поточний шлях до робочого каталогу та вивести список усіх доступних файлів та каталогів.
pwd ls
3. Завантажте локальний файл на сервер SFTP у директорії ‘/‘, що призведе до ‘permission denied‘, оскільки це каталог chroot.
put /path/to/file/on/local /
4. Завантажте локальний файл у директорію ‘/data/‘ на SFTP-сервері. Якщо ваша конфігурація правильна, ваш файл буде завантажено в директорію ‘/data/‘.
put /path/to/file1/on/local1 /data/ put /path/to/file2/on/local /data/
5. Тепер перевірте доступні файли в каталозі ‘/data‘ за допомогою наступної команди.
ls /data/
І ви побачите свій файл, завантажений на SFTP-сервер.
Висновок
Вітаємо! Ви успішно налаштували SFTP-сервер у системі Linux. Цей тип конфігурації може бути застосований у більшості систем Linux з встановленим OpenSSH поверх неї. Крім того, ви дізналися, як налаштувати каталог chroot для користувачів SFTP і вивчили базову команду sftp-клієнта.