[Comm] Question on FTP

Headlong John =?iso-8859-1?q?johnheadlong_=CE=C1_nightmail=2Eru?=
Чт Сен 14 18:18:40 MSD 2006


В  общем, решил проблему так. Мой /etc/vsftd.conf:

anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
local_root=/var/ftp
chroot_local_user=YES
write_enable=YES

Мой /etc/xinetd.d/vsftpd:

service ftp
{
        disable         = no
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        nice            = 10
        rlimit_as       = 16M
        server          = /usr/sbin/vsftpd
        only_from       = 192.168.0.0/24
}

Мой /etc/fstab:

...
# Это чтобы автоматически передеплоивать целиком приложение (ear) или модуль (war, ejb-jar)
/opt/SUNWappserver/domains/domain1/autodeploy /var/ftp/domain1/autodeploy none rw,bind 0 0

Права на домен назначил так:

[root на server-java john]# cd /var/ftp
[root на server-java ftp]# ls -la
total 3
drwxr-xr-x   3 root vsftpd 1024 Sep 14 16:50 .
drwxr-xr-x  21 root root   1024 Sep 14 16:48 ..
drwxr-xr-x   5 root vsftpd 1024 Sep 14 19:33 domain1

Для работы над проектом создаю группу, соответствующую имени проекта, например library, включаю туда пользователей-разработчиков проекта. Далее в каталоге домена создаю пустой файл, соответствующий имени файла приложения или модуля с проектом, и назначаю ему права, например для проекта library:

[root на server-java ftp]# cd domain1
[root на server-java domain1]# ls -la
total 3
drwxr-xr-x  3 root vsftpd  1024 Sep 14 21:51 .
drwxr-xr-x  5 root vsftpd  1024 Sep 14 19:33 ..
drwxr-xr-x  2 root root    1024 Sep 14 20:05 .autodeploystatus
-rw-rw----  1 root library    0 Sep 14 20:05 library.ear

После этого через FTP разработчики могут обновлять свои и только свои проекты. И они могут перемещаться только по той части файловой системы, которая расположена в /var/ftp с учетом примонтированных частей (после подключения они попадают в /var/ftp). Удалять и создавать проекты они не могут. В результате получил примерно то, что хотел :-)

Единственное, что не получилось сделать как я хотел, так это предоставить возможность работать с проектом в распакованном виде. Дело в том, что сервер приложений распаковывает продеплоенное приложение в подкаталог каталога /opt/SUNWappserver/domains/домен/applications/j2ee-apps, а продеплоенный модуль - в подкаталог каталога /opt/SUNWappserver/domains/домен/applications/j2ee-modules, имя которого соответствует имени приложения или модуля. Например, приложение library.ear будет распаковано в /opt/SUNWappserver/domains/домен/applications/j2ee-apps/library. Проблема же в том, что при передеплойменте этот каталог удаляется и создается заново и для него устанавливается владелец и права доступа в соответствии с глобальными настройками (у меня это root:root и 755 соответственно), учесть права доступа на уровне участников разных проектов тут не получается :-( Что же касается каталога /opt/SUNWappserver/domains/домен/autodeploy, то сюда можно записывать только приложения или модули в виде архивов ear или war, ejb-jar соответственно.

> У меня сервер под Линуксом для джава-разработок, дистрибутив ALT Master
> 2.4. Так вот, я хочу обеспечить разработчикам возможность самим деплоить
> приложения на него не обладая при этом ни правами root'а ОС, ни правами
> администратора сервера приложений (дает возможность, кроме деплоймента,
> конфигурировать сервер приложений через веб или утилитами командной
> строки). Для этого решил использовать возможность автоматического
> деплоймента, когда собранные модули и приложения просто выкладываются в
> определенный каталог. Решил использовать для этого FTP, чтобы не
> привязываться к файловым службам, специфическим для ОС (nfs или smb).
> 
> При этом желательно сделать так, чтобы можно было ограничить возможность
> перемещения пользователей FTP по файловой системе определенными участками,
> а также сделать так, чтобы можно было права на проекты раздавать. Решил
> использовать vsftpd из ALT Master 2.4. В результате не могу добиться того,
> что мне нужно.
> 
> Сервер приложений установлен в /opt/SUNWappserver (это Sun Java System
> Application Server 8.2). Сервер приложений поддерживает понятие доменов,
> каждый домен, грубо говоря, - это совокупность настроек и продеплоенных
> приложений. Каждый домен расположен в своем подкаталоге каталога
> /opt/SUNWappserver/domains. Например, домен по умолчанию - в
> /opt/SUNWappserver/domains/domain1. Для автоматического деплоймента
> достаточно записать модуль или приложение в подкаталог autodeploy, можно в
> распакованном виде (то есть в подкаталог проекта в каталоге autodeploy
> нужного домена), что удобно с точки зрения обновления приложения и
> управления доступом разных людей к разным проектам.
> 
> То есть в итоге должно получиться примерно следующее:
> 
> Домен domain1:
> 
> /opt/SUNWappserver/domains/domain1/autodeploy
> 
> Проекты в домене domain1:
> 
> каталог project1a - доступ у user1, user2
> каталог project1b - доступ у user2, user3
> 
> Домен domain2:
> 
> /opt/SUNWappserver/domains/domain2/autodeploy
> 
> каталог project2a - доступ у user1, user3
> каталог project2b - доступ у user4
> 
> Скажем, пользователь подключается по FTP, попадает в некий виртуальный
> корневой каталог. Там, скажем, каталоги, соответствующие доменам сервера
> приложений, а в них - каталоги проектов этого домена. Он может ходить
> только по тем из этих каталогов и делать с ними только то, что разрешено
> (на уровне файловой системы). При этом никаких других частей файловой
> системы не должно быть доступно.



Подробная информация о списке рассылки community