1

У меня есть FTP-сервер, который аутентифицируется через API и имеет пользовательские папки в:

/home/ftpusers/files/<username>

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

useradd -g sftpgroup -d /home/ftpusers/files/username/ -s /sbin/nologin username
mkdir -p /home/ftpusers/files/username/.ssh
chown -R username:ftpgroup /home/ftpusers/files/username
chmod -R 770 /home/ftpusers/files/username
echo "ssh-rsa user key" > /home/ftpusers/files/username/.ssh/authorized_keys
chown username:sftpgroup /home/ftpusers/files/username/.ssh
chmod 700 /home/ftpusers/files/username/.ssh
chown username:sftpgroup /home/ftpusers/files/username/.ssh/authorized_keys
chmod 600 /home/ftpusers/files/username/.ssh/authorized_keys

ftpgroup - это то, что системная учетная запись может помещать файлы в папку пользователя, sftpgroup должна заблокировать этого пользователя только для SFTP, используя:

Match Group sftpgroup
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no

К сожалению, это не работает. Нет полезной ошибки, просто:

Permission denied (publickey)

Это работает нормально, хотя, если я создаю пользователя более стандартным способом в каталоге /home /

Есть идеи, почему? Я знаю, что у chroot много разрешений. Это что-то подобное?

Добавлен вывод namei: Конечно:

namei -l /home/ftpusers/files/jmandel/.ssh
f: /home/ftpusers/files/jmandel/.ssh
dr-xr-xr-x root    root      /
drwxr-xr-x root    root      home
drwxrwx--- ftpuser ftpgroup  ftpusers
drwxrwx--- ftpuser ftpgroup  files
drwxrwx--- jmandel ftpgroup  jmandel
drwx------ jmandel sftpgroup .ssh

Отмеченный ответ ниже содержит хорошую информацию в ветке комментариев

2 ответа2

1

Добавьте в свой sshd_config следующую директиву и перезапустите ssh:

AuthorizedKeysFile /home/ftpusers/files/%u/.ssh/authorized_keys .ssh/authorized_keys

Это скажет демону ssh, где искать открытые ключи.

Лично я давно не пользуюсь authorized_keys , но вместо этого использую
AuthorizedKeysCommand где я вызываю свою программу, которая ищет ключ пользователя базы данных sqlite и отправляю их обратно для аутентификации. Таким образом я запрещаю пользователям / хакерам использовать их собственные ключи, и такая конфигурация не раскрывает место, где находятся открытые ключи.

0

Это действительно

echo "ssh-rsa user key" > /home/ftpusers/files/username/.ssh/authorized_keys

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .