У меня есть SFTP-сервер, работающий на Ubuntu Server 12.04 LTS. Любые пользователи в группе 'sftponly' привязываются к своему домашнему каталогу при подключении. Поскольку OpenSSH требует, чтобы ChrootDirectory принадлежал пользователю root, у каждого пользователя есть подпапка с именем «upload», в которую у него есть разрешение на запись. Все это работает хорошо, и пользователи ограничены своей областью, независимо от того, знают они об этом или нет.
Теперь я хотел бы предоставить пользователям доступ через HTTP / HTTPS для загрузки файлов, используя только веб-браузер. Я изучал Apache mod_userdir, но, похоже, он больше ориентирован на анонимный доступ. Я хотел бы, чтобы система требовала от пользователя аутентификации, прежде чем он сможет загружать файлы из своей папки. Также следует разрешить им скачивать только из своей папки.
Например, пользователь посетит https://download.example.com/testuser/file.zip и будет обязан пройти аутентификацию, используя те же учетные данные, что и при подключении через SFTP для загрузки файл.
Я искал такие решения, как создание отдельного виртуального хоста для каждого пользователя и создание вручную файлов htaccess в каждом домашнем каталоге, но они кажутся неопрятными.
Любые предложения с благодарностью.
Вам необходим Apache для интеграции с PAM для его аутентификации. Это довольно легко сделать через pwauth
и mod_authnz_external
. Подробнее об этом можно прочитать здесь:
Проблема в том, что я не вижу способа подключить это к модулю userdir
. pwauth
позволит вам указать requires user <username>
, но я не вижу, как их объединить. И поверь мне, когда я скажу, что искал.
Я думаю, что самым простым способом для этого было бы вручную сохранить запись для каждого пользователя:
<Directory /users/abed/>
DocumentRoot /home/abed/public_html/
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider external
AuthExternal pwauth
Require user abed
</Directory>
<Directory /users/britta/>
DocumentRoot /home/britta/public_html/
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider external
AuthExternal pwauth
Require user britta
</Directory>
И так далее. Вы могли бы даже написать что-нибудь, чтобы восстановить это на периодической основе. Это не сложная структура шаблона для подражания.