Рейтинг:0

Ошибка SFTP Chroot: сломанная труба

флаг at

Обновление: приведенный ниже код был обновлен, чтобы отразить изменения, указанные в отмеченном ответе, и поэтому работает должным образом.

Я пытаюсь установить на своем сервере пользователей только для SFTP, которые заключены в тюрьму в своем домашнем каталоге. При попытке подключения к серверу я получаю сообщение об ошибке неработающего канала:

debug1: аутентификация прошла успешно (пароль).
Авторизован на xxxx.xxxxxxxx.com ([XX.XX.XX.XX]:22).
debug2: параметр fd 5 O_NONBLOCK
debug3: fd 6 равен O_NONBLOCK
debug1: канал 0: новый [клиентский сеанс]
отладка3: ssh_session2_open: канал_новый: 0
debug2: канал 0: отправить открытым
debug3: отправить пакет: введите 90
debug1: Запрос [email protected]
debug3: отправить пакет: введите 80
debug1: вход в интерактивный сеанс.
debug1: залог: сеть
debug3: отправить пакет: тип 1
package_write_wait: Соединение с портом XX.XX.XX.XX 22: Неисправный канал
Не удалось прочитать пакет: соединение сброшено узлом

Я определил, что это связано с моими попытками посадить пользователя в тюрьму. Мой sshd_config включает в себя:

Подсистема sftp внутренний-sftp
Подбор группы
        ForceCommand внутренний-sftp -d /%u
        Аутентификация по паролю да
        ChrootDirectory /home/sftp
        РазрешениеТуннель нет
        AllowAgentForwarding нет
        AllowTcpForwarding нет
        X11Номер переадресации

sftponly это имя группы, которую я создал для пользователей sftp. Владелец и группа / дома / фтп является корень только с правами на запись для владельца (0711).

$ chown root: root /home/sftp
$ chmod 0711 /home/sftp

Вот как я создаю пользователей (в этом примере Бэтмен) -- обратите внимание, что я делаю это с помощью Perl-скрипта, поэтому я использую chpasswd:

$ adduser --quiet --disabled-password --shell /bin/false --no-create-home --gecos "Пользователь" Бэтмен
$ эхо "Бэтмен: Бэтмен123" | chpasswd
$ usermod -a -G sftponly Бэтмен
$ install -d -m 0755 /home/sftp/batman -o batman -g sftponly

Примечание. Я вручную создаю домашний каталог пользователей, а не передаю --система аргумент за Добавить пользователя, так как я получаю сообщение об ошибке, когда позже пытаюсь изменить владельца каталога:

chown: недопустимая группа: «Бэтмен: Бэтмен»

Если я обновлю свой sshd_configи измените каталог chroot на:

ChrootDirectory /home/sftp

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

Как я могу улучшить/исправить это, чтобы пользователи:

  • имеют доступ только к своему каталогу (/дома/sftp/бэтмен)
  • при входе в систему будет отображаться в пределах / (что на самом деле /дома/sftp/бэтмен)
  • не могу перейти к / дома / фтп (чтобы они не могли видеть список других пользователей)
Рейтинг:0
флаг at

Мне удалось добиться этого, применив эти разрешения:

$ chown Бэтмен: sftponly /home/sftp/batman
$ chmod 0755 /home/sftp/batman
$ chmod 0711 /home/sftp

Затем изменение ChrootDirectory от /home/sftp/%u к / дома / фтп,

И, наконец, перемещение пользователя в его домашний каталог при входе в систему:

ForceCommand внутренний-sftp -d /%u

Теперь, когда Бэтмен входит, они попадают в /дома/sftp/бэтмен, который появляется как /Бэтмен пользователю. Что еще более важно, если они попытаются вернуться в / дома / фтп, они получают сообщение об ошибке (тем самым не позволяя им видеть другие пользовательские каталоги):

Каталог /: разрешение отклонено - не удалось получить список каталогов

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

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