LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В
..pdfГлава 32. ProFTPD – FTP-сервер |
471 |
В этом файле ProFTPD передается единственная опция, включающая отладочный режим, в рассматриваемом примере она закоментирована.
Шаг 2
Установите права доступа к файлу /etc/sysconfig/proftpd и назначьте его владельцем пользователя root:
[root@test /]# chmod 644 /etc/sysconfig/proftpd [root@test /]# chown 0.0 /etc/sysconfig/proftpd
Конфигурационный файл /etc/pam.d/ftp
Этот файл используется для поддержки аутентификации пользователей с использованием стандартных модулей PAM.
Шаг 1
Создайте файл /etc/pam.d/ftp, содержащий следующие строки:
#%PAM-1.0 |
|
|
auth |
required |
/lib/security/pam_listfile.so item=user |
sense=deny |
file=/etc/ftpusers onerr=succeed |
|
auth |
required |
/lib/security/pam_pwdb.so shadow nullok |
auth |
required |
/lib/security/pam_shells.so |
account |
required |
/lib/security/pam_pwdb.so |
session |
required |
/lib/security/pam_pwdb.so |
Шаг 2
Установите права доступа к файлу /etc/pam.d/ftp и назначьте его владельцем пользователя
root:
[root@test /]# chmod 640 /etc/pam.d/ftp [root@test /]# chown 0.0 /etc/pam.d/ftp
Конфигурационный файл /etc/ftpusers
Этот файл используется для определения списка пользователей, для которых доступ к FTP-серверу закрыт. Сюда необходимо внести всех привилегированных пользователей вашей системы.
Шаг 1
Внесите в файл /etc/ftpusers всех привилегированных пользователей вашей системы:
•root;
•bin;
•daemon;
•sync;
•mail;
•nobody;
•named;
•rpm;
•www;
•amavis;
•mysql.
Шаг 2
Установите права доступа к файлу /etc/ftpusers и назначьте его владельцем пользователя root:
[root@test /]# chmod 600 /etc/ftpusers [root@test /]# chown 0.0 /etc/ftpusers
472 |
Часть 9. Программное обеспечение для организации службы FTP-сервера |
Файл инициализации /etc/init.d/proftpd
Шаг 1
Для запуска и остановки ProFTPD создайте файл /etc/init.d/proftpd, содержащий следующие строки:
#!/bin/bash
#This shell script takes care of starting and stopping ProFTPD (FTP server).
#chkconfig: 345 85 15
#description: ProFTPD is an enhanced FTP server with a focus toward \
# |
simplicity, security, and ease of configuration. |
# |
|
#processname: /usr/sbin/proftpd
#config: /etc/sysconfig/network
#config: /etc/proftpd.conf
#Source function library.
. /etc/rc.d/init.d/functions
# Get config.
test -f /etc/sysconfig/network && . /etc/sysconfig/network
if [ -f /etc/sysconfig/proftpd ]; then
. /etc/sysconfig/proftpd
fi
# Check that networking is up.
[ ${NETWORKING} = "yes" ] || exit 0 [ -f /usr/sbin/proftpd ] || exit 1 [ -f /etc/proftpd.conf ] || exit 1
RETVAL=0
start() {
echo -n "Starting ProFTPD: " daemon proftpd $OPTIONS RETVAL=$?
echo
touch /var/lock/subsys/proftpd return $RETVAL
}
stop() {
echo -n "Shutting down ProFTPD: " killproc proftpd
RETVAL=$? echo
rm -f /var/lock/subsys/proftpd return $RETVAL
}
restart() { stop start
}
condrestart() {
[ -e /var/lock/subsys/proftpd ] && restart return 0
}
474 |
Часть 9. Программное обеспечение для организации службы FTP-сервера |
Starting ProFTPD: |
[ОК] |
Шаг 2
Попытайтесь установить соединение с FTP-сервером с помощью FTP-клиента. В комплект поставки ASPLinux 7.3 входит консольный FTP-клиент, находящийся в пакете ftp-0.17-13.i386.rpm.
Перейдите в каталог, где находятся требуемые пакеты. Если вы в соответствии с рекомендациями главы 2 скопировали все исходные rpm-пакеты в каталог /home/distrib:
[root@test /]# cd /home/distrib
[root@drwalbr distrib]# rpm -ihv ftp-0.17-13.i386.rpm
Запустите FTP-клиент от имени обычного пользователя, например, drwalbr:
[drwalbr@test dr_walbr]$ ftp
Установите соединение с вашим FTP-сервером: ftp> open test.bruy.info
Connected to test.bruy.info (212.111.80.58). 220 Ok, Test FTPD BRUY.INFO!
Шаг 3
Зарегистрируйтесь на FTP-сервере в качестве пользователя karlnext:
Name (test.bruy.info:drwalbr): karlnext 331 Password required for karlnext. Password: ka4l$ectetn0esl0v0
230 Anonymous access granted, restrictions apply. Remote system type is UNIX.
Using binary mode to transfer files.
Протестируйте работоспособность всех директив, используемых в файле /etc/proftpd.conf. Например, для проверки работоспособности ограничений на пропускную способность соединения сравните время загрузки на сервер предварительно созданных файлов с размером менее и более 256 кБайт:
ftp> put lt256
local: lt256 remote: lt256
227 Entering Passive Mode (212,111,80,58,136,28).
150 Opening BINARY mode data connection for lt256
226 Transfer complete.
95434 bytes sent in 0.00149 secs (6.3e+04 Kbytes/sec) ftp> put gt256
local: gt256 remote: gt256
227 Entering Passive Mode (212,111,80,58,223,196).
150 Opening BINARY mode data connection for gt256
226 Transfer complete.
449817 bytes sent in 17.7 secs (25 Kbytes/sec)
Шаг 4
По окончании тестирования завершите сеанс работы с FTP-сервером: ftp> quit
221 Goodbye.
Шаг 5
Используя утилиту ftpwho, можно получить информацию о состоянии сервера и количестве подключенных к нему клиентов:
[drwalbr@test /]$ ftpwho standalone FTP daemon [29900]:
28402 ftp |
[ 1m33s] 0m37s (idle) |
|
Service class |
- |
1 user |
Глава 32. ProFTPD – FTP-сервер |
475 |
Конфигурирование ProFTPD с поддержкой протокола SSL
Для запуска ProFTPD с поддержкой протокола SSL необходимо выполнить следующие операции.
ЗАМЕЧАНИЕ Для включения поддержки протокола SSL исходные коды ProFTPD необходимо сконфигурировать с опцией --with-openssl-dir=/usr/share/ssl и подключением модуля mod_tls. В версии ProFTPD 1.2.8 использование этого модуля вы можете осуществлять на свой страх и риск. Тем не менее, разработчики ProFTPD планируют включение этого модуля в следующей версии FTP-сервера.
Шаг 1 Для создания самостоятельно подписанного сертификата необходимо наличие собственного серти-
фикационного центра. Если вы его уже создали, то перейдите к следующему шагу. В противном случае ознакомьтесь с рекомендациями раздела «Тестирование OpenSSL» главы 12 и создайте собственный сертификационный центр.
Шаг 2
Создайте закрытый ключ, не защищенный паролем, для чего перейдите в каталог/usr/share/ssl:
[root@test /]# cd /usr/share/ssl
Выберите пять любых больших файлов со случайным (уникальным) содержанием, скопируйте их в каталог /usr/share/ssl и переименуйте в random1, random2, random3, random4, random5, по-
сле чего выполните команду:
[root@test ssl]# openssl genrsa -rand random1:random2:random3:random4:random5 -out ftpd-rsa.key.pem 1024
2019245 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
..................++++++
...................................................++++++
e is 65537 (0x10001)
Шаг 3 Создайте запрос на подтверждение сертификата:
[root@test ssl]# openssl req -new -key ftpd-rsa.key.pem -out ftpdrsa.csr.pem
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]: <Enter>
State or Province Name (full name) [Moscow]: <Enter> Locality Name (eg, city) [Yubileyniy]: <Enter> Organization Name (eg, company) [Valentine Bruy]: <Enter> Organizational Unit Name (eg, section) [Home]: <Enter> Common Name (eg, YOUR name) [test.bruy.info]: <Enter>
Email Address [drwalbr@bruy.info]:ftp@test.bruy.info <Enter>
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []: <Enter>
Шаг 4 Подпишите сертификат:
[root@test ssl]# /usr/share/ssl/misc/sign ftpd-rsa.csr.pem
CA signing: ftpd-rsa.csr.pem -> ftpd-rsa.csr.pem.crt: Using configuration from ca.config
Enter pass phrase for /usr/share/ssl/private/ca.key:$()VSecretn0eSlovo Check that the request matches the signature
Signature ok
476 |
Часть 9. Программное обеспечение для организации службы FTP-сервера |
|
|
The Subject's Distinguished Name is as follows |
|
|
countryName |
:PRINTABLE:'RU' |
|
stateOrProvinceName |
:PRINTABLE:'Moscow' |
|
localityName |
:PRINTABLE:'Yubileyniy' |
|
organizationName |
:PRINTABLE:'Valentine Bruy' |
|
organizationalUnitName:PRINTABLE:'Home' |
|
|
commonName |
:PRINTABLE:'test.bruy.info' |
|
emailAddress |
:IA5STRING:'ftp@test.bruy.info' |
|
Certificate is to be certified until Jul 6 13:15:43 2004 GMT (365 days) |
|
|
Sign the certificate? |
[y/n]: y |
1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries
Data Base Updated
CA verifying: ftpd-rsa.csr.pem.crt <-> CA cert ftpd-rsa.csr.pem.crt: OK
Шаг 5 Переместите файл, содержащий закрытый ключ и сертификат, в каталог
/usr/share/ssl/private. Переименуйте файл ftpd-rsa.csr.pem.crt в ftpd-rsa.pem и пере-
местите его в каталог /usr/share/ssl/certs. Определите права доступа к файлам и удалите ненужный более файл ftpd-rsa-csr.pem:
[root@test ssl]# mv ftpd-rsa.key.pem private
[root@test ssl]# mv ftpd-rsa.csr.pem.crt certs/ftpd-rsa.pem [root@test ssl]# chmod 400 private/ftpd-rsa.key.pem [root@test ssl]# chmod 400 certs/ftpd-rsa.pem
[root@test ssl]#rm -f ftpd-rsa-csr.pem
Шаг 6
Внесите в файл /etc/proftpd.conf изменения, руководствуясь ниже приведенными рекомендациями:
General Server Context. |
|
ServerName |
"Test FTPD BRUY.INFO" |
ServerType |
standalone |
DefaultServer |
on |
Port |
990 |
tcpBackLog |
10 |
MaxInstances |
30 |
CommandBufferSize |
50 |
UseReverseDNS |
off |
IdentLookups |
off |
User |
ftp |
Group |
ftp |
AccessDenyMsg |
"Access for %u has been denied" |
AuthPAMAuthoritative |
on |
DeferWelcome |
on |
MultilineRFC2228 |
on |
AllowFilter |
"^[a-zA-Z0-9 ,.,-]*$" |
DefaultRoot |
~ users |
TLSRSACertificateFile |
/usr/share/ssl/certs/ftpd-rsa.pem |
TLSRSACertificateKeyFile |
/usr/share/ssl/private/ftpd-rsa.key.pem |
TlsRequired |
on |
# Global Server Context. |
|
<Global> |
|
DeleteAbortedStores |
on |
MaxClients |
3 |
MaxLoginAttempts |
3 |
#RateReadBPS |
56400 |
TransferRate |
APPE,RETR,STOR,STOU 56.4:256000 |
Глава 32. ProFTPD – FTP-сервер |
|
477 |
ServerIdent |
on |
"Ok, Test FTPD BRUY.INFO!" |
Umask |
022 |
|
</Global> |
|
|
#Limit normal user logins, because we only want to allow Guest logins. <Limit LOGIN>
DenyAll </Limit>
#Anonymous Server Context.
<Anonymous /home/karl_next>
User |
karlnext |
Group |
users |
AnonRequirePassword |
on |
<Limit LOGIN> |
|
Order Allow,Deny |
|
Allow from 212.45.28.123,192.168.1 |
|
Deny from all |
|
</Limit> |
|
HideUser |
root |
HideGroup |
root |
<Directory /*> |
|
AllowOverwrite on |
|
</Directory> |
|
</Anonymous> |
|
В данном файле директива: |
|
Port |
990 |
определяет порт, на котором ProFTPD ожидает подключений с поддержкой протокола SSL.
Директивы: |
|
TLSRSACertificateFile |
ftpd-rsa.pem |
и |
|
TLSRSACertificateKeyFile |
ftpd-rsa.key.pem |
определяют местоположение файлов, содержащих закрытый ключ и сертификат.
Директива: |
|
TlsRequired |
on |
определяет, какие виды соединений должны осуществляться с поддержкой протокола SSL. В рассматриваемом примере – все.
В разделе Anonymous Server Context были внесены изменения, не имеющие никакого отношения к поддержке протокола SSL, но существенно повышающие защищенность FTP-сервера:
<Limit LOGIN>
Order Allow,Deny
Allow from 212.45.28.123,192.168.1 Deny from all
</Limit>
Врассматриваемом примере доступ к FTP-серверу разрешен только из локальной сети 192.168.1.0/24
иудаленного офиса с IP-адресом шлюза 212.45.28.123. Такой вариант ограничения доступа может использоваться в любом варианте конфигурации ProFTPD (с аутентификацией пользователей, анонимным доступом, поддержкой SSL).
Шаг 7
Установите права доступа к файлу /etc/proftpd.conf и назначьте его владельцем пользователя
root:
[root@test /]# chmod 640 /etc/proftpd.conf [root@test /]# chown 0.0 /etc/proftpd.conf
Шаг 8 Создайте остальные конфигурационные файлы в соответствии с рекомендациями раздела «Конфигу-
рирование ProFTPD c аутентификацией пользователей».
478 |
Часть 9. Программное обеспечение для организации службы FTP-сервера |
Шаг 9
Протестируйте доступ к FTP-серверу с поддержкой протокола SSL в соответствии с рекомендациями раздела «Тестирование ProFTPD». Перечень клиентов и их краткое описание может быть получено со стра-
ницы http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext.html.
Конфигурирование ProFTPD в режиме анонимного FTP-сервера
Для конфигурирования ProFTPD в режиме анонимного FTP-сервера необходимо выполнить следующие операции.
Шаг 1 Создайте каталог, в который будет разрешен анонимный доступ, и назначьте его владельцем пользо-
вателя ftp:
[root@test /]# mkdir /home/ftp [root@test /]# chown ftp.ftp /home/ftp/
Шаг 2
Отредактируйте файл /etc/proftpd.conf, внесите изменения, руководствуясь приведенными ниже рекомендациями и вашими потребностями:
# General Server Context. |
|
ServerName |
"Anonymous FTP" |
ServerType |
standalone |
DefaultServer |
on |
Port |
21 |
tcpBackLog |
10 |
MaxInstances |
30 |
CommandBufferSize |
50 |
UseReverseDNS |
off |
IdentLookups |
off |
User |
ftp |
Group |
ftp |
AuthPAMAuthoritative |
on |
MultilineRFC2228 |
on |
AllowFilter |
"^[a-zA-Z0-9 ,.,-]*$" |
# Global Server Context. |
|
<Global> |
|
DeleteAbortedStores |
on |
MaxClients |
10000 |
MaxLoginAttempts |
3 |
TransferRate |
APPE,RETR,STOR,STOU 56.4:256000 |
ServerIdent |
on "Ok, Test FTPD BRUY.INFO!" |
Umask |
022 |
</Global> |
|
#We don't want normal users logging in at all. <Limit LOGIN>
DenyAll </Limit>
#Normally, we want files to be overwriteable. <Directory /*>
AllowOverwrite |
on |
</Directory> |
|
#A basic Anonymous configuration, no upload directories.
<Anonymous ~ftp>
#Allow Anonymous logins here since all logging are disabled above.
<Limit LOGIN> AllowAll
</Limit>
Глава 32. ProFTPD – FTP-сервер |
479 |
AnonRequirePassword |
off |
RequireValidShell |
off |
User |
ftp |
Group |
ftp |
#We want 'welcome.msg' displayed at login, and '.message' displayed
#in each newly chdired directory.
DisplayLogin |
welcome.msg |
DisplayFirstChdir |
.message |
# |
We want clients to be able to login with "anonymous" as well as "ftp". |
|
UserAlias |
anonymous ftp |
|
# |
Limit the maximum number of anonymous logins. |
|
MaxClients |
10000 |
|
# Limit WRITE everywhere in the anonymous chroot jail.
<Limit WRITE> DenyAll
</Limit>
</Anonymous>
В данном файле директива: |
|
MaxClients |
10000 |
как и в предыдущей конфигурации, определяет максимально возможное число клиентов, подключаемых к FTP-серверу, однако, сейчас их число увеличено до 10000.
Основные директивы конфигурации анонимного FTP-сервера находятся в блоке, ограниченном ди-
рективами <Anonymous ~ftp> и </Anonymous>
Директива: |
|
AnonRequirePassword |
off |
в отличие от предыдущей конфигурации, отменяет обязательный ввод пароля, вместо него пользователь сможет ввести все, что угодно.
Директива: |
|
RequireValidShell |
off |
используется для разрешения входа в систему пользователей, не имеющих доступа к командному интерпретатору. По умолчанию эта директива устанавливает значение "off" и запрещает вход в систему таким пользователям.
Директивы: |
|
User |
ftp |
и |
|
Group |
ftp |
определяют анонимного пользователя. |
|
Директива: |
|
DisplayLogin |
welcome.msg |
определяет имя файла в корневом каталоге для анонимных пользователей, содержащего текст приветственного сообщения, отображаемого пользователю при входе на FTP-сервер.
Директива: |
|
DisplayFirstChdir |
.message |
определяет имя файла в соответствующем каталоге, содержащего текст отображаемого пользователю приветственного сообщения при первом входе в каталог.
Директива: |
|
UserAlias |
anonymous ftp |
для сопоставления реальным пользователям псевдонимов. В рассматриваемом примере анонимный пользователь может зарегистрироваться, используя логин ftp или anonymous.
Блок директив:
<Limit WRITE> DenyAll
</Limit>
запрещает запись всем пользователям.
В приведенном выше примере конфигурации анонимным пользователям не разрешено закладывать файлы на FTP-сервер. Для того, чтобы разрешить им загрузку файлов в некоторый каталог на анонимном FTP-сервере необходимо выполнить следующие операции.
480 |
Часть 9. Программное обеспечение для организации службы FTP-сервера |
Шаг 3 Создайте каталог, в который будет разрешен анонимный доступ и назначьте его владельцем пользо-
вателя ftp:
[root@test /]# mkdir /home/ftp/uploads [root@test /]# chown ftp.ftp /home/ftp/uploads
Шаг 4
Внесите изменения в файл /etc/proftpd.conf, руководствуясь приведенными ниже рекомендациями и вашими потребностями:
# General Server Context. |
|
ServerName |
"Anonymous FTP" |
ServerType |
standalone |
DefaultServer |
on |
Port |
21 |
tcpBackLog |
10 |
MaxInstances |
30 |
CommandBufferSize |
50 |
UseReverseDNS |
off |
IdentLookups |
off |
User |
ftp |
Group |
ftp |
AuthPAMAuthoritative |
on |
MultilineRFC2228 |
on |
AllowFilter |
"^[a-zA-Z0-9 ,.,-]*$" |
# Global Server Context. |
|
<Global> |
|
DeleteAbortedStores |
on |
MaxClients |
10000 |
MaxLoginAttempts |
3 |
TransferRate |
APPE,RETR,STOR,STOU 56.4:256000 |
ServerIdent |
on "Ok, Test FTPD BRUY.INFO!" |
Umask |
022 |
</Global> |
|
#We don't want normal users logging in at all. <Limit LOGIN>
DenyAll </Limit>
#Normally, we want files to be overwriteable. <Directory /*>
AllowOverwrite |
on |
</Directory> |
|
#A basic Anonymous configuration, no upload directories. <Anonymous ~ftp>
#Allow Anonymous logins here since all logging are disabled above. <Limit LOGIN>
AllowAll </Limit>
AnonRequirePassword |
off |
RequireValidShell |
off |
User |
ftp |
Group |
ftp |
#We want 'welcome.msg' displayed at login, and '.message' displayed
#in each newly chdired directory.
DisplayLogin |
welcome.msg |
DisplayFirstChdir |
.message |
