Каковы правила для пользователей SFTP?

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

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

Supergibbs
источник

Ответы:

1

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

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

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

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

Alex
источник
Это имеет большой смысл, но, похоже, это не сработало
Supergibbs
@Supergibbs Не могли бы вы добавить в свой выходной вопрос о: namei -l /home/ftpusers/files/SomeUserName/.ssh?
Алекс
Конечно, добавлено выше для лучшего форматирования
Supergibbs
Проверьте, если пользователь jmandel, принадлежащий к группе ftpgroup , запустивid jmandel
Alex
Не потому, что я этого не хочу, это позволит jmandel доступ к папкам других пользователей. В ftpgroup есть пользователь, который помещает файлы в различные пользовательские папки. В качестве теста я добавил jmandel в ftpgroup, и это не помогло
Supergibbs
0

Это правда?

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

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

xenoid
источник
Пользователь предоставляет мне свой открытый ключ, и я использую его для создания своей учетной записи
Supergibbs