У меня есть 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
Отмеченный ответ ниже содержит хорошую информацию в ветке комментариев
namei -l /home/ftpusers/files/SomeUserName/.ssh
?id jmandel
Это правда?
authorized_keys
содержит открытый ключ людей, которым разрешено входить в систему под этим идентификатором пользователя, поэтому он отличается для каждого созданного вами идентификатора пользователя. Теоретически пользователи генерируют свою собственную пару открытый / закрытый ключ и дают вам открытый ключ. Конечно, вы можете создать пару самостоятельно и предоставить им приватную часть, но если случится что-то плохое, они могут заявить, что это сделал кто-то другой, используя свой закрытый ключ.источник