Оба sftp-server
и internal-sftp
являются частью OpenSSH. sftp-server
это отдельный бинарный файл internal-sftp
это просто ключевое слово конфигурации, которое указывает sshd
использовать встроенный код сервера SFTP sshd
вместо запуска другого процесса (обычно sftp-server
).
С функциональной точки зрения sftp-server
и internal-sftp
практически идентичны. Они построены из одного и того же исходного кода.
Основным преимуществом internal-sftp
является то, что он не требует поддержки файлов при использовании с ChrootDirectory
директивой .
Цитаты из sshd_config(5)
справочной страницы :
Еще одним преимуществом internal-sftp
является производительность, так как для этого не нужно запускать новый подпроцесс.
Он internal-sftp
был добавлен намного позже (OpenSSH 4.9p1 в 2008 году?), Чем автономный sftp-server
бинарный файл, но сейчас он используется по умолчанию.
Я считаю, что нет причин использовать sftp-server
для новых установок.
Может показаться, что его sshd
можно автоматически использовать internal-sftp
, когда он встречается sftp-server
, так как функциональность идентична и internal-sftp
имеет даже вышеуказанные преимущества. Но есть крайние случаи, когда есть различия.
Несколько примеров:
Администратор может полагаться на конфигурацию оболочки входа, чтобы предотвратить вход определенных пользователей. Переключение на режим internal-sftp
обойдет ограничение, так как оболочка входа больше не используется.
Используя sftp-server
бинарный файл (будучи автономным процессом), вы можете использовать некоторые хаки, такие как запуск SFTPsudo
.
Для SSH-1 (если кто-то все еще его использует) Subsystem
директива вообще не задействована. SFTP-клиент, использующий SSH-1, в явном виде сообщает серверу, какой двоичный файл должен выполнять сервер. Таким образом, устаревшие SFTP-клиенты SSH-1 имеют sftp-server
жестко запрограммированное имя.
ForceCommand internal-sftp
должен достичь того же самого