Как стать автором
Обновить

Удобный файлообменник с нуля

Время на прочтение6 мин
Количество просмотров54K
Привет, Хабр!

Сегодня я хочу рассказать как создать удобную http/ftp файлопомойку. Сразу скажу – это довольно просто. Что требуется от читателя? Базовые навыки работы в консоли linux, умение пользоваться редактором nano и, естественно, желание создать себе свой небольшой файловый уголок в сети.
Я полагаю, следующее имеет смысл делать людям обладающим белым IP адресом и быстрым интернет-подключением. Мой вариант системы предполагает авторизацию ftp/http и возможность создания скрытых разделов, при этом остается возможность давать прямые ссылки на файлы. Также, я предусматривал пользование http мордой с мобильных устройств, поэтому интерфейсе скрипта нет ничего лишнего. Для любителей fancy-look и желающих красоты а не функциональности этот вариант, скорее всего, не подойдет. Но это вовсе не значит что твоя файлопомойка, мой любимый техногик, будет выглядеть некрасиво. Посмотреть что из этого выйдет можно по ссылке.
Для начала определим начальную конфигурацию: debian 6, apache2, php5, proftpd и хорошее настроение. Всеми любимая убунта тоже подойдет.

Внимание! Следующие действия должны выполняться от имени root. Просто введите su (или sudo su) и затем пароль root (или текущего пользователя, в случае с sudo). Также, после любых изменений файлов конфигурации, сервера нужно перезапускать чтобы изменения возымели эффект. Делается это командами
invoke-rc.d apache2 restart

и
invoke-rc.d proftpd restart

соответственно.

Итак, все по порядку:
Сначала мы установим необходимый софт. Открываем терминал, вводим:
apt-get install apache2 php5 proftpd

Устанавливаем это все, затем вводим:
nano /etc/apache2/sites-enabled/000-default

Тут мы добавим директиву отключающую индекс каталогов и установим стандартную кодировку.
В начале файла будет описание директорий с содержимым. Ищем нужные строки:
DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

Нам нужно отключить индексы и задать кодировку по умолчанию. Должно получиться следующее:
DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks –Indexes
                AddDefaultCharset utf-8
                AllowOverride None
        </Directory>

С настройкой apache мы покончили. Сохраняем конфиг. В nano это делается комбинацией Ctrl+O после чего следует нажать Enter.

Следующим шагом будет создание пользователя для логина на ftp и определение его в одну группу с апачем. Например, sosnickiy.
Внимание! Эти имя и пароль нужно будет вводить при входе на ваш ftp.
Пишем в консоль:
adduser sosnickiy --ingroup www-data --shell /bin/false

Вводим пароль, остальное можно не заполнять, просто нажимаем на Enter. Скрипт создаст пользователя, определит его в группу и скопирует стандартные файлы. Создаем каталог ftp в его домашнем каталоге:
mkdir -m 775 /home/sosnickiy/ftp

На этом, пожалуй, с пользователем разобрались.

Следующим шагом будет настройка ftp-сервера. Итак, вводим:
nano /etc/proftpd/proftpd.conf

Ищем параметр:
# DefaultRoot ~

