Как настроить защищенное соединение по протоколу SFTP на сервере Linux, запретив пользователям доступ к оболочке shell?
Настройка защищённого SFTP-соединения на сервере Linux с запретом доступа к оболочке shell — стандартная задача системного администратора. Ниже приведено подробное пошаговое руководство.
## 1. Создание группы и пользователя для SFTP
Сначала создайте отдельную группу для SFTP-пользователей:
sudo groupadd sftpusers
Затем создайте пользователя, указав в качестве оболочки `/sbin/nologin` или `/bin/false`, чтобы запретить вход через SSH-shell:
sudo useradd -m -G sftpusers -s /sbin/nologin имя_пользователя
sudo passwd имя_пользователя
## 2. Настройка конфигурационного файла SSH
Откройте файл `/etc/ssh/sshd_config` в текстовом редакторе:
sudo nano /etc/ssh/sshd_config
Найдите строку `Subsystem sftp` и замените её на внутренний обработчик:
Subsystem sftp internal-sftp
В конец файла добавьте блок для группы `sftpusers`:
Match Group sftpusers
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PermitTunnel no
AllowAgentForwarding no
— `ChrootDirectory` — ограничивает пользователя его домашней директорией (chroot-окружение).
— `ForceCommand internal-sftp` — принудительно запускает только SFTP, игнорируя любые попытки запустить shell.
— Остальные директивы отключают туннелирование и проброс портов для безопасности.
## 3. Настройка прав на директорию chroot
Важное требование OpenSSH: директория, указанная в `ChrootDirectory`, должна принадлежать `root` и не иметь прав записи для других пользователей:
sudo chown root:root /home/имя_пользователя
sudo chmod 755 /home/имя_пользователя
Для того чтобы пользователь мог загружать файлы, создайте внутри его домашней директории поддиректорию с соответствующими правами:
sudo mkdir /home/имя_пользователя/upload
sudo chown имя_пользователя:sftpusers /home/имя_пользователя/upload
sudo chmod 755 /home/имя_пользователя/upload
## 4. Перезапуск службы SSH
После внесения изменений перезапустите SSH-демон:
sudo systemctl restart sshd
Проверьте статус:
sudo systemctl status sshd
## 5. Проверка подключения
Подключитесь с клиентской машины:
sftp имя_пользователя@адрес_сервера
Попытка подключиться через обычный SSH должна завершиться отказом:
ssh имя_пользователя@адрес_сервера
# Ответ: This account is currently not available.
## 6. Дополнительные меры безопасности
— Настройте файрвол (`ufw` или `firewalld`), разрешив только порт 22 с нужных IP-адресов.
— Используйте аутентификацию по ключу вместо пароля.
— Включите логирование SFTP-сессий через `LogLevel VERBOSE` в `sshd_config`.
— Периодически проверяйте журналы `/var/log/auth.log` или `/var/log/secure`.
Такая конфигурация обеспечивает безопасный обмен файлами через SFTP, полностью изолируя пользователей от оболочки и файловой системы сервера.
