[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