Lucky's Weblog
Lucky's Weblog
Главная
Резюме
Портфолио
Хэндмэйд
Фотогалерея
Маны
Софт
Статистика
Ссылки
Услуги
Написать письмо
Контакты



Данная мана была написана под влиянием решения некоторых вопросов о безопасности доступа на 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


Обсудить в форуме.

Рейтинг ресурсов "УралWeb" Яндекс цитирования Copyright © 2004-2006 г.