Возникла следующая задачка: нужно отдать файл через http, но только нужному пользователю. Наиболее простое имхо решение - apache2+аутентификация доступа. То есть это будет выглядеть как линк, http://example.com/restricted, по которому пользователя спросят явки/пароли. Если он их знает - велкам, иначе - лесом. Все просто. Реализуется это, как выяснилось, тоже элементарно. Работать будем под Debian Etch. Вообще, все нижеописанное справедливо для любой ОС, под которой запущен apache, однако некоторые моменты, вроде имени пользователя, от которого работает веб-сервер, или команда перезапуска, будут различны, и это стоит иметь в виду.
Итак, пусть у нас уже есть установленный и работающий апач. Для начала создадим файл aliases, в котором опишем необходимый алиас для доступа (можно было замутить более пальцевеерно выглядящий виртуальный хост - http://restricted.example.com, но в данном случае это некритично, поэтому ограничимся более простым вариантом):
Однако ее еще физически нет на сервере ;) Создаем, даем права доступа для www-data (пользователя, от имени которого работает www-сервер)
Делается это одноименной утилитой, лежать файл может где угодно, ну и прав на чтение его стоит дать поменьше.. например 0600. Создаем тестового пользователя test c паролем test:
Данный материал навеян этой страничкой, там присутствуют также описания всех используемых в работе директив Apache. То, чего нет там, можно узнать тут.
PS: при написании заметки неоценимую помощь оказала эта страничка, автоматом декодирующая HTML'ные <> в идеологически правильные < и >".
interra:/# nano /etc/apache2/aliasesДалее расскажем об этом файле apache2:
<IfModule alias_module>
Alias /restricted "/srv/www/restricted/"
<Directory "/srv/www/restricted/">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</IfModule>
echo "Include /etc/apache2/aliases" >> /etc/apache2/apache2.confПосле рестарта сервиса /etc/init.d/apache2 restart данная директория будет доступна через браузер по http://example.com/restricted.
Однако ее еще физически нет на сервере ;) Создаем, даем права доступа для www-data (пользователя, от имени которого работает www-сервер)
mkdir /srv/www/restricted; chown www-data.www-data /srv/www/restrictedТеперь ограничение доступа. Ограничивать мы будем с помощью локального .htaccess (именно для этого при описании алиаса используется AllowOverride all директива - для преимущества параметров .htaccess над глобальными настройками сервера). Создадим этот файл в корне /restricted со следующим содержанием:
interra:/# nano /srv/www/restricted/.htaccessТо бишь теперь доступ к папке /restricted будет блокироваться всем, кроме списка valid-user'ов из /srv/www/restricted/.htpasswd и то только при их успешной аутентификации. Осталось создать файл .htpasswd.
AuthName "Restricted Access. Authenficate yourself!"
AuthType Basic
AuthUserFile /srv/www/restricted/.htpasswd
<Limit GET>
order deny,allow
allow from all
require valid-user
</Limit>
Делается это одноименной утилитой, лежать файл может где угодно, ну и прав на чтение его стоит дать поменьше.. например 0600. Создаем тестового пользователя test c паролем test:
interra:/srv/www/restricted# htpasswd -c /srv/www/restricted/.htpasswd testИ если поглядеть на файл .htpasswd изнутри, то...
New password:
Re-type new password:
Adding password for user test
interra:/# more /srv/www/restricted/.htpasswdЗайдя по вышеозначенному адресу, мы получим приглашение аутентифицировать себя. В случае успешной аутентификации увидим содержимое директории. Иначе,
test:IWF8pgFr9p2o.
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.что по-русски звучит как "идите в лес" =)
Данный материал навеян этой страничкой, там присутствуют также описания всех используемых в работе директив Apache. То, чего нет там, можно узнать тут.
PS: при написании заметки неоценимую помощь оказала эта страничка, автоматом декодирующая HTML'ные <> в идеологически правильные < и >".