FTP сервер сначала «для себя любимого», а уж потом – для всех…

FTP сервер я себе настроил. Давно уже. И описал настройку в заметке FTP – для всех и «для себя любимого». И до поры до времени было все нормально (если конечно не считать попыток авторизации под левыми паролями, с которыми я потом разобрался). Но через время гугл проиндексировал все содержимое моего сервера, и начал народ качать что ни попадя. Причем, со временем этот процесс стал гораздо интенсивнее, чем мне хотелось бы, да таким, что приходилось мне по нескольку минут ждать, пока браузер наконец-то страницу откроет. И возникло у меня страстное желание вернуть себе свой интернет, а говоря простыми словами — ограничить скорость раздачи с FTP-сервера. Тем более, что качали в основном с Китая и практически один единственный драйвер…

По быстрому нагуглил новость, что

…в ProFTPD 1.3.3 … появились такие новые модули, как … mod_shaper для разграничения скорости загрузки/скачивания по сессиям.

Читать далее «FTP сервер сначала «для себя любимого», а уж потом – для всех…»

FTP — для всех и «для себя любимого»…

Как утверждают, FTP — один из самых старых протоколов передачи данных, использующихся в наших компьютерных сетях. Подробнее о нем можно прочесть, например, вот по этой ссылке. Один из современных серверов FTP — ProFTP — позволяет довольно гибко его сконфигуировать под собственные нужды. Именно его (когда-то давно) я и решил себе установить. Как я тогда это делал, тут и описано.

Установка

Ах, Mandriva Linux — тысячи пакетов в репозиториях! Чтобы там не нашлось такого популярного сервера как ProFTP — да не может этого быть! Запускаем «Центр управления Mandriva», в нем «Установку и удаление программ» и в поле поиска вводим «proftpd». Ответ не был для меня неожиданностью — есть такой пакет proftpd. Ставим «птицу», жмем «Применить». Несколько минут терпения, и всё — сервер установлен и запущен.

Есть и другой вариант — установка в консоли, единственное условие — обязательно запущенной от имени «root-а». Достаточно всего лишь ввести команду:

urpmi proftpd

Итог будет тот же самый — сервер ProFTP будет установлен и запущен.

Настройка

Начать нам придется с настройки не самого ProFTP, а с файервола. Если на компьютере, на котором Вы установили и запустили ProFTP, он (файервол) включен, то в нем потребуется открыть порт, используемый для FTP. Обычно это 21-й порт. При желании, Вы сможете настроить ProFTP-сервер на использование порта с другим номером (об этом ниже). В таком случае, в файерволе нужно будет открыть тот порт, который Вы использовали для FTP. О том, каким образом в Mandriva Linux можно открыть порты в файерволе, я уже писал тут.

Теперь о настройке собственно ProFTP. Сразу же после установки сервер ProFTP сконфигурирован в некоем «умолчательном» варианте и уже запущен. Если Вы установили только сам ProFTP (с неким набором модулей, идущим в «комплекте по умолчанию»), и не устанавливали никаких дополнительных пакетов с модулями для ProFTP, то вся настройка сервера осуществляется в единственном файле — /etc/proftpd.conf. По этому, именно его мы и открываем в (любом) текстовом редакторе.

Находим в указанном файле первый интересующий нас параметр — имя сервера. Он задан вот такой строкой:

ServerName	"ProFTPD Default Installation"

Как по мне — не самый важный параметр. Но тем не менее — Вы можете для своего сервера ввести то имя, которое Вам нравится. Находим следующий параметр, который можно изменить «на свой вкус и цвет». Это упоминавшийся ранее номер порта:

Port	21

Менять его или нет — решать Вам. Если Вы планируете создать у себя публичный FTP-сервер, то однозначно не стоит. Потому как, по умолчанию, когда кто-то в своем браузере набирает «ftp://some.ftp.server.com», то запрос пойдет именно на 21-й порт указанного сервера. С другой стороны, Вы можете использовать ProFTP только для «личных нужд». В этом случае, можно уйти со стандартных номеров портов, которые в первую очередь сканируются злоумышленникам и при попытке взлома…

Еще пара «глобальных» параметров сервера:

User		nobody
Group		nogroup

Они задают пользователя и группу, от имени которых запущен сервер. Этот «бесправный» (в прямом смысле слова) пользователь «автоматом» создается для нужд ProFTP. В данном случае, на мой взгляд, ничего менять не нужно.

Следующий параметр, который я изменил в файле конфигурации:

UseReverseDNS 	off

Причину этого действия я уже описал у себя в блоге ранее. Дело в том, что если значение параметра установлено в «on«, ProFTP для нужд ведения своего лога (журнала работы) выполняет DNS-запрос имени компьютера, пытающегося к нему подключиться. В случае неудачи (а такое случается, например, в описанном мной случае — из-за кривизны настройки у провайдера «домашней сети») удаленный компьютер подключиться не сможет. С другой стороны, если данный параметр выключен («off«), то в лог пишется просто IP-адрес удаленного компьютера. На мой взгляд, этого вполне достаточно.

