Почему там два способа установить SFTP с OpenSSH и когда использовать который? Есть ли какое-либо различие между ними?
Я подразумеваю, что первый использует lib от OpenSSH, и второй говорит, "используют внутреннее", таким образом, это - также OpenSSH?
Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Оба sftp-server
и internal-sftp
являются частью OpenSSH. sftp-server
- это отдельный двоичный файл. internal-sftp
- это просто ключевое слово конфигурации, которое сообщает sshd
использовать код SFTP-сервера, встроенный в sshd
, вместо запуска другого процесса (обычно sftp-server
).
С функциональной точки зрения sftp-server
и internal-sftp
практически идентичны. Они построены из одного и того же исходного кода.
Основное преимущество internal-sftp
заключается в том, что он не требует файлов поддержки при использовании с директивой ChrootDirectory
.
] Цитаты из sshd_config (5)
страницы руководства :
Для Подсистема
директива :
Команда
sftp-server
реализует подсистему передачи файлов SFTP.В качестве альтернативы имя
internal-sftp
реализует внутрипроцессный сервер SFTP. Это может упростить настройку с помощьюChrootDirectory
для принудительного изменения корня файловой системы на клиентах.
Для ForceCommand
директива :
Указание команды
internal-sftp
приведет к принудительному использованию внутрипроцессного SFTP-сервера, который не требует файлов поддержки при использовании сChrootDirectory
.
Для ChrootDirectory
директивы :
ChrootDirectory
должен содержать необходимые файлы и каталоги для поддержки сеанса пользователя. Для интерактивного сеанса требуется как минимум оболочка, обычноsh
, и базовые/ dev
узлы, такие какnull
,zero
,stdin
,stdout
,stderr
иtty
устройства. Для сеансов передачи файлов с использованием SFTP не требуется дополнительная настройка среды, если используется внутрипроцессный sftp-сервер, хотя для сеансов, использующих ведение журнала, может потребоваться/ dev / log
внутри каталога chroot в некоторых операционных системах. (подробнее см.sftp-server
.)
Еще одним преимуществом internal-sftp
является производительность, так как для него не нужно запускать новый подпроцесс.
] internal-sftp
был добавлен намного позже (OpenSSH 4.9p1 в 2008 году?), Чем отдельный двоичный файл sftp-server
, но сейчас он используется по умолчанию.
Я считаю нет причин использовать sftp-сервер
для новых установок.
Может показаться, что sshd
может автоматически использовать internal-sftp
, когда он встречает sftp-server
, поскольку функциональность идентична и внутренняя -sftp
имеет даже указанные выше преимущества. Но есть крайние случаи, когда есть различия.
Несколько примеров:
Администратор может полагаться на конфигурацию оболочки входа, чтобы предотвратить вход определенных пользователей в систему. Переключение на internal-sftp
обойдется ограничение, поскольку оболочка входа в систему больше не задействована.
Используя двоичный файл sftp-server
(являющийся отдельным процессом), вы можете использовать некоторые хаки, такие как , запускающий SFTP под sudo
.
Для SSH-1 ( если кто-то все еще использует его), директива Subsystem
вообще не задействована. Клиент SFTP, использующий SSH-1, явно сообщает серверу, какой двоичный файл должен запускать сервер. Таким образом, у устаревших SFTP-клиентов SSH-1 жестко задано имя sftp-server
.
Вы можете заблокировать ключ authorized_key на внешнем sftp-сервере.
command="/usr/libexec/openssh/sftp-server" ssh-rsa AAAA…== user@host.com
Когда вы это делаете, ваш пользователь может sftp, но не может scp или ssh:
$ sftp host:/etc/group /tmp Connecting to host... Fetching /etc/group to /tmp/group /etc/group 100% 870 0.9KB/s 00:00
Попытка сделать что-нибудь еще просто зависает:
$ scp host:/etc/group /tmp Killed by signal 2. $ ssh host uptime Killed by signal 2.
Увы, нет простого способа заблокировать ключ на chroot, если только не модифицирован sshd_config. Это было бы действительно здорово, если бы пользователь мог обойтись без вмешательства системного менеджера.
.Существуют альтернативные реализации SFTP, которые могут быть использованы вместе с OpenSSH: