(Notes) Notes (2010 год)

Настройка HTTP и FTP-серверов в Linux (Apache/vsftpd)

У меня на сайте описано несколько пошаговых процедур по настройке важнейших серверов под Linux, например Настройка Samba File Server в OpenSuse, Избавляемся от Team Foundation Server - ставим Subversion, Поднимаем на хостинге MySQL и PostgreSQL сервера и др. На этой страничке я покажу как настроить неотъемлимую часть любого корпоративного сервера - FTP-сервер.

Как выполнялась настройка FTP на устаревшей платформе Windows - я рассказывал на страничке Настройка FTP-сервера (Isolated Ftp Site), а здесь я покажу более продвинутое решение на OpenSource-платформе.


Начнем с FTP-сервера. Прежде всего надо понять, что FTP-серверов в линуксе существуют много и мой выбор VSFTPD в принципе произвольный ( можно было выбрать и Pure-FTPd). Но все линуксовые FTP-сервера устроены примерно одинаково - есть в принципе есть некая графическая оболочка, которую возможно использовать только в найпростейшем варианте (для одного пользователя) и есть конфиг с пользователями, который по-любому придется заполнять вручную для любого варианта с несколькими изолированными пользователями. В целом же, методика настройки и запуска, конфигурирование, проверка работы в основном похожи у любого линуксового FTP-сервера. И в принципе это те же элементарные основы, которые нужно понимать для настройки любово линуксового сервиса.

Итак, чтобы запустить FTP-сервер, надо понять что либо FTP-сервер непосредственно самолично слушает 21-й порт, либо его слушает суперсервер XINETD и запускает по необходимости сервис FTP (при появлении реквестов на 21-м порту). Надо научится запускать и проверять живой или нет сервис FTP. Также надо понять, что базы FTP-логинов могут быть разные, либо это база логинов пользователей Linux, либо просто перечень логинов для FTP в текстовом файлике (виртуальные пользователи). Есть также список забаненных логинов, есть общий механизм определения корневой директории FTP-пользователя в файловой системе кампутера и есть индивидуальный механизм определения корневой директории каждого отдельного пользователя. Вся эта комбинация параметров прописана в простом текстовом файле конфига, который на англицком можно почитать тут, а на русском тут.

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



Мдя, как видите графическая оболочка VSFTPD - одна из самых неудачных GUI в OpenSuse и в этом случае явно проигрывает даже убогому микрософтовскому IIS (чего конечно нельзя сказать о самом сервере VSFTPD). Кое-что в этой GIU видно - например на первой вкладке указан способ запуска FTP-сервера, постоянное прослушивание порта или по требования из XINETD. По-любому при таком слабом GUI либо придется выполнять ручное редактирование конфигурации, либо пользоваться другими графическими утилитами (не из репозитария OpenSuse). Но сначала разберемся с ручным конфигурированием - есть главный конфигурационный файл, в котором стоят сслылки на другие файлы (забанненых логинов, разрешенных логинов, имя сервиса имперсонализации, конфигурация каждого пользователя и так далее). В файлах, на которые ссылается главный конфиг есть тоже горы параметров (которые не для всех конфигураций требуются).



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



Для полной проверки извне рекомендуется использовать какой-нибудь приятный GUI-клиент FTP, например FileZilla.



Для работы по FTP обычно требуется определить стандартную структуру каталогов, чтобы в ней было удобно настраивать Apache.



Теперь надо определить собственно юзеров (логины для входа по FTP) и их права в системе. Основная фишка для обеспечения безопасности FTP (1) чтобы каждый юзер может работать в своем каталоге в режиме имперсонализации (PAM), (2) чтобы избежать создания Linux-логинов и создать только виртуальные логины исключительно для FTP-сервиса и тем самым на системном уровне запретить вызов командной строки Linux (аналога сommand.com ввиндузне) и всех прочих утилит, (3) дать минимально возможные права на ту учетку, под которой работает FTP-сервис при входе виртуального юзера. Чтобы создать логины в PAM-сервисе, нужно сначала создать логины/пароли в исходном виде для модуля pam_userdb.so и откомпилировать их с помощью db_load. Примеры таких вариантов конфуграционных файлов распространяется в дистрибутиве OpenSuSe /usr/share/doc/packages/vsftpd/EXAMPLE/.

Поскольку время мое на настройку FTP было весьма ограничено (и в данный момент вручную возиться с конфигурационными файлами просто некогда), я решил завершить эту задачу максимально быстро. Для этого я поставил другую графическую утилиту настройки FTP (system-config-vsftpd), которая ничем не уступает микрософтофскому FTP.