Таким образом, подводя итог всего сказанного выше, получается, что их всех настроек, изначально присутствовавших в файле /etc/proftpd.conf (по умолчанию), я изменил всего лишь одну — отключил запрос имен компьютеров, подключающихся к моему FTP-серверу. На этом, с «глобальными» настройками я покончил.

Есть еще одна вещь, которую нужно сделать. Необходимо в текстовом редакторе (от имени «root-а») открыть файл /etc/shells и добавить в него такую строку:

/bin/false

Этим мы добавляем «пустую» командную оболочку. Она потребуется нам при создании пользователей, которым мы предоставим возможность записи файлов на наш FTP-сервер. В итоге, этим «избранным» пользователям в нашем сервере будут доступны только команды протокола FTP, и ничего более. Безопасность, однако…

И вот теперь мы будем настраивать ресурсы, к которым предполагается предоставлять доступ. Начнем с тех, которые…

Для всех

Итак, публичный FTP-сервер. На нем хранятся файлы, к которым предоставляется доступ (но только на считывание!!!) абсолютно для всех желающих. Для этого в конце файла /etc/proftpd.conf добавляем следующее:

<Anonymous /var/ftp/pub>
	User		ftp
	Group		ftp
	UserAlias	anonymous ftp
	RequireValidShell	no
	MaxClients	5
	ShowSymlinks	on
	HideUser 	root
	HideGroup 	root
	RootLogin 	off
<Limit CWD DIRS READ LIST>
	AllowAll
</Limit>
<Limit WRITE>
	DenyAll</Limit>
</Anonymous>

А теперь рассмотрим, что же мы тут такого «понаписали»:

  • Строка «<Anonymous /var/ftp/pub>» обозначает (локальную) папку Вашего компьютера, доступ к ресурсам которой (файлам и вложеным подпапкам) будет предоставлять ProFTP. Пусть Вас не смущает слово «Anonymous» — в данном случае оно не имеет никакого отношения к анонимному доступу, а всего лишь обозначает начало (а со слешем (/) — и конец) секции параметров про указанный ресурс (папку). Итак, указанная строка обозначает, что в данном случае мы предоставим пользователям доступ к содержимому (локальной) папки «/var/ftp/pub«.
  • В следующих двух строках («User ftp» и «Group ftp«) мы принудительно задаем имена пользователя и группы, которые будут автоматически «подставляться» системой во время, когда внешние клиенты будут подключаться к нашему FTP-серверу.
  • Строка «UserAlias anonymous ftp» буквально означает следующее — «Пользователь «anonymous» и пользователь «ftp» — это один и тот же пользователь». Зачем она нам? Большинство браузеров при анонимном подключении к FTP-серверам использует в качестве логина (имени пользователя) именно «anonymous» (а в качестве пароля подставляют адрес электронной почты). А парой строк ранее мы настроили доступ пользователю «ftp». Установив даной строкой своеобразный знак равентства между двумя этими пользователями, мы тем самым предоставляем доступ и пользователю «anonymous».
  • Строка «RequireValidShell no» указывает, что к серверу могут подключаться пользователи, не имеющие назначенной им в данной системе оболочки (командного интерпретатора). То есть, обычному локальному пользователю при входе в систему предоставляется командная оболочка (интерпретатор команд). Как следствие — пользователь имеет возможность выполнять в системе какие-то определенные команды. С другой стороны, пользователю «ftp» командная оболочка не предоставляется, и сделано это именно для того, чтобы он не смог выполнять никаких системных команд (в его распоряжении остается только лишь набор команд FTP-протокола).
  • Парамерт «MaxClients 5» указывает максимальное число клиентов, которые могут быть одновременно подключены к серверу.
  • Параметр «ShowSymlinks on» определяет — показывать ли пользователям симлинки, или нет. Если «да«, то в случае наличия внутри ресурса т.н. «жестких ссылок» (симлинков) на файлы или папки, находящиеся за пределами каталога, выделенного для анонимного доступа, анонимные ftp-пользователи смогут получить доступ к содержимому этих «внешних» ресурсов.
  • Следующие три строчки — «HideUser root«, «HideGroup root» и «RootLogin off» — предназначены чтобы анонимный FTP-пользователь ни в коем cлучае не смог получить привелегии администратора (root).
  • Далее идет вот такая секция (повторюсь):
<Limit CWD DIRS READ LIST>
	AllowAll
</Limit>;