Решеточка (#) в начале строки означает что параметр закомментирован и игнорируется сервером. Убираем эту решеточку.
Ищем параметр:
RequireValidShell on

Изменяем его на:
RequireValidShell off

Добавляем в конец конфигурационного файла следующее:
<Directory /home/sosnickiy/ftp>
        	Umask 002 002
              <Limit ALL>
        		AllowUser sosnickiy
        		DenyAll
              </Limit>
</Directory>

<Directory /home/sosnickiy/ftp/*>
	Umask 002 002
              <Limit ALL>
              	AllowUser sosnickiy
      	 	DenyAll
              </Limit>
</Directory>

На этом настройка ftp сервера закончена. Сохраняем, перезапускаем его и уже можем им пользоваться. Однако, не стоит спешить заливать туда файлы. Это еще не все.
Теперь создадим каталог ftp в каталоге http сервера и сделаем его одним целым с каталогом ftp в домашней папке пользователя sosnickiy. Именно туда будут загружаться файлы через ftp-сервер.
Создаем каталог:
mkdir -m 775 /var/www/ftp

Выполняем команду:
mount --bind /home/sosnickiy/ftp /var/www/ftp

Теперь каталоги являются одним целым.
Увековечиваем изменения:
echo "/home/sosnickiy/ftp /var/www/ftp none bind 0 0" >> /etc/fstab

Теперь каталоги будут одним целым даже после перезагрузки системы.

На этом моменте я хотел бы остановиться и сделать одно важное замечание: через http для листинга файлов, закачки их на сервер, управления каталогами, файлами и пользователями будет использоваться скрипт AutoIndex 2.2.4 (официальный сайт). Но стандартная его комплектация не позволяет сразу запустить и работать так как присутствует баг с русским языковым файлом, баг с файлом-хранилищем юзеров/паролей и есть некоторые нюансы с правами создаваемые скриптом файлы и каталоги. Мной были внесены незначительные изменения, я опишу их ниже. Если Вы не хотите заморачиваться с его доточкой вручную – я предлагаю скачать уже полностью готовый к работе скрипт: (нажмите сюда). Если же Вы не верите мне, считаете что я в заговоре с мировым правительством либо просто плохой человек и добавил в код троян/бекдор/прочие плохие изменения – делайте вручную сами. По крайней мере, советую взять хотя бы файл ru.txt из моего архива. Замечу, что в случае скачивания уже готового скрипта Вам нужно будет только залить на сервер, распаковать его в /var/www и показать друзьям рабочий файлообменник (хе-хе, ирония). Описывать настройки скрипта я не буду так как там все крайне очевидно.
Итак, если Вы недоверчивый человек, придется сделать следующее:
Качаем архив с официального сайта, распаковываем на рабочем компьютере, в каталоге classes находим файл Admin.php, открываем, ищем строку 68:
return @mkdir($path, 0755);

Изменяем число 755 на 775.
В этом же каталоге открываем файл Upload.php, ищем строку 73:
@chmod($fullpathname, 0644);

Изменяем число 644 на 664.
В файле Tar.php в строке 78:
. str_pad('755', 7, '0', STR_PAD_LEFT) . "\0" //permissions

Вместо 755 ставим 775.
Этим исправятся конфликт доступа к данным.
Далее, необходимо открыть файл ru.txt в каталоге languages, удалить его содержимое и вставить в него исправленные данные:
ru.txt
index of        Индекс
parent directory        Родительская директория
thumbnail of    Пиктограмма
continue        Продолжить

file    Файл
files   Файлы
folder  Папка
folders Папки
size    Размер
total size      Общий размер
total downloads Всего скачано
total   Всего
date    Изменено
description     Описание
downloads       Загрузка
type    Тип
sort by Сортировать по

search  Поиск
both    Оба
search results for      Результаты поиска для
and its subdirectories  и подкаталоги

account Аккаунт
login   Вход в систему
logout  Выход из системы
username        Имя пользователя
password        Пароль
select user to remove   Выберите пользователя для удаления
are you sure you want to remove the user        Вы уверены, что хотите удалить этого пользователя
delete this user        Удалить этого пользователя
add user        Добавить пользователя

guest   Гость
user    Пользователь
mod     Moderator
admin   Администратор
level   Уровень

rename  Переименовать
renaming        Переименование
new filename    Новое имя файла
you can also move the file by specifying a path Вы так же можете переместить файл, указав путь
delete  Удалить
are you sure you want to delete the file        Вы уверены, что хотите удалить этот файл
edit description        Редактировать описание
yes, delete      Да, удалить

upload  Закачать
files to this folder    Файлы в данную папку
uploaded files  Закачаные файлы
failed files    Не закачанные файлы
none    Нет
file already exists     Файл уже существует
filename is listed as a hidden  Файл помечен как скрытый
reconfigure script      Переконфигурировать скрипт
create new directory in this folder      Создать новую директорию в данной
edit list of hidden files       Редактировать список скрытых файлов
add new user    Добавить нового пользователя
delete user     Удалить пользователя
copy url        Copy a remote file (to this folder)
upload to ftp   upload file to FTP server

enter the new description for the file  Введите новое описание файла
change  Изменить
enter the new name      Введите новое имя
create  Создать

add     Добавить
remove  Удалить
remove a hidden file    Удалить скрытый файл
add a new hidden file   Добавить новый скрытый файл

edit ban list   Редактировать список забаненых
remove a ban    Снять бан
add a new ban   Добавить в список забаненых
the administrator has blocked your ip address or hostname       Sorry, the administrator has blocked your IP address or hostname

view entries from log file      Просмотреть лог-файл
view statistics from log file   Просмотреть статистику из лог-файла
how many entries would you like to view Сколько записей вы хотите просмотреть
view    Просмотреть
page    Page
of      of

calculate md5sum        Рассчитать md5sum
download directory as tar.gz archive    Скачать директорию в виде tar.gz архива

Формат: значение [табуляция] перевод на нужный язык [перевод строки]
В оригинальном файле формат несколько нарушен. Поэтому файлообменник работать не будет.
Затем, создаем в корневом каталоге (рядом с файлом index.php) файл .htpasswd.autoindex. Обязательно с точкой в начале. Открываем, вставляем в него следующее:
admin   7c4a8d09ca3762af61e59520943dc26494f8941b        3
user    12dea96fec20593566ab75692c9949596833adc9        1

В данном случае пароль администратора: 123456
Пароль юзера: user

Сохраняем все, запаковываем каталог с исправленным скриптом в zip-архив, перезапускаем ftp-сервер, заходим, заливаем архив с исправленным скриптом в каталог ftp.
Для Windows рекомендую клиент Filezilla. Либо просто вводим в адресную строку «Проводника»:
ftp://ip_адрес_сервера/ftp/
и жмем Enter. Также, можно сохранить пароль и добавить в «Избранное». Удобно.

Итак, скрипт запакован в архив и лежит в папке ftp. Разворачиваем консоль, пишем (лучше скопировать и вставить):
cd /home/sosnickiy/ftp/ && unzip AutoIndex-2.2.4.zip && cp ./AutoIndex-2.2.4/* /var/www && rm -rf AutoIndex-2.2.4.zip AutoIndex-2.2.4

Теперь выполняем несложную команду:
chown -R www-data:www-data /var/www && chmod -R 775 /var/www

Теперь все готово! Пользуйтесь за здоровье.
Спасибо за внимание.
Теги:
Хабы:
Всего голосов 27: ↑12 и ↓15-3
Комментарии20

Публикации

Истории

Работа

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань