Настройка 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)
- Убедиться в наличии openssh-server.
- Создать группу sftpusers.
- Создать пользователей с shell /sbin/nologin и домашним каталогом /upload.
- Создать /data/
/upload, выставить права (root:sftpusers на /data/ , пользователь на upload). - Добавить Match Group в sshd_config и ForceCommand internal-sftp.
- Перезапустить 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 проверок.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента