Привет, Хабр!
Сегодня я хочу рассказать как создать удобную http/ftp файлопомойку. Сразу скажу – это довольно просто. Что требуется от читателя? Базовые навыки работы в консоли linux, умение пользоваться редактором nano и, естественно, желание создать себе свой небольшой файловый уголок в сети.
Я полагаю, следующее имеет смысл делать людям обладающим белым IP адресом и быстрым интернет-подключением. Мой вариант системы предполагает авторизацию ftp/http и возможность создания скрытых разделов, при этом остается возможность давать прямые ссылки на файлы. Также, я предусматривал пользование http мордой с мобильных устройств, поэтому интерфейсе скрипта нет ничего лишнего. Для любителей fancy-look и желающих красоты а не функциональности этот вариант, скорее всего, не подойдет. Но это вовсе не значит что твоя файлопомойка, мой любимый техногик, будет выглядеть некрасиво. Посмотреть что из этого выйдет можно по ссылке.
Для начала определим начальную конфигурацию: debian 6, apache2, php5, proftpd и хорошее настроение. Всеми любимая убунта тоже подойдет.
Внимание! Следующие действия должны выполняться от имени root. Просто введите su (или sudo su) и затем пароль root (или текущего пользователя, в случае с sudo). Также, после любых изменений файлов конфигурации, сервера нужно перезапускать чтобы изменения возымели эффект. Делается это командами
и
соответственно.
Итак, все по порядку:
Сначала мы установим необходимый софт. Открываем терминал, вводим:
Устанавливаем это все, затем вводим:
Тут мы добавим директиву отключающую индекс каталогов и установим стандартную кодировку.
В начале файла будет описание директорий с содержимым. Ищем нужные строки:
Нам нужно отключить индексы и задать кодировку по умолчанию. Должно получиться следующее:
С настройкой apache мы покончили. Сохраняем конфиг. В nano это делается комбинацией Ctrl+O после чего следует нажать Enter.
Следующим шагом будет создание пользователя для логина на ftp и определение его в одну группу с апачем. Например, sosnickiy.
Внимание! Эти имя и пароль нужно будет вводить при входе на ваш ftp.
Пишем в консоль:
Вводим пароль, остальное можно не заполнять, просто нажимаем на Enter. Скрипт создаст пользователя, определит его в группу и скопирует стандартные файлы. Создаем каталог ftp в его домашнем каталоге:
На этом, пожалуй, с пользователем разобрались.
Следующим шагом будет настройка ftp-сервера. Итак, вводим:
Ищем параметр:
Решеточка (#) в начале строки означает что параметр закомментирован и игнорируется сервером. Убираем эту решеточку.
Ищем параметр:
Изменяем его на:
Добавляем в конец конфигурационного файла следующее:
На этом настройка ftp сервера закончена. Сохраняем, перезапускаем его и уже можем им пользоваться. Однако, не стоит спешить заливать туда файлы. Это еще не все.
Теперь создадим каталог ftp в каталоге http сервера и сделаем его одним целым с каталогом ftp в домашней папке пользователя sosnickiy. Именно туда будут загружаться файлы через ftp-сервер.
Создаем каталог:
Выполняем команду:
Теперь каталоги являются одним целым.
Увековечиваем изменения:
Теперь каталоги будут одним целым даже после перезагрузки системы.
На этом моменте я хотел бы остановиться и сделать одно важное замечание: через http для листинга файлов, закачки их на сервер, управления каталогами, файлами и пользователями будет использоваться скрипт AutoIndex 2.2.4 (официальный сайт). Но стандартная его комплектация не позволяет сразу запустить и работать так как присутствует баг с русским языковым файлом, баг с файлом-хранилищем юзеров/паролей и есть некоторые нюансы с правами создаваемые скриптом файлы и каталоги. Мной были внесены незначительные изменения, я опишу их ниже. Если Вы не хотите заморачиваться с его доточкой вручную – я предлагаю скачать уже полностью готовый к работе скрипт: (нажмите сюда). Если же Вы не верите мне, считаете что я в заговоре с мировым правительством либо просто плохой человек и добавил в код троян/бекдор/прочие плохие изменения – делайте вручную сами. По крайней мере, советую взять хотя бы файл ru.txt из моего архива. Замечу, что в случае скачивания уже готового скрипта Вам нужно будет только залить на сервер, распаковать его в /var/www и показать друзьям рабочий файлообменник (хе-хе, ирония). Описывать настройки скрипта я не буду так как там все крайне очевидно.
Итак, если Вы недоверчивый человек, придется сделать следующее:
Качаем архив с официального сайта, распаковываем на рабочем компьютере, в каталоге classes находим файл Admin.php, открываем, ищем строку 68:
Изменяем число 755 на 775.
В этом же каталоге открываем файл Upload.php, ищем строку 73:
Изменяем число 644 на 664.
В файле Tar.php в строке 78:
Вместо 755 ставим 775.
Этим исправятся конфликт доступа к данным.
Далее, необходимо открыть файл ru.txt в каталоге languages, удалить его содержимое и вставить в него исправленные данные:
Формат: значение [табуляция] перевод на нужный язык [перевод строки]
В оригинальном файле формат несколько нарушен. Поэтому файлообменник работать не будет.
Затем, создаем в корневом каталоге (рядом с файлом index.php) файл .htpasswd.autoindex. Обязательно с точкой в начале. Открываем, вставляем в него следующее:
В данном случае пароль администратора: 123456
Пароль юзера: user
Сохраняем все, запаковываем каталог с исправленным скриптом в zip-архив, перезапускаем ftp-сервер, заходим, заливаем архив с исправленным скриптом в каталог ftp.
Для Windows рекомендую клиент Filezilla. Либо просто вводим в адресную строку «Проводника»:
Итак, скрипт запакован в архив и лежит в папке ftp. Разворачиваем консоль, пишем (лучше скопировать и вставить):
Теперь выполняем несложную команду:
Теперь все готово! Пользуйтесь за здоровье.
Спасибо за внимание.
Сегодня я хочу рассказать как создать удобную 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
Теперь все готово! Пользуйтесь за здоровье.
Спасибо за внимание.