![]() |
Данная мана была написана под влиянием решения некоторых вопросов о безопасности доступа на FreeBSD. В ней я расскажу о том, как организовать доступ на ftp нескольким пользователям одновременно. Такая ситуация может возникнуть, например, когда необходимо нескольким кодерам обновлять скрипты для большого веб-сайта. Поскольку речь будет идти о штатном ftp-сервере, то он не совсем функционален в плане возможностей, типа как квотирование объема под ftp-сервер. Для более гибкого использования ftp-сервера и/или многочисленного хостинга лучше использовать специализированный ftp-сервер а-ля proftpd. Я его не использую по той простой причине, что на тот момент, когда он был у меня поднят однажды, он напрочь отказывался видеть файлы с точкой вида .htaccess, которые я активно использую при создании сайтов. Недавно я узнал, что надо его было просто пропатчить, но в то время он был нещадно снесен и поднят обычный штатный фрёвый ftpd. Речь пойдет о моей любимой 4.х ветке, но с веткой 5.Х, понятно, все делается по аналогии. При этом даже при организации такого множественного доступа можно сделать разграничение пользователей по своим домашним каталогам. Итак, поднимаем штатный ftp-daemon FreeBSD. Правим inetd.conf
# ee /etc/inetd.conf ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
Далее перезапускаем наш inetd:
# killall -HUP inetd
или запускаем, если он не запущен:
# /usr/sbin/inetd
Пропишем его старт в rc.conf [сode] # ee /etc/rc.conf inetd_enabled="YES"
или, но НЕ В КОЕМ СЛУЧАЕ НЕ ОДНОВРЕМЕННО!!! сделаем скрипт автозапуска
# ee /usr/local/etc/rc.d/inetd.sh #!/bin/sh /usr/sbin/inetd -wW # chmod +x inetd.sh
Проверяем, что inetd слушает 21 порт:
# sockstat| grep 21 root inetd 13885 5 tcp4 *:21 *:*
После этого нужно не забыть про файерволл на маршрутизаторе. Его настройка может зависеть от того, насколько необходимо давать множественный доступ: можно его открыть только для внутренней сети, можно открыть для всех, а можно открыть только для определенных внешних IP. Далее будет показано, как например можно открыть для нескольких IP, при условии, что маршрутизатор поднят способом, как описано здесь.
... /sbin/ipfw -q add pass tcp from 123.123.123.123 to 124.124.124.124 21 in via xl0 /sbin/ipfw -q add pass tcp from 120.120.120.120 to 124.124.124.124 21 in via xl0 /sbin/ipfw -q add reset tcp from any to 124.124.124.124 21 in via xl0 ...
Данным примером разрешается коннект по 21 порту на 124.124.124.124 только 2 IP адресам: 123.123.123.123 и 120.120.120.120. Всем остальным запрещен.
Итак, ftp-daemon поднят, осталось организовать доступ. Сначала отрубим "халявщиков", которые любят логиниться по аккаунту "anonymous". Предполагается, что будет организовываться ТОЛЬКО авторизованный доступ по ftp, т.е. что ftp-сервер не публичный. В противном случае, я бы стал ftp-сервер поднимать только в jail и никак иначе. Правим ftpusers. Данный файл запрещает вышеперчиcленным пользователям логининиться на ftp.
# ee /etc/ftpusers
Там внизу просто допишем строку:
anonymous
Если установлен веб-сервер Apache как показано здесь и необходим организовать доступ к скриптам или html-страницам веб-сайта. Я никогда не устанавливаю Apache от nobody:nogroup. Пусть, например, Apache запущен от web:www,а скрипты лежат, к примеру, в папке /var/web/site/www.
Правим master.passwd. Пользователь Apache не имеет пароля и вообще уже ничего не имеет.
# ee /etc/master.passwd web:*:8000:80:0:0:Apache Daemon:/nonexistent:/sbin/nologin
Далее создаем пользователей ftpuser1 и ftpuser2, включенные в группу www.
Предполагается, что эти пользователи будут иметь только ftp-доступ. Более того, я настоятельно рекомендую ftp-пользователям никогда не давать доступ по ssh из соображений безопасности, т.е. на самом деле ssh-доступ вообще не следует никому давать, кроме себя, любимого.
ftpuser1:hash_pass:2101:80:ftp:0:0:ftp_user1:/var/web/site/www:/sbin/sh ftpuser2:hash_pass:2102:80:ftp:0:0:ftp-user2:/var/web/site/www:/sbin/sh
Перестроим master.passwd
#vipw :wq
Теперь есть два пользователя, у которых есть одинаковый домашний каталог. Закрываем доступ по ssh с тем же аккаунтом. Ограничим их только домашним каталогом, т.е. чтоб они не могли подняться выше своего домашнего каталога.
# ee /etc/ftpchroot ftpuser1 ftpuser2
# ee /etc/ssh/sshd_config AllowUser «username»
Где в «username» прописыавем через запятую только тех, кто может логинится по ssh. После этого, ftpuser1 и ftpuser2 не смогут залогиниться по ssh на маршрутизатор.
После этого необходимо поправить файл login.conf
# ee /etc/login.conf ftp:\ :umask=002:
Перестраиваем базу:
# cap_mkdb /etc/login.conf
И последнее, что осталось - это добавить прав на запись для группы для каталога /var/web/site/www. Предполагается, что владелец это папки Apache, т.е. web
# chmode g+w /var/web/site/www
Если нужно разграничить пользователей по каталогам, то для этого нужно назначить только разные домашние каталоги для пользователей в master.passwd. Не забудем указать владельца на домашний каталог
# chown ftpuser1:web /home/ftpuser1
|
|
|
Copyright © 2004-2006 г. | ||||||