Гид по технологиям

Настройка SFTP-сервера на CentOS

• 6 min read • DevOps • Обновлено 21 Nov 2025
SFTP на CentOS: быстрая настройка и защита
SFTP на CentOS: быстрая настройка и защита

Что такое SFTP и зачем он нужен

SFTP (SSH File Transfer Protocol или Secure File Transfer Protocol) — это протокол передачи файлов поверх SSH. В отличие от классического FTP, он шифрует трафик и аутентификацию, поэтому безопаснее при передаче файлов через сеть. SFTP использует SSH‑демон (sshd), дополнительных пакетов для базовой работы обычно не требуется.

Основные цели этого руководства

  • Настроить SFTP‑доступ для ограниченных пользователей.
  • Убедиться, что пользователи могут обмениваться файлами, но не получают полноценный SSH‑доступ к серверу.
  • Протестировать подключение с клиентской машины.

1. Предварительная заметка

Тесты в этом руководстве выполнялись на CentOS 7 (64‑бит). Аналогичные шаги подойдут и для CentOS 6 с учётом отличий в systemd/init. Конфигурация ограничивает доступ через SSH, предоставляя только SFTP (internal-sftp) и chroot в заданную директорию.

2. Установка SFTP

Для SFTP дополнительных пакетов обычно не требуется: используется уже установленный OpenSSH (sshd). Проверьте наличие пакетов командой:

rpm -qa|grep ssh

Ожидаемый пример вывода (оставьте как есть — это служебный вывод):

[root@localhost ~]# rpm -qa|grep ssh  
libssh2-1.4.3-10.el7_2.1.x86_64  
openssh-7.4p1-13.el7_4.x86_64  
openssh-server-7.4p1-13.el7_4.x86_64  
openssh-clients-7.4p1-13.el7_4.x86_64

Если openssh-server установлен и запущен — можно переходить к настройке.

3. Конфигурация SFTP

Ниже — рекомендуемый порядок действий. Я использую каталог /data как родительскую директорию для всех SFTP‑пользователей. Для безопасности корневая директория chroot должна принадлежать root и быть защищена от записи для других.

Создайте базовую директорию и разрешения

mkdir -p /data/sftp
chmod 701 /data

Пояснение: /data — родительский каталог; chmod 701 позволяет пользователям заходить в поддиректории, но не просматривать содержимое /data напрямую.

Создайте группу для SFTP‑пользователей

groupadd sftpusers

Создайте пользователя и задайте shell нулевого доступа

Пример создаёт пользователя mysftpuser, который принадлежит группе sftpusers и имеет домашнюю директорию /upload (внутри chroot):

useradd -g sftpusers -d /upload -s /sbin/nologin mysftpuser
passwd mysftpuser

Ключевые моменты:

  • -g sftpusers — назначает основную группу.
  • -d /upload — домашняя директория внутри chroot (пользователь увидит её как /upload).
  • -s /sbin/nologin — запрещает интерактивный SSH‑шелл; пользователь сможет только SFTP.

Создайте домашнюю директорию пользователя внутри /data и установите владельцев

mkdir -p /data/mysftpuser/upload
chown -R root:sftpusers /data/mysftpuser
chown -R mysftpuser:sftpusers /data/mysftpuser/upload

Проверка прав (пример вывода; сохраняйте как есть):

[root@localhost ~]# ls -ld /data/  
drwx-----x. 5 root root 54 Mar 22 14:29 /data/  

[root@localhost ~]# ls -ld /data/mysftpuser  
drwxr-xr-x. 3 root sftpusers 20 Mar 22 14:29 /data/mysftpuser

[root@localhost ~]# ls -ld /data/mysftpuser/upload  
drwxr-xr-x. 2 mysftpuser sftpusers 6 Mar 22 14:29 /data/mysftpuser/upload

[root@localhost ~]# cat /etc/passwd|grep mysftpuser  
mysftpuser:x:1001:1001::/upload:/sbin/nologin

Важно: директория, указанная в ChrootDirectory, должна принадлежать root и не иметь прав на запись для группы или других. Поддомен для записи — создаётся внутри (upload) и принадлежит самому пользователю.

Настройте sshd для использования chroot и internal-sftp

Отредактируйте файл /etc/ssh/sshd_config (например, nano /etc/ssh/sshd_config) и добавьте в конец файла:

Match Group sftpusers
ChrootDirectory /data/%u
ForceCommand internal-sftp

Пояснение:

  • Match Group sftpusers — применяет правила ко всем пользователям группы sftpusers.
  • ChrootDirectory /data/%u — размещает пользователя в chroot по шаблону /data/<имя_пользователя>.
  • ForceCommand internal-sftp — принудительно использует встроенный SFTP, не давая shell.

Перезапуск sshd

Проверьте статус и перезапустите сервис:

service sshd status
service sshd restart

Ожидаемый пример вывода для статуса (служебный):

Redirecting to /bin/systemctl status sshd.service  
? sshd.service - OpenSSH server daemon  
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)  
Active: active (running) since Thu 2018-03-22 14:21:38 CET; 16min ago  
Docs: man:sshd(8)  
man:sshd_config(5)  
Main PID: 942 (sshd)  
CGroup: /system.slice/sshd.service  
??942 /usr/sbin/sshd -D

