Настройка 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
|