Как настроить SFTP-сервер openSSH в Linux?

10

Я хочу настроить sftp-сервер для общего доступа к каталогу, но я не знаю, как его изменить /etc/ssh/sshd_config.

Мои требования:

1) Логин не должен использовать сертификаты, только пароль (т.е. авторизация использует метод пароля)

2) Я хочу войти в систему с пользователем: ftp, пароль: foo и поделиться каталогом / home / ftp.

3) У меня есть приложение, которое время от времени должно загружать файл с сервера, мне не нужно входить в систему с полнофункциональным клиентом.

До сих пор я добавил следующие строки в / etc / ssh / sshd_config:

Protocol 2
Subsystem sftp /usr/libexec/sftp-server
Match User ftp
   ForceCommand internal-sftp
   ChrootDirectory /home/ftp

Все остальное комментируется.

/home/ftp это пустой каталог в данный момент.

Доступ работает, если я пытаюсь загрузить файл с использованием учетных данных root, но не работает, если я использую учетные данные ftp. Нужно ли устанавливать оболочку входа? Нужно ли как-то заполнять / home / ftp?

РЕДАКТИРОВАТЬ: Это мой журнал SSHD:

subsystem request for sftp
debug1: subsystem: exec() internal-sftp
debug1: Forced command (config) 'internal-sftp '
debug2: fd 3 setting TCP_NODELAY
debug2: fd 9 setting O_NONBLOCK
debug2: fd 8 setting O_NONBLOCK
debug1: Received SIGCHLD.
debug1: session_by_pid: pid 17613
debug1: session_exit_message: session 0 channel 0 pid 17613
debug2: channel 0: request exit-status confirm 0
debug1: session_exit_message: release channel 0
debug2: channel 0: write failed
debug2: channel 0: close_write
debug2: channel 0: send eow
debug2: channel 0: output open -> closed
debug2: channel 0: read<=0 rfd 9 len 0
debug2: channel 0: read failed
debug2: channel 0: close_read
debug2: channel 0: input open -> drain
debug2: channel 0: ibuf empty
debug2: channel 0: send eof
debug2: channel 0: input drain -> closed
debug2: channel 0: send close
debug2: notify_done: reading
debug3: channel 0: will not send data after close
debug3: channel 0: will not send data after close
User child is on pid 17611
debug3: mm_request_receive entering

* Клиент зависает здесь (до истечения времени ожидания) *

Обратите внимание, опять же, что если я войду в систему как «root», файл загрузится правильно. Он также загружается правильно, если я закомментирую последние три строки файла конфигурации (то есть Matchстроку и следующие 2).

Эмилиано
источник
Вы пробовали только указать один из матча вариантов? Что происходит, когда вы используете настоящий SFTP-клиент? Можно ли по-прежнему подключаться с помощью обычного клиента SSH, например ssh, или PuTTY в Windows? Какую версию OpenSSH вы используете?
Даниэль Бек

Ответы:

7

Вам нужно убедиться, что /home/ftpон принадлежит, rootа эта группа и другие не имеют прав на запись, например chmod 0755. Вам нужно добавить подкаталоги для ftpдобавления файлов в.


Вам также нужна internal-sftpподсистема, в противном случае вам необходимо обеспечить надлежащую chrootсреду в /home/ftp:

Subsystem sftp internal-sftp

Чтобы запретить все виды входа без пароля, введите

ChallengeResponseAuthentication no
GSSAPIAuthentication no
PubkeyAuthentication no

Они активированы по умолчанию.

Даниэль Бек
источник
Замена строки моей подсистемы вашей (и установка разрешения для каталога) приводит к исчезновению строки ошибки, однако мои клиентские программы «зависают» и не загружают нужный мне файл (я могу загрузить его, используя учетные данные root). Есть ли способ сделать вывод sshd более подробным?
Эмилиано
Попробуйте поочередно добавить только один элемент конфигурации и проверьте, можете ли вы подключиться, чтобы определить, какой из параметров является ошибочным, или это может быть комбинация параметров. У вас должен быть какой-то вывод /var/log/secure, по крайней мере, именно там я получаю его в моей системе.
Даниэль Бек
Я повысил свой уровень входа с помощью директивы LogLevel. Я могу прочитать строку в /var/log/messages. У меня есть следующее: с Failed none for ftp [...]последующим Accepted password for ftp [...]и User child is on pid 7658. Клиент зависает, а затем время ожидания
Эмилиано
@happy_emi Подумайте о том, чтобы добавить эту информацию в свой вопрос.
Даниэль Бек
Похоже, это была проблема прав доступа к каталогу. sshd_configбыло просто отлично.
Эмилиано