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