Если перезапуск не удался — проверьте синтаксис sshd_config командой:

sshd -t

(Команда ничего не выводит при успешной проверке; при ошибке выдаст сообщение об ошибке.)

4. Тестирование SFTP

Проверьте, что сервер слушает порт 22 (SSH) с клиента — например, с TEST01 используйте nmap. При необходимости установите nmap:

yum install nmap -y

Сканирование порта:

nmap -n 192.168.1.100

Примерный вывод показывает, что открыт только порт 22:

PORT STATE SERVICE
22/tcp open ssh

Подключение по SFTP с клиента:

sftp [email protected]

Пример сессии (сохраните как есть):

[root@TEST01 /]# sftp [email protected]  
[email protected]'s password:  
Connected to 192.168.1.100.  
sftp> pwd  
Remote working directory: /upload  
sftp>

Создайте тестовый файл на сервере и скачайте его с клиента:

cd /data/mysftpuser/upload
touch testing_file.txt

С клиента:

sftp [email protected]
# затем внутри сессии
ls
get testing_file.txt
quit

Проверьте, что попытка SSH‑входа интерактивным шеллом блокируется:

ssh [email protected]

Ожидаемый вывод:

This service allows sftp connections only.
Connection to 192.168.1.100 closed.

Это подтверждает, что пользователь может только работать через SFTP и не получает shell‑доступ.

Полезные рекомендации по безопасности

  • Используйте ключи SSH для учётных записей администраторов и по возможности для SFTP‑пользователей; при использовании паролей — требуйте сложные пароли.
  • Ограничьте доступ к SSH через файерволл (firewalld/iptables) только с доверенных IP, если это возможно.
  • Включите аудит (auditd) или ведение логов для сессий SFTP, чтобы отслеживать загрузки/скачивания.
  • Регулярно обновляйте OpenSSH и систему безопасности (yum update).
  • Проверяйте права на каталоги: ChrootDirectory должен принадлежать root и быть недоступен для записи другим.

Важно: не используйте chroot директорию, в которой есть записи от пользователей, иначе sshd отклонит chroot.

Частые ошибки и отладка

  • Проблема: после настройки при подключении SFTP выдаёт «Disconnected: No such file or directory». Причина: неверный путь ChrootDirectory или права владельца. Проверьте, что /data/ принадлежит root и имеет права без записи для группы.
  • Проблема: sshd не перезапускается. Решение: выполните sshd -t для проверки конфигурации и просмотрите /var/log/secure или journalctl -u sshd.
  • Проблема: пользователь видит не ту директорию. Помните: -d /upload задаёт домашний каталог внутри chroot; реальный путь на сервере — /data//upload.

Роли и чек‑листы (кто что делает)

Администратор:

  • Создать группу sftpusers.
  • Создать пользователей и задать shell /sbin/nologin.
  • Настроить /data и права на подкаталоги.
  • Править /etc/ssh/sshd_config и перезапустить sshd.
  • Настроить резервные копии и аудит.

Пользователь (mysftpuser):

  • Подключается по sftp к IP/домену сервера.
  • Работает в /upload (внутри SFTP‑сессии).
  • Не ожидает SSH‑шелла и не может выполнять командный доступ.

Критерии приёмки

  • SFTP соединение успешно устанавливается с клиента.
  • Пользователь видит рабочую директорию /upload и может загружать/скачивать файлы.
  • Попытка интерактивного SSH входа для sftp‑пользователя блокируется с сообщением о доступе только через SFTP.
  • Прописанные права на /data и /data/ соответствуют требованиям: chroot — root-owned, каталог для записи — принадлежит пользователю.

Короткая методика (mini‑methodology)

  1. Убедиться в наличии openssh-server.
  2. Создать группу sftpusers.
  3. Создать пользователей с shell /sbin/nologin и домашним каталогом /upload.
  4. Создать /data//upload, выставить права (root:sftpusers на /data/, пользователь на upload).
  5. Добавить Match Group в sshd_config и ForceCommand internal-sftp.
  6. Перезапустить sshd и протестировать подключение.

Полезная справочная информация (факт‑бокс)

  • Порт: 22/tcp (SSH/SFTP).
  • Обязательное требование: ChrootDirectory должен принадлежать root.
  • Рекомендуемый shell для SFTP‑пользователя: /sbin/nologin.
  • Типичный путь chroot: /data/%u (где %u — имя пользователя).

Короткий глоссарий (1‑строчные определения)

  • chroot — механизм смены корневой директории для процесса; ограничивает видимую файловую систему.
  • internal-sftp — встроенный в OpenSSH модуль SFTP, не запускающий shell.
  • nologin — shell, запрещающий интерактивный вход.

Краткое резюме

Вы настроили SFTP на CentOS, создали группу и пользователя, ограничили доступ с помощью chroot и internal-sftp и проверили работу с клиента. Такой подход даёт безопасный обмен файлами без предоставления shell‑доступа.

Важно: поддерживайте актуальность OpenSSH, ревизируйте права на директории и при необходимости ограничивайте доступ по IP через firewall.

–

Если нужно, могу подготовить: шаблон скрипта для массового создания SFTP‑пользователей, или mermaid‑диаграмму процесса (deployment flow) и примеры systemd‑unit проверок.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро