Рейтинг:1

SFTP изменить каталог по умолчанию

флаг tn

Я настраиваю SFTP для группы пользователей, которым я хочу иметь доступ только к SFTP, для загрузки файлов на сервер. Я уже заключил их в свои домашние каталоги и заблокировал вход в оболочку. В каждом домашнем каталоге есть подпапка для получения загрузок. Я хотел бы, чтобы SFTP-соединения автоматически менялись на эту папку загрузки при входе в систему. Довольно стандартный.

я использую ForceCommand для успешного достижения этого на старом сервере.Однако на новом сервере, который я сейчас готовлю, это не работает. Почему?

/etc/ssh/sshd_config.d/sftpgroup.conf
Соответствие группы ftpgroup
  # Следующие две директивы заставляют ftpgroup стать chroot
  # и иметь только SFTP. Никакой другой настройки chroot не требуется.
  ChrootDirectory /home/ftp_users/%u
  ForceCommand внутренний sftp -u 0002
  # Для дополнительной паранойи запретите все типы переадресации портов.
  AllowTcpForwarding нет
  GatewayPorts нет
  X11Номер переадресации
  # Принудительное локальное ведение журнала
  ForceCommand /usr/lib/openssh/sftp-server -l ПОДРОБНО
  # Изменить каталог по умолчанию на ~/upload
  ForceCommand cd /upload
