The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Запуск двух копий VSFTP под разные задачи (ftp vsftpd virtual)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: ftp, vsftpd, virtual,  (найти похожие документы)
Автор: Виталий Исаев <ndragon@mail.ru> Newsgroups: email Date: Mon, 21 Oct 2009 17:02:14 +0000 (UTC) Subject: Запуск двух копий VSFTP под разные задачи Ситуация из моей жизни (возможно похожая у кого-то еще возникала) Есть программа, хранящая и сортирующая изображения в древовидную структуру, своего рода электронный каталог продукции. Прямого доступа к этим картинкам юзеры не должны иметь. И есть админы, которые админят сеть и проектируют сайты, им нужен свой доступ, а так как они админы, то доступ будет полный. Мне показался более привлекательный способ реализации через FTP и по разным портам. Наиболее простой способ - создать два FTP сервера, каждый со своими настройками. И так реализация. VSFTP - скомпиленый и установленный из исходников и сервер на базе OpenSUSE 11.0 Cоздаем папку (если такой нет) /etc/vsftp - общая папка с настройками Cоздаем папку /etc/vsftp/admin - в этой папке будут настройки для админского сервера Cоздаем папку /etc/vsftp/virtual - в этой папке будут настройки для программного сервера с виртуальными пользователями FTP с виртуальными пользователями для программы Создаем пользователя picmanager в системе, указав необходимый домашний каталог (каталог с картинками в моем случае). Через этого пользователя будут ходить все виртуальные. Настраиваем сервер с виртуальными пользователями. В каталоге /etc/vsftp/virtual создаем такие файлы login.txt vsftpd.conf И создадим скрипт для создания базы данных для PAM аутентификации create_db: #!/bin/bash db_load -T -t hash -f /etc/vsftp/virtual/login.txt /etc/vsftp/virtual/vsftp_login.db В каталоге /etc/pam.d должен присутствовать файл ftp. В его содержимом подменяем только путь к нашей базе с пользователями (vsftp_login.db). В моем случае содержимое имеет вид auth required /lib/security/pam_userdb.so db=/etc/vsftp/virtual/vsftp_login account required /lib/security/pam_userdb.so db=/etc/vsftp/virtual/vsftp_login Файл настройки vsftpd.conf для этого сервера будет следующим anonymous_enable=NO local_enable=YES write_enable=YES anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO chroot_local_user=YES # здесь говорим что у нас будут виртуальные пользователи, которые для системы будут # выглядеть как созданный нами ранее пользователь picmanager guest_enable=YES guest_username=picmanager listen=YES listen_address=192.168.0.1 listen_port=11121 pasv_min_port=30000 pasv_max_port=30999 virtual_use_local_privs=YES Создаем базу логинов и паролей виртуальных пользователей Файл login.txt имеет вид первая строчка - логин, вторая - пароль, третья - следующий пользователь, четвертая - пароль и т.д. Например user1 user1pass user2 user2pass теперь запустим скрипт create_db, который создаст базу для PAM аутентификации vsftp_login.db или в командной строке набираем db_load -T -t hash -f /etc/vsftp/virtual/login.txt /etc/vsftp/virtual/vsftp_login.db Ну и на завершение - скрипт для старта или остановки сервера. #!/bin/bash ### BEGIN INIT INFO # Provides: vsftp # Required-Start: $network $remote_fs # Required-Stop: # Default-Start: 2 3 5 # Default-Stop: # Description: Start the VSFTP server ### END INIT INFO # Shell functions sourced from /etc/rc.status: # rc_check check and set local and overall rc status # rc_status check and set local and overall rc status # rc_status -v ditto but be verbose in local rc status # rc_status -v -r ditto and clear the local rc status # rc_failed set local and overall rc status to failed # rc_failed <num> set local and overall rc status to <num> # rc_reset clear local rc status (overall remains) # rc_exit exit appropriate to overall rc status . /etc/rc.status # First reset status of this service rc_reset # Return values acc. to LSB for all commands but status: # 0 - success # 1 - generic or unspecified error # 2 - invalid or excess argument(s) # 3 - unimplemented feature (e.g. "reload") # 4 - insufficient privilege # 5 - program is not installed # 6 - program is not configured # 7 - program is not running # # Note that starting an already running service, stopping # or restarting a not-running service as well as the restart # with force-reload (in case signalling is not supported) are # considered a success. case "$1" in start) echo "Start VSFTPd" `/usr/local/sbin/vsftpd /etc/vsftp/virtual/vsftpd.conf` ;; stop) echo -n "Shutting down service VSFTPd " echo -n PID=`ps ax | grep "/usr/local/sbin/vsftpd /etc/vsftp/virtual/vsftpd.conf" | awk -F " " '{print $1}'` #echo ${PID[0]} if [ -n "${PID[0]}" ]; then kill ${PID[0]} fi # Remember status and be verbose rc_status -v ;; restart|force-reload) echo "Restarting service VSFTPd" $0 stop $0 start rc_status ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac rc_exit [[B]]FTP для админов[[/B]] Создаем пользователей аминов (если их еще нет). Настраиваем сервер с реальными пользователями. В каталоге /etc/vsftp/admin создаем такие файлы
  • login.txt
  • vsftpd.conf И создадим скрипт для создания базы данных для PAM аутентификации create_db (он практически такой же, за исключением каталога virtual - теперь здесь будем писать admin: #!/bin/bash db_load -T -t hash -f /etc/vsftp/admin/login.txt /etc/vsftp/admin/vsftp_login.db В каталоге /etc/pam.d должен присутствовать файл ftp, но он уже отвечает за базу виртуальных пользователей, а нам необходима база с другими пользователями, значит, копируем этот файл в новый с именем ftpadmins. В его содержимом подменяем только путь к нашей базе с пользователями (vsftp_login.db). В моем случае содержимое имеет вид auth required /lib/security/pam_userdb.so db=/etc/vsftp/admin/vsftp_login account required /lib/security/pam_userdb.so db=/etc/vsftp/admin/vsftp_login Файл настройки vsftpd.conf для этого сервера будет следующим anonymous_enable=NO local_enable=YES write_enable=YES anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO chroot_local_user=NO listen=YES listen_address=192.168.0.1 listen_port=10021 pasv_min_port=30000 pasv_max_port=30999 local_umask=0644 file_open_mode=0666 # этой строкой мы даем новое имя сервера для PAM аутентификации pam_service_name=ftpadmins Создаем базу логинов и паролей виртуальных пользователей, его содержимое формируется аналогично предыдущему серверу, за исключением, того, что здесь уже будут реальные пользователи и пароли. Теперь запустим скрипт create_db, который создаст базу для PAM аутентификации vsftp_login.db или в командной строке набираем db_load -T -t hash -f /etc/vsftp/admin/login.txt /etc/vsftp/admin/vsftp_login.db Ну и на завершение - скрипт для старта или остановки этого сервера сервера. #!/bin/bash ### BEGIN INIT INFO # Provides: vsftp # Required-Start: $network $remote_fs # Required-Stop: # Default-Start: 2 3 5 # Default-Stop: # Description: Start the VSFTP server ### END INIT INFO # Shell functions sourced from /etc/rc.status: # rc_check check and set local and overall rc status # rc_status check and set local and overall rc status # rc_status -v ditto but be verbose in local rc status # rc_status -v -r ditto and clear the local rc status # rc_failed set local and overall rc status to failed # rc_failed <num> set local and overall rc status to <num> # rc_reset clear local rc status (overall remains) # rc_exit exit appropriate to overall rc status . /etc/rc.status # First reset status of this service rc_reset # Return values acc. to LSB for all commands but status: # 0 - success # 1 - generic or unspecified error # 2 - invalid or excess argument(s) # 3 - unimplemented feature (e.g. "reload") # 4 - insufficient privilege # 5 - program is not installed # 6 - program is not configured # 7 - program is not running # # Note that starting an already running service, stopping # or restarting a not-running service as well as the restart # with force-reload (in case signalling is not supported) are # considered a success. case "$1" in start) echo "Start VSFTPd" `/usr/local/sbin/vsftpd /etc/vsftp/admin/vsftpd.conf` ;; stop) echo -n "Shutting down service VSFTPd " echo -n PID=`ps ax | grep "/usr/local/sbin/vsftpd /etc/vsftp/admin/vsftpd.conf" | awk -F " " '{print $1}'` #echo ${PID[0]} if [ -n "${PID[0]}" ]; then kill ${PID[0]} fi # Remember status and be verbose rc_status -v ;; restart|force-reload) echo "Restarting service VSFTPd" $0 stop $0 start rc_status ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac rc_exit Все, можно работать, теперь для программы сервер находится по адресу 192.168.0.1 и на порту 11121, а сервер для админов - 192.168.0.1 но на порту 10021, здесь даже не сложно и адреса разделить.

  • << Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

    Обсуждение [ RSS ]
  • 1.1, aZ (ok), 02:53, 22/10/2009 [ответить]  
  • +/
    Столько много букв и ещё больше лишних банальностей.
     
     
  • 2.4, Виталий Исаев (?), 09:47, 22/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    А в чем банальность то, если не секрет? У меня стала такая проблема и я не нашел готового решения, хотя подобная проблема не только меня интересовала, гугл не помог толком. Плясать с бубном вокруг пользователей и конфига к каждому - не привлекает, и отслеживания трафика усложняется, к тому же зачем через программу пропускать реальных пользователей?
     

  • 1.2, daevy (?), 06:01, 22/10/2009 [ответить]  
  • +/
    как вариант, еще можно использовать user_config_dir и для юзеров использовать отдельные настройки, в т.ч. local_root и allowed_cmds для манипулирования корнем и перечнем разрешенных юзеру, ftp-команд.
    этот способ описан в исходниках, в каталоге EXAMPLES вроде...
     
     
  • 2.5, Виталий Исаев (?), 09:53, 22/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >как вариант, еще можно использовать user_config_dir и для юзеров использовать отдельные настройки,
    >в т.ч. local_root и allowed_cmds для манипулирования корнем и перечнем разрешенных
    >юзеру, ftp-команд.
    >этот способ описан в исходниках, в каталоге EXAMPLES вроде...

    Все эти исходники я проюзал, а вот быть с разными портами - там ответа нет. Может кому-то и нравиться  юзать один адрес для всего, но мне, например, не нравиться, в целях контроля трафика например, потому как на офисе стоит проблема с обрубыванием соцсетей и использования трафика некоторыми несознательными личностями. К тому же зачем прогу настраивать на домашний каталог пользователя (да еще реального) и загаживать его домашний каталог промежуточными файлами, предлагаешь разрешить всем реальным юзерам лазить по всей файловой системе?

     

  • 1.3, XoRe (ok), 09:34, 22/10/2009 [ответить]  
  • +/
    Да уж, представляю, какой огород будет, если захотите 3 сквида запустить =)

    А вообще да, мало заточены скрипты из коробки на работу более, чем с одним экземпляром какого-то сервиса.

     
  • 1.6, petrun (?), 12:12, 31/12/2009 [ответить]  
  • +/
    А нельзя для разных портов xinetd использовать?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру