TDLR: у меня есть Catch 22, где, в зависимости от разрешений на домашний каталог пользователя, я могу заставить работать аутентификацию SSH или ограничения пользовательского каталога, но не то и другое одновременно.
Кстати, я очень хочу запустить свой собственный SFTP-сервер. Пожалуйста, не рекомендуйте мне попробовать сервис AWS Transfer или что-то альтернативное. Спасибо.
Вот соответствующий (измененный по умолчанию) контент в /etc/ssh/sshd_config:
Подсистема sftp внутренний-sftp
Порт 22
Порт 2299
Соответствие группе sftpusers LocalPort 2299
ChrootDirectory /sftp-данные/%u
ForceCommand внутренний-sftp
Match Group sftpusers LocalPort 22
DenyGroups
Совпадение с группой LocalPort 2299 *,!sftpusers
Запретить пользователей *
Я хочу, чтобы порт 22 работал как обычно ssh, но только для пользователей, не использующих sftp. Для пользователей sftp в группе «sftpusers» я хочу, чтобы порт 2299 функционировал только как sftp, а не ssh. Для не-sftpusers я хочу запретить доступ к порту 2299.
Итак, я создал пользователя «user1» с домашним каталогом /sftp-data/user1 и оболочкой /sbin/nologin. Я создал /sftp-data/user1/.ssh/authorized_keys и заполнил его открытым ключом ssh. /sftp-data принадлежит пользователю root с правами доступа 700. /sftp-data/user1/.ssh и ниже принадлежат user1, а /sftp-data/user1/.ssh/authorized_keys имеет разрешение 600. Право собственности/разрешения /sftp-data/user1 здесь под вопросом. Подробнее ниже.
Я создал группу пользователей sftpusers и добавил пользователя user1 в эту группу. Однако встроенный пользователь ec2, которого вы получаете с AWS, не является членом этой группы. Тестирование с пользователем ec2 прошло отлично: доступ по ssh, порт 22 работал как всегда, но доступа к порту 2299 не было.
Итак, тестирование с пользователем user1 стало интересным. User1 не имеет доступа к порту 22 - это прекрасно! Когда user1 владеет /sftp-data/user1, аутентификация с открытым ключом ssh на порту 2299 проходит успешно, но пользователь немедленно выходит из системы, а это сообщение сохраняется в /var/log/secure:
2 сентября, 19:21:38 ip-192-168-0-25 sshd[10369]: Принят открытый ключ для пользователя 1 с порта <ip-адрес отредактирован> 61110 ssh2: ECDSA SHA256:<share отредактирован>
2 сентября, 19:13:23 ip-192-168-0-25 sshd[9803]: pam_unix(sshd:session): сеанс открыт для пользователя user1 пользователем (uid=0)
2 сентября, 19:13:23 ip-192-168-0-25 sshd[9803]: фатально: неправильное владение или режимы для каталога chroot "/sftp-data/user1" [postauth]
2 сентября, 19:13:23 ip-192-168-0-25 sshd[9803]: pam_unix(sshd:session): сеанс закрыт для пользователя user1
Конечно, это имеет смысл. Chroot требует, чтобы /sftp-data/user1 принадлежал root, права доступа 700. Итак, сделайте это так, и теперь аутентификация sftp (ключ ssh) не работает.
2 сентября, 19:41:00 ip-192-168-0-25 sshd[11693]: ошибка: AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys user1 SHA256: <share redacted> failed, status 22
Кстати, eic_run_authorized_keys — это оболочка, которую AWS использует для стандартной аутентификации ssh, чтобы включить AWS Instance Connect.
Для дополнительного кредита ... если вышеуказанная проблема не является достаточно сложной, можете ли вы придумать схему, в которой я могу предоставить определенным пользователям sftp доступ к определенным каталогам проектов и только к ним, не создавая группу для каждого проекта? Ссылка из домашнего каталога каждого пользователя на каталог проекта была бы потрясающей.
Дополнительная информация, запрошенная @anx:
# получить пароль user1
user1:x:1001:1001::/sftp-data/user1:/sbin/nologin
# namei -l /sftp-data/user1/.ssh/authorized_keys
f: /sftp-данные/user1/.ssh/authorized_keys
dr-xr-xr-x корень корень /
drwxr-xr-x root root sftp-данные
drwx------ root пользователь root1
drwx------ user1 sftpusers .ssh
-rw------- user1 sftpusers author_keys
Я включил ведение журнала DEBUG для sshd. Используя директиву ChrootDirectory, с /sftp-data/user1, принадлежащим root, и неудачной аутентификацией SSH, я вижу это в /var/log/secure:
debug1: не удалось открыть авторизованные ключи '/sftp-data/user1/.ssh/authorized_keys': разрешение отклонено
ps ясно показывает мне, что root запускает процесс sshd.