Я прощелкал все вкладки практически по умолчанию и увидел полностью все возможности VSFTPD. На последнем скринчике можно увидеть журнальчик куда я тыкнул при просмотре вкладок. Конечнно по количеству параметров, управляемости и сервису VSFTPD существенно превосходит IIS.



Проверил, все работает отлично:



Правда, как вы заметили, это простейшая настройка (которая ставится по умолчанию) - без виртуальных юзеров, по юзерам Линукса. Но из этой точки можно легко двинуться в любую нужную сторону. В дистрибутивах попроще, чем OpenSuSE - такой GUI нет, поэтому публикую рабочие конфиги vsftpd - основной и pam.d:


   1:  # Example config file /etc/vsftpd.conf
   2:  #
   3:  # The default compiled in settings are fairly paranoid. This sample file
   4:  # loosens things up a bit, to make the ftp daemon more usable.
   5:  # Please see vsftpd.conf.5 for all compiled in defaults.
   6:  #
   7:  # If you do not change anything here you will have a minimum setup for an
   8:  # anonymus FTP server.
   9:  #
  10:  # READ THIS: This example file is NOT an exhaustive list of vsftpd options.
  11:  # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
  12:  # capabilities.
  13:  #
  14:  # ################
  15:  # General Settings
  16:  # ################
  17:  #
  18:  # Uncomment this to enable any form of FTP write command.
  19:  write_enable=YES
  20:  #
  21:  # Activate directory messages - messages given to remote users when they
  22:  # go into a certain directory.
  23:  dirmessage_enable=YES
  24:  #
  25:  # It is recommended that you define on your system a unique user which the
  26:  # ftp server can use as a totally isolated and unprivileged user.
  27:  nopriv_user=ftpsecure
  28:  #
  29:  # You may fully customise the login banner string:
  30:  ftpd_banner=Welcome LINUX
  31:  #
  32:  # You may activate the "-R" option to the builtin ls. This is disabled by
  33:  # default to avoid remote users being able to cause excessive I/O on large
  34:  # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
  35:  # the presence of the "-R" option, so there is a strong case for enabling it.
  36:  #ls_recurse_enable=YES
  37:  #
  38:  # You may specify a file of disallowed anonymous e-mail addresses. Apparently
  39:  # useful for combatting certain DoS attacks.
  40:  #deny_email_enable=YES
  41:  # (default follows)
  42:  #banned_email_file=/etc/vsftpd.banned_emails
  43:  #
  44:  # If  enabled,  all  user  and  group  information in
  45:  # directory listings will be displayed as "ftp".
  46:  #hide_ids=YES
  47:  #
  48:  # #######################
  49:  # Local FTP user Settings
  50:  # #######################
  51:  #
  52:  # Uncomment this to allow local users to log in.
  53:  local_enable=YES
  54:  #
  55:  # Default umask for local users is 077. You may wish to change this to 022,
  56:  # if your users expect that (022 is used by most other ftpd's)
  57:  #local_umask=022
  58:  #
  59:  # You may specify an explicit list of local users to chroot() to their home
  60:  # directory. If chroot_local_user is YES, then this list becomes a list of
  61:  # users to NOT chroot().
  62:  #chroot_local_user=YES
  63:  #chroot_list_enable=YES
  64:  # (default follows)
  65:  #chroot_list_file=/etc/vsftpd.chroot_list
  66:  #
  67:  # The maximum data transfer rate permitted, in bytes per second, for
  68:  # local authenticated users. The default is 0 (unlimited).
  69:  #local_max_rate=7200
  70:  #
  71:  # ##########################
  72:  # Anonymus FTP user Settings
  73:  # ##########################
  74:  #
  75:  # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
  76:  anonymous_enable=YES
  77:  #
  78:  # The maximum data transfer rate permitted, in bytes per second, for anonymous
  79:  # authenticated users. The default is 0 (unlimited).
  80:  #anon_max_rate=7200
  81:  #
  82:  # Anonymous users will only be allowed to download files which are
  83:  # world readable.
  84:  anon_world_readable_only=YES
  85:  #
  86:  # Default umask for anonymus users is 077. You may wish to change this to 022,
  87:  # if your users expect that (022 is used by most other ftpd's)
  88:  #anon_umask=022
  89:  #
  90:  # Uncomment this to allow the anonymous FTP user to upload files. This only
  91:  # has an effect if the above global write enable is activated. Also, you will
  92:  # obviously need to create a directory writable by the FTP user.
  93:  #anon_upload_enable=YES
  94:  #
  95:  # Uncomment this if you want the anonymous FTP user to be able to create
  96:  # new directories.
  97:  #anon_mkdir_write_enable=YES
  98:  #
  99:  # Uncomment this to enable anonymus FTP users to perform other write operations
 100:  # like deletion and renaming.
 101:  #anon_other_write_enable=YES
 102:  #
 103:  # If you want, you can arrange for uploaded anonymous files to be owned by
 104:  # a different user. Note! Using "root" for uploaded files is not
 105:  # recommended!
 106:  #chown_uploads=YES
 107:  #chown_username=whoever
 108:  #
 109:  # ############
 110:  # Log Settings
 111:  # ############
 112:  #
 113:  # Log to the syslog daemon instead of using an logfile.
 114:  syslog_enable=YES
 115:  #
 116:  # Uncomment this to log all FTP requests and responses.
 117:  log_ftp_protocol=YES
 118:  #
 119:  # Activate logging of uploads/downloads.
 120:  xferlog_enable=YES
 121:  #
 122:  # You may override where the log file goes if you like. The default is shown
 123:  # below.
 124:  #
 125:  #vsftpd_log_file=/var/log/vsftpd.log
 126:  #
 127:  # If you want, you can have your log file in standard ftpd xferlog format.
 128:  # Note that the default log file location is /var/log/xferlog in this case.
 129:  #xferlog_std_format=YES
 130:  #
 131:  # You may override where the log file goes if you like. The default is shown
 132:  # below.
 133:  #xferlog_file=/var/log/vsftpd.log
 134:  #
 135:  # Enable this to have booth logfiles. Standard xferlog and vsftpd's own style log.
 136:  #dual_log_enable=YES
 137:  #
 138:  # Uncomment this to enable session status information in the system process listing.
 139:  #setproctitle_enable=YES
 140:  #
 141:  # #################
 142:  # Transfer Settings
 143:  # #################
 144:  #
 145:  # Make sure PORT transfer connections originate from port 20 (ftp-data).
 146:  connect_from_port_20=YES
 147:  #
 148:  # You may change the default value for timing out an idle session.
 149:  #idle_session_timeout=600
 150:  #
 151:  # You may change the default value for timing out a data connection.
 152:  #data_connection_timeout=120
 153:  #
 154:  # Enable this and the server will recognise asynchronous ABOR requests. Not
 155:  # recommended for security (the code is non-trivial). Not enabling it,
 156:  # however, may confuse older FTP clients.
 157:  #async_abor_enable=YES
 158:  #
 159:  # By default the server will pretend to allow ASCII mode but in fact ignore
 160:  # the request. Turn on the below options to have the server actually do ASCII
 161:  # mangling on files when in ASCII mode.
 162:  # Beware that on some FTP servers, ASCII support allows a denial of service
 163:  # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
 164:  # predicted this attack and has always been safe, reporting the size of the
 165:  # raw file.
 166:  # ASCII mangling is a horrible feature of the protocol.
 167:  ascii_upload_enable=YES
 168:  #ascii_download_enable=YES
 169:  #
 170:  # Set to NO if you want to disallow the  PASV  method of obtaining a data
 171:  # connection.
 172:  #pasv_enable=NO
 173:  #
 174:  # PAM setting. Do NOT change this unless you know what you do!
 175:  pam_service_name=vsftpd
 176:  #
 177:  # When "listen" directive is enabled, vsftpd runs in standalone mode and
 178:  # listens on IPv4 sockets. This directive cannot be used in conjunction
 179:  # with the listen_ipv6 directive.
 180:  listen=YES
 181:  #
 182:  # This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
 183:  # sockets, you must run two copies of vsftpd with two configuration files.
 184:  # Make sure, that one of the listen options is commented !!
 185:  #listen_ipv6=YES
 186:  #
 187:  # Set to ssl_enable=YES if you want to enable SSL
 188:  ssl_enable=NO
 189:  #
 190:  # Limit passive ports to this range to assis firewalling
 191:  pasv_min_port=30000
 192:  pasv_max_port=30100

   1:  #%PAM-1.0
   2:   
   3:  # Uncomment this to achieve what used to be ftpd -A.
   4:  # auth       required     pam_listfile.so item=user sense=allow file=/etc/ftpchroot onerr=fail
   5:   
   6:  auth     required       pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
   7:  # Uncomment the following line for anonymous ftp.
   8:  #auth     sufficient     pam_ftp.so
   9:  auth     required       pam_shells.so
  10:  auth     include        common-auth
  11:  account  include        common-account
  12:  password include        common-password
  13:  session  required       pam_loginuid.so
  14:  session  include        common-session





Сорри, заметка не завершена - позже постараюсь описать все подробнее c виртуальными юзерами, и FTP-директориями для Apache



Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19>  <20>  <21>  <22>  <23
Link to this page: //www.vb-net.com/vsftpd/index.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <CHAT ME>  <ABOUT ME>  < THANKS ME>