/var/log/auth.log с LogLevel DEBUG3
9 марта 15:18:03 MyServer sshd [393644]: debug1: userauth-запрос для пользователя myuser service метод ssh-соединения нет [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug1: попытка 0 сбоев 0 [предварительная проверка]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_getpwnamразрешить ввод [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: введите 8 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_getpwnamallow: ожидание MONITOR_ANS_PWNAM [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive_expect ввод: введите 9 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод
9 марта 15:18:03 MyServer sshd[393644]: debug3: monitor_read: проверка запроса 8
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_answer_pwnamallow
9 марта 15:18:03 MyServer sshd[393644]: debug2: parse_server_config_depth: config reprocess config len 383
9 марта 15:18:03 MyServer sshd[393644]: debug2: parse_server_config_depth: config /etc/ssh/sshd_config.d/sftpgroup.conf len 228
9 марта 15:18:03 MyServer sshd[393644]: debug3: проверка совпадения для пользователя «Группа ftpgroup,! sftpgroup» myuser host 1.2.3.4 addr 1.2.3.4 laddr 10.0.0.4 lport 22
9 марта 15:18:03 MyServer sshd[393644]: debug1: пользователь myuser не соответствует списку групп ftpgroup,!sftpgroup в строке 4
9 марта, 15:18:03 MyServer sshd[393644]: debug3: совпадение не найдено
9 марта 15:18:03 MyServer sshd [393644]: debug3: проверка соответствия для пользователя «Группа ftpgroup» myuser host 1.2.3.4 addr 1.2.3.4 laddr 10.0.0.4 lport 22
9 марта 15:18:03 MyServer sshd[393644]: debug1: пользователь myuser соответствует списку групп ftpgroup в строке 9
9 марта 15:18:03 MyServer sshd[393644]: debug3: совпадение найдено
9 марта 15:18:03 MyServer sshd[393644]: debug3: /etc/ssh/sshd_config.d/sftpgroup.conf:12 настройка ChrootDirectory /home/ftp_users/%u
9 марта 15:18:03 MyServer sshd[393644]: debug3: /etc/ssh/sshd_config.d/sftpgroup.conf:13 настройка ForceCommand internal-sftp -u 0002
9 марта 15:18:03 MyServer sshd[393644]: debug3: /etc/ssh/sshd_config.d/sftpgroup.conf:15 параметр AllowTcpForwarding нет
9 марта 15:18:03 MyServer sshd[393644]: debug3: /etc/ssh/sshd_config.d/sftpgroup.conf:16 параметр GatewayPorts нет
9 марта 15:18:03 MyServer sshd[393644]: debug3: /etc/ssh/sshd_config.d/sftpgroup.conf:17 установка X11Forwarding нет
9 марта 15:18:03 MyServer sshd[393644]: debug3: /etc/ssh/sshd_config.d/sftpgroup.conf:21 настройка ForceCommand cd /upload
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_answer_pwnamallow: отправка MONITOR_ANS_PWNAM: 1
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: введите 9
9 марта 15:18:03 MyServer sshd[393644]: debug2: monitor_read: 8 используется один раз, сейчас отключается
9 марта 15:18:03 MyServer sshd[393644]: debug2: input_userauth_request: настройка authctxt для myuser [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_start_pam ввод [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: введите 100 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_inform_authserv, ввод [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: тип 4 [предварительная авторизация]
9 марта, 15:18:03 MyServer sshd[393644]: debug2: input_userauth_request: попробуйте метод none [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: user_specific_delay: пользовательская задержка 0,000 мс [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: sure_minimum_time_since: истекло 2,862 мс, задержка 4,136 мс (запрошено 6,998 мс) [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод
9 марта 15:18:03 MyServer sshd[393644]: debug3: monitor_read: проверка запроса 100
9 марта 15:18:03 MyServer sshd[393644]: debug1: PAM: инициализация для «myuser»
9 марта 15:18:03 MyServer sshd[393644]: debug1: PAM: установка PAM_RHOST на «1.2.3.4»
9 марта 15:18:03 MyServer sshd[393644]: debug1: PAM: установка PAM_TTY на «ssh»
9 марта, 15:18:03 MyServer sshd[393644]: debug2: monitor_read: 100 используется один раз, сейчас отключается
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод
9 марта 15:18:03 MyServer sshd[393644]: debug3: monitor_read: проверка запроса 4
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_answer_authserv: service=ssh-connection, style=, role=
9 марта, 15:18:03 MyServer sshd[393644]: debug2: monitor_read: 4 используется один раз, сейчас отключается
9 марта 15:18:03 MyServer sshd[393644]: debug3: userauth_finish: частичное сбой = 0 следующие методы = "publickey, пароль" [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: отправить пакет: тип 51 [предварительная проверка]
9 марта 15:18:03 MyServer sshd[393644]: debug3: получить пакет: тип 2 [preauth]
9 марта, 15:18:03 MyServer sshd[393644]: debug3: получен SSH2_MSG_IGNORE [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: получить пакет: тип 50 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug1: userauth-запрос для пользователя myuser service пароль метода ssh-соединения [preauth]
9 марта, 15:18:03 MyServer sshd[393644]: debug1: попытка 1 сбой 0 [предварительная проверка]
9 марта 15:18:03 MyServer sshd[393644]: debug2: input_userauth_request: попробуйте пароль метода [preauth]
9 марта, 15:18:03 MyServer sshd[393644]: debug3: ввод пароля mm_auth_password [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: введите 12 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_auth_password: ожидание MONITOR_ANS_AUTHPASSWORD [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive_expect ввод: введите 13 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод
9 марта 15:18:03 MyServer sshd[393644]: debug3: monitor_read: проверка запроса 12
9 марта 15:18:03 MyServer sshd[393644]: debug3: PAM: sshpam_passwd_conv вызван с 1 сообщением
9 марта 15:18:03 MyServer sshd[393644]: debug1: PAM: аутентификация по паролю принята для myuser
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_answer_authpassword: результат отправки 1
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: введите 13
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive_expect ввод: введите 102
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод
9 марта 15:18:03 MyServer sshd[393644]: debug1: do_pam_account: вызывается
9 марта 15:18:03 MyServer sshd[393644]: debug2: do_pam_account: информация аутентификации в SSH_AUTH_INFO_0
9 марта 15:18:03 MyServer sshd[393644]: debug3: PAM: do_pam_account pam_acct_mgmt = 0 (Успех)
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: введите 103
9 марта 15:18:03 MyServer sshd[393644]: Принят пароль для myuser с порта 1.2.3.4 55095 ssh2
9 марта 15:18:03 MyServer sshd[393644]: debug1: monitor_child_preauth: мой пользователь прошел проверку подлинности привилегированным процессом
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_get_keystate: Ожидание новых ключей
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive_expect ввод: введите 26
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_get_keystate: ПОЛУЧИЛ новые ключи
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_auth_password: пользователь аутентифицирован [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: user_specific_delay: пользовательская задержка 0,000 мс [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: sure_minimum_time_since: истекло 7,172 мс, задержка 6,825 мс (запрошено 6,998 мс) [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_do_pam_account ввод [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: введите 102 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive_expect ввод: введите 103 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_receive ввод [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_do_pam_account возвращает 1 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: отправить пакет: тип 52 [предварительная проверка]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_request_send ввод: введите 26 [preauth]
9 марта 15:18:03 MyServer sshd[393644]: debug3: mm_send_keystate: состояние отправки завершено [предварительная проверка]
9 марта 15:18:03 MyServer sshd[393644]: debug1: monitor_read_log: дочерний журнал fd закрыт
9 марта 15:18:03 MyServer sshd[393644]: debug3: ssh_sandbox_parent_finish: завершено
9 марта 15:18:03 MyServer sshd[393644]: debug1: PAM: установка учетных данных
9 марта 15:18:03 MyServer sshd[393644]: debug3: PAM: открытие сеанса
9 марта, 15:18:03 MyServer sshd[393644]: debug2: do_pam_session: информация об аутентификации в SSH_AUTH_INFO_0
9 марта 15:18:03 MyServer sshd[393644]: pam_unix(sshd:session): сеанс открыт для пользователя myuser(uid=1001) пользователем (uid=0)
9 марта 15:18:03 MyServer systemd-logind[607]: новый сеанс 530 пользователя myuser.
9 марта 15:18:03 MyServer systemd: pam_unix(systemd-user:session): сеанс открыт для пользователя myuser(uid=1001) пользователем (uid=0)
9 марта 15:18:03 MyServer sshd[393644]: debug3: PAM: sshpam_store_conv вызван с 1 сообщением
9 марта 15:18:03 MyServer sshd[393644]: debug3: PAM: sshpam_store_conv вызван с 1 сообщением
9 марта 15:18:03 MyServer sshd[393644]: дочерний пользователь находится на pid 393672
9 марта 15:18:03 MyServer sshd[393672]: debug1: поддержка SELinux отключена
9 марта 15:18:03 MyServer sshd[393672]: debug1: PAM: установка учетных данных
9 марта 15:18:03 MyServer sshd[393672]: debug3: safe_chroot: проверка '/'
9 марта 15:18:03 MyServer sshd[393672]: debug3: safe_chroot: проверка '/home/'
9 марта 15:18:03 MyServer sshd[393672]: debug3: safe_chroot: проверка '/home/ftp_users/'
9 марта 15:18:03 MyServer sshd[393672]: debug3: safe_chroot: проверка '/home/ftp_users/myuser'
9 марта 15:18:04 MyServer sshd[393644]: debug3: mm_request_receive входит
9 марта 15:18:04 MyServer sshd[393644]: debug3: monitor_read: проверка запроса 113
9 марта 15:18:04 MyServer sshd[393644]: debug3: mm_answer_audit_command ввод
ssh -V

Старый сервер:

  • OpenSSH_7.9p1 Debian-10+deb10u2, OpenSSL 1.1.1d 10 сентября 2019 г.

Новый сервер:

  • OpenSSH_8.4p1 Debian-5, OpenSSL 1.1.1k 25 марта 2021 г.

Обновлять

Оказывается, в старой системе это действительно работало из-за манипулирования домашними папками и символическими ссылками, а не из-за ForceCommand директива в этой системе (даже если эта директива существует).

ln -s /home/ftp_users/мой пользователь /home/мой пользователь
usermod -d /home/мой пользователь мой пользователь
ln -s ../upload /home/ftp_users/myuser/home/myuser

Поэтому, когда пользователь входит в систему и переходит на ~ это идет к /дом/мой пользователь который является символической ссылкой для /загрузить. При сопоставлении настройки домашней папки со старой системой новая система теперь правильно маршрутизируется при входе в систему. Немного хакерский и определенно неоптимальный (пытался избежать этого, правда), но он «работает».

Тогда возникает вопрос, почему не ForceCommand отменить это? Он вообще выполняется? Как я могу сказать?

флаг cn
Отличаются ли версии старых и новых серверов? Можете ли вы поднять уровень журнала для SSHD и получить отладочный вывод?
флаг tn
Спасибо за комментарий shearn89. Обновленный пост с логами и информацией о версии. Я не вижу в журналах ничего, связанного с ForceCommand, кроме тех случаев, когда он встречается с ним в конфигурации, если только я не узнаю его?
флаг cn
Интересно, можно ли указать `ForceCommand` только один раз. Что произойдет, если вы поместите все команды в одну строку, соединенную символом `;`?
флаг tn
Интересное предложение. Но, к сожалению, не повезло. Теперь я просто получаю сообщение «FATAL ERROR: получен неожиданный конец файла с SFTP-сервера» от FileZilla при попытке подключения. Я полагаю, что `internal-sftp` - это специальная команда, которую нельзя связать с другими?
Fjor avatar
флаг do
Возможно, первый ForceCommand запускает sftp-server и позволяет ему управлять соединением, поэтому следующий ForceCommand выполняется после закрытия sftp-server. Если это так, `sftp-server` принимает опцию `-d DIR` для изменения начального каталога внутри соединения.
флаг tn
Я пробовал это с закомментированной командой `sftp-server`, и никакой разницы. Однако ваше предложение наводит меня на мысль, что, возможно, мне следует изучить команду `internal-sftp` и посмотреть, могу ли я добавить туда некоторые аргументы. Спасибо за идею.
флаг tn
Было трудно найти синтаксис для `internal-sftp`, но затем обнаружил [это сообщение] (https://superuser.com/a/1114989), в котором говорится, что `internal-sftp` использует те же параметры, что и `sftp-server`. Хорошо знать. (Это где-нибудь задокументировано? Если да, то я его не нашел.) Ваше предложение отлично сработало, @Fjor, мне просто пришлось использовать его вместо `internal-sftp`. Буду рад принять, если вы хотите отправить его в качестве ответа.
Рейтинг:1
флаг do

С sftp-сервер вы можете добавить опцию -d путь изменить стартовый каталог при входе в систему. Строка конфигурации должна быть:

Подсистема sftp /usr/lib/openssh/sftp-server -l VERBOSE -d /upload

В более поздних версиях OpenSSH функция SFTP-сервера доступна по умолчанию в процессе или с использованием явного внутренний-sftp индикатор в качестве команды для запуска.

@user2100826 подтверждено эта почта что внутренний-sftp и sftp-сервер используют одни и те же параметры командной строки (но я не могу найти это явно указанным в соответствующих человек страницы). Пожалуйста, проконсультируйтесь человек sftp-сервер чтобы проверить использование ChrootDirectory с ForceCommand или же Подсистема.

Таким образом, желаемое поведение также может быть настроено строкой:

Подсистема sftp internal-sftp -l VERBOSE -d /upload

Также, пожалуйста, проверьте этот ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.