В данном руководстве я использую server1.example.com, как имя хоста, который имеет ip адрес 192.168.0.100. У вас эти настройки могут быть другими, поэтому вам будет надо заменить их, в тех местах, где это необходимо.
Убедитесь, что вы работает от имени root:
sudo su |
1.1 Изменение оболочки по умолчанию
/bin/sh это символическая ссылка на /bin/dash, однако нам необходимо использовать /bin/bash, а не /bin/dash. Поэтому мы сделаем так
ln -sf /bin/bash /bin/sh |
1.2 Отключение AppArmor
AppArmor является расширение безопасности (аналог SELinux), который должен обеспечивать высокую безопасность. По моему мнению он вам не нужен для настройки вашей системы безопасности и в конечном счете вы получите больше проблем при его использовании, чем преимуществ (думаю так, после того как затратив неделю на устранение неисправностей в работе некоторых служб, службы не работали, так как ожидалось, выяснилось, что все было нормально, а все проблемы вызывал AppArmor). Поэтому я отключаю его.
Сделать это можно так:
/etc/init.d/apparmor stop |
2 Установка MySQL и phpMyAdmin
Все можно установить одной командой
apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2 |
Вам необходимо будет задать пароль для пользователя root MySQL - это пароль, действителен для пользователей root@localhost, а также root@server1.example.com, поэтому мы не должны указывать пароль администратора MySQL вручную позже (как это было в случае с предыдущими версиями Ubuntu):
New password for the MySQL "root" user: <-- yourrootsqlpassword |
Также вам необходимо ответить на следующий вопрос:
New password for the MySQL "root" user: <-- Web server to reconfigure automatically: <-- apache2 |
3 Установка Proftpd с поддержкой MySQL
В Ubuntu имеется заранее настроенный пакет proftpd-mysql. Установим его в качестве автономного демона.
Сделаем так:
apt-get install proftpd-mysql |
Вам будет необходимо ответить на следующий вопрос:
Run proftpd: <-- standalone |
Затем мы создаем группу ftp (ftpgroup) и пользователя (ftpuser), для использования всеми виртуальными пользователями. Замените group- и userid 2001 на такое число, которое не занято в вашей системе:
groupadd -g 2001 ftpgroup |
4 Создание базы данных MySQL для Proftpd
Сейчас мы создадим базу данных с называнием ftp и пользователя MySQL с именем proftpd, который в дальнейшем будет использоваться демоном proftpd для подключения к базе данных ftp:
mysql -u root -p |
create database ftp; |
Замените password на любой другой пароль, который пользователя proftpd будет использовать для MySQL. Затем в оболочке MySQL, мы создаем в базе данных необходимые таблицы:
USE ftp;
|
Как вы уже заметили, мы вышли из оболочки MySQL и вернулись в оболочку Linux.
Между прочим, (предполагая что имя вашего ftp-сервера server1.example.com), вы сможете получить доступ phpMyAdmin из вашего браузера набрав http://server1.example.com/phpmyadmin/ (также можно использовать ip адрес вместо server1. example.com) и войти в веб-интерфейс как proftpd. После этого вы сможете взглянуть на базу данных. Позже вы можете использовать phpMyAdmin для управления вашими Proftpd сервером
5 Настройка Proftpd
Откроем /etc/proftpd/proftpd.conf и отключим IPv6 установив параметр UseIPv6 в off:
nano /etc/proftpd/proftpd.conf |
[...]
|
Добавим в этот файл, также следующие строки:
[...] |
Убедитесь, что вы изменили 'password' на тот который вы задали ранее для пользователя proftpd MySQL в секции SQLConnectInfo!
Перезапустим Proftpd:
/etc/init.d/proftpd restart |
6 Заполнения базы данных и ее тестирование
Для заполнения базы данных используем оболочку MySQL:
mysql -u root -p |
Прежде всего, нужно создать запись в таблице ftpgroup. Она содержит groupname, groupid и username. Имя пользователя и группу ftp, мы создали в конце второго шага (вместо groupid=2001 вам необходимо будет подставить реальный, который у вас используется):
INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser'); |
Сейчас мы создали таблицу ftpgroup. Нам больше нет необходимости создавать в ней дополнительные записи. При создании новых виртуальных пользователей ftp вы будете пользоваться таблицами ftpquotalimits и ftpuser. Создадим нашего первого пользователя exampleuser с квотой в 15 Мб и паролем 'secret' (мы все еще оставались в оболочке MySQL):
INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('exampleuser', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0); |
(Не забудьте заменить groud-и userid 2001 в последнем INSERT запросе, на используемые вами!)
Теперь откроем любой клиент FTP на своем десктопе (типа WS_FTP или SmartFTP, если вы находитесь на системы Windows или gFTP на Linux на рабочем столе) и попытаемся установить соединение. Используйте для соединения server1.example.com (или IP-адрес системы) в качестве имени ftp сервера, exampleuser в качестве имени пользователя и пароль в 'secret'.
Если вы смогли подключиться - поздравляем! Если нет, что-то пошло не так :( .
Если мы выполним
ls -l /home/ |
мы увидим каталог /home/www.example.com (домашний каталог exampleuser's), который создался автоматически и принадлежит ftpuser и ftpgroup (пользователя / группу мы создали в конце второго шага):
root@server1:~# ls -l /home/ |
7 Администрирование баз данных
Для большинства людей легче применять графический интерфейс для работы с MySQL, вы можете использовать phpMyAdmin (в данном примере это http://server1.example.com/phpmyadmin/) для администрирования базы данных ftp.
Всякий раз, когда вы создаете новый пользователь, вам придется создавать записи в таблицах ftpquotalimits и ftpuser поэтому я объясню, значение столбцов этих таблиц:
Таблица ftpuser:
Важными являются эти колонки (другие заполняются MySQL или Proftpd автоматически, поэтому не заполняйте их вручную!):
-
userid: Имя виртуального пользователя Proftpd (напр. exampleuser).
-
passwd: В не зашифрованном виде (например, clear-text) пароль пользователя.
-
uid: Userid пользователя ftp, созданного в конце второго шага (напр. 2001).
-
gid: Groupid группы ftp, сознанного в конце второго шага (напр. 2001).
-
homedir: Если его не существует, он будет создан, когда новый пользователь впервые войдет через FTP. Виртуальный пользователь будет ограничен только своим домашним каталогом, , т.е. он не сможет получить доступ к другим каталогам, в не его домашнего каталога.
-
shell: Будет нормально, если вы будете по умолчанию использовать /sbin/nologin здесь.
Таблица ftpquotalimits:
Важными являются эти колонки (другие заполняются MySQL или Proftpd автоматически, поэтому не заполняйте их вручную!):
-
name: Имя виртуального пользователя Proftpd (напр. exampleuser).
-
quota_type: пользователь или группа. Как правило, здесь используется пользователь.
-
per_session: true или false. True означает, что квота действует только для данной сессии. Например, если пользователь имеет квоту в 15 Мб, и он загрузил 15 MB в течение одной сессии, то он не сможет больше ничего загрузить, но если он откроет новую сессию, он опять сможет загрузить 15 Мб. False означает, что пользователь имеет 15 МБ не учитывая сессии.
-
limit_type: hard или soft. Hard лимит квоты никогда не дает превышать лимит, в то время как soft квоты могут быть временно превышены. Обычно используется hard.
-
bytes_in_avail: Лимит закачки в байтах (например 15728640 для 15 MB). 0 означает неограниченный.
-
bytes_out_avail: Лимит загрузки в байтах. 0 означает неограниченный.
-
bytes_xfer_avail: Лимит передача в байтах. Суммарный лимит закачки и загрузки пользователя. 0 означает неограниченную.
-
files_in_avail: Лимит загрузки в файлах. 0 означает неограниченную.
-
files_out_avail: Лимит закачки в файлах. 0 означает неограниченный.
-
files_xfer_avail: Tranfer limit in files. 0 means unlimited. Лимит передачи в файлах. 0 означает неограниченный.
Ftpquotatallies таблица используется внутри Proftpd для управления квотами так что вам нет необходимости делать записи в нем!
8 Анонимный FTP
Если вы хотите создать учетную запись анонимного ftp (ftp внимание, что каждый может войти без пароля), вы можете сделать это так:
Вначале мы создадим пользователя и группу с именем anonymous_ftp. Пользователь имеет домашний каталог /home/anonymous_ftp:
groupadd -g 2002 anonymous_ftp |
(Замените 2002 с group-/userid на свободный в вашей системе.)
создаем каталог /home/anonymous_ftp /incoming в который разрешено анонимным пользователям загружать файлы:
mkdir /home/anonymous_ftp/incoming |
открываем /etc/proftpd/proftpd.conf и добавляем следующие директивы в него:
nano /etc/proftpd/proftpd.conf |
[...] |
перезагружаем ProFTPD:
/etc/init.d/proftpd restart |
Теперь анонимные пользователи cмогут войти, и они могут скачивать файлы из каталога /home/ anonymous_ftp, но добавлять могут только /home/anonymous_ftp/incoming (и как только файл загружен в /home/anonymous_ftp/incoming, его нельзя будет ни прочитать, ни загрузить от туда; администратору сервера необходимо перенести его в /home/anonymous_ftp/ чтобы сделать его доступным для других).