Как настроить 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было просто отлично.
Эмилиано
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.