OpenSSH: Различие между внутренним-sftp и sftp-сервером

Почему там два способа установить SFTP с OpenSSH и когда использовать который? Есть ли какое-либо различие между ними?

Я подразумеваю, что первый использует lib от OpenSSH, и второй говорит, "используют внутреннее", таким образом, это - также OpenSSH?

Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
81
задан 8 July 2015 в 10:04
4 ответа

Оба 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 .

94
ответ дан 28 November 2019 в 19:27

Вы можете заблокировать ключ 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. Это было бы действительно здорово, если бы пользователь мог обойтись без вмешательства системного менеджера.

.
6
ответ дан 28 November 2019 в 19:27

Существуют альтернативные реализации SFTP, которые могут быть использованы вместе с OpenSSH:

7
ответ дан 28 November 2019 в 19:27

Если вам нужно только заблокировать учетная запись для использования только SFTP, просто укажите для их учетной записи оболочку по умолчанию / sbin / nologin

-2
ответ дан 30 December 2019 в 12:20

Теги

Похожие вопросы