Сколь бы не развивался http, сколь бы веб не захватывал сферы жизни человека, ftp продолжает жить. Пользователи домашних ПК загружают файлы по http, пользуются web-фалообменниками, но всё же ftp продолжает использоваться. Например, ftp — зачастую один из интерфейсов на хостингах. Через него можно «залить сайт» на хостинг, многие редакторы предоставляют возможность редактирования удалённых файлов через ftp…
Но ftp не безопасен. Данные передаются по нему в открытом виде. И, если ваш ресурс нужен для небольшого количества людей, опасности нет. Но если нет? Здесь нам на помощь придёт SFTP — FTP над SSH — тот же ftp, но по шифрованному каналу.
Итак, в этой заметке будет рассказано, как поднять sftp на FreeBSD. А так же, будут описаны подводные камни, которые могу встретиться по дороге. По крайней мере, те, что встретились мне.
Установка SFTP на FreeBSD
Во-первых, хочется сказать, что в некоторых ssh демонах присутствует поддержка sftp. Собственно, её мы и будем использовать. Поэтому, сначала надо проверить, есть ли у нас уже ssh демон. Это можно сделать, выполнив команду
ps aux | grep ssh
— запущен ли какой из них. Заглянуть в /etc/rc.d/ и /usr/local/etc/rc.d на предмет ssh демона также будет полезно. Если их нет — устанавливаем.
Из портов:
cd /usr/ports/security/openssh-portable make install clean
С помощью пакетного менеджера:
pkg_add -r openssh-portable
Настройка SFTP
Во-первых, добавим ssh демона в /etc/rc.conf, дабы он поднимался автоматически после загрузки системы, старта jail’а.
/etc/rc.conf openssh_enable="YES" # если используется openssh sshd_enable="YES" # если используется стандартный sshd
Теперь надо создать группу пользователей, которым будет разрешён доступ по sftp.
pw groupadd sftponly
И добавить пользователей в эту группу.
pw usermod -G sftponly
После чего настроить ssh демона. В случае openssh это будет /usr/local/etc/ssh/sshd_config, если же sshd — то /etc/ssh/sshd_config.
# override default of no subsystems Subsystem sftp internal-sftp # /usr/local/libexec/sftp-server AllowGroups wheel sftponly Match group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
Вместо %h (что будет интерпретировано как домашняя папка), можно поставить любую. Тут есть один момент, но о нём позже…
Директива ChrootDirectory указывает на то, что после захода на сервер пользователь будет помещён в chroot. Удобная вещь.
Рестартуем ssh демона и пробуем зайти на сервер по sftp.
/usr/local/etc/rc.d/openssh restart
Не работает ChrootDirectory
То есть не происходит chroot после захода пользователя на сервер. Это поведение ssh демона мне непонятно. Но поискав в google информацию на эту тему, узнал, что ssh не хочет chrootиться в директорию, владелец которой не root, или если кто-то кроме него имеет право на изменение файлов.
Не забудьте также, что на sftp действуют те же правила политики безопасности, что и на пользователя в системе.
а
«Если их нет — устанавливаем»
Такого не может быть. На всех FreeBSD сразу включают автозапуск сервера sshd.
Как позднее оказалось, это действительно так. Но когда я настраивал, sshd, установленный в системе был не из пакета openssh — поэтому я его проигнорировал.
«И добавить пользователей в эту группу.
pw usermod -g sftponly»
Это команда изменяет основную группу пользователя, а не добавляет. А добавляет ключ «-G».
Конечно, Вы правы. Не понимаю, как мог так грубо ошибиться.