В ней сказано, что команды CWD, DIRS, READ и LIST разрешены всем (AllowAll). Данный набор позволяет пользователю перемещаться по папкам (в пределах ресурса), считывать содержимое файлов и каталогов. Одним словом — анонимный пользователь получает возможность считывать информацию с Вашего FTP-сервера.

  • Затем следует секция:
<Limit WRITE>
	DenyAll
</Limit>

В которой указано, что команда записи (WRITE) запрещена для всех (DenyAll). Таким образом, внешние пользователи не смогут загрузить (записать) файл(ы) на Ваш FTP-сервер.

  • Последняя строка «</Anonymous>» (как уже было сказано выше) просто завершает секцию параметров про указанный ресурс (папку).

Сохраняем изменения файла /etc/proftpd.conf и перезапускаем сервер ProFTP командой:

/etc/init.d/proftpd restart

Осталось проделать пару манипуляций с папкой /var/ftp/pub, а именно — назначить ее`владельцем пользователя «ftp» из группы «ftp», а также назначить ей необходимые права доступа. Для этого вводим в консоли две следующие команды:

chown -R ftp:ftp /var/ftp/pub
chmod -R 755 /var/ftp/pub

После этого анонимные пользователи смогут считывать файлы, расположенные в папке /var/ftp/pub и ее подпапках, набрав в браузере адрес Вашего сервера в виде «ftp://adres.vashego.ftp.servera».

Для «избранных»

А как же запись? Имеется ввиду случай «особо приближенных» друзей-товарищей, которым Вы хотите предоставить возможность загружать «что-то» на Ваш сервер. При этом — только по протоколу FTP, и только в некую специально выделенную папку. Примем как исходное условие, что e данного пользователя имя (в системе) будет «uploader«, а доступ с возможностью записи мы ему предоставим в папку «/var/ftp/uploader«. С этой целью добавим в конец файла /etc/proftpd.conf следующие строки:

<Anonymous /var/ftp/uploader/>
	User 	uploader
	Group 	ftp
	AnonRequirePassword 	on
<Limit LOGIN>
	AllowAll
</Limit>
	HideUser 	root
	HideGroup 	root
	RootLogin 	off
</Anonymous>

Как видим, в этот раз ресурсом для доступа будет папка /var/ftp/uploader. К данной папке разрешен доступ только пользователю «uploader» из группы»ftp». Для доступа к ресурсу требуется ввод пароля («AnonRequirePassword on«). Все функции (команды) доступны только после успешного входа пользователя в систему (Limit LOGIN). Предположительно, у Вас еще нет в системе данного пользователя. Поэтому, создадим его, для чего в консоли от имени администратора (root) выполним следующую команду:

useradd -d /var/ftp/uploader -g ftp -p test -s /bin/false uploader

Данной командой мы:

  • создаем пользователя (командой useradd);
  • с именем «uploader» (самый последний параметр в команде — uploader);
  • принадлежащего к группе «ftp» (-g ftp);
  • с домашней папкой «/var/ftp/uploader» (-d /var/ftp/uploader);
  • с паролем «test» (-p test);
  • и «пустой командной оболочкой «/bin/false» (-s /bin/false)

Создать пользователя конечно можно и иначе, в какой-нибудь графической утилите. Но, на мой взгляд, эта одна единственная команда делает всё и сразу — создает пользователя, задает ему пароль, назначает ему «пустую» командную оболочку, создает папку данного пользователя, назначает этого пользователя её владельцем и прописывает папке все необходимые права.

Все. После перезапуска сервера ProFTP можете давать логин и пароль своим друзьям. Чтобы войти в сервер, пользователю понадобится FTP-клиент, позволяющий ввести имя пользователя и пароль, например, FileZilla. Также, подключиться к FTP-серверу с указанием имени и пароля позволяют, например, FAR или Midnight Comander..

Для «себя любимого»

Ну и напоследок о «себе любимом». Точнее, обо всех пользователях, зарегистрированных в системе. Все они имели возможность подключаться к ProFTP сразу же после его установки и запуска. При этом им необходимо использовать FTP-клиент, позволяющий ввести имя пользователя и пароль, (например, FileZilla), Имя и пароль необходимо указывать те, под которыми пользователь входит в систему. К чему получит доступ такой клиент, залогинившись по FTP? Это определяется одной единственной строкой файла конфигурации. Снова заглянем в файл /etc/proftpd.conf и найдем там следующую строку:

#DefaultRoot ~

По умолчанию эта строка закоментирована. Если же ее раскоментировать, то в своих перемещениях по файловой системе сервера пользователи будут ограничены пределами своей домашней папки. Но, если эту строку не трогать и оставить закоментированой, то пользователи получат доступ ко всей файловой системе сервера, начиная от корневого каталога (естественно, в четком соответствии с установленными в системе правами доступа). Таким образом, «для себя любимого» с самого начала ничего настраивать не надо было…