Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В

..pdf
Скачиваний:
119
Добавлен:
24.05.2014
Размер:
3.66 Mб
Скачать

Глава 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

}

Глава 32. ProFTPD – FTP-сервер

473

# See how we were called. case "$1" in

start) start

;;

stop) stop

;;

status)

status /usr/sbin/proftpd

;;

restart) restart

;;

condrestart) condrestart

;;

*)

echo "Usage: proftpd {start|stop|status|restart|condrestart}" RETVAL=1

esac

exit $RETVAL

Шаг 2

Установите права доступа к файлу, назначьте его владельцем пользователя root:

[root@test /]# chmod 700 /etc/init.d/proftpd [root@test /]# chown 0.0 /etc/init.d/proftpd

Шаг 3

Если вы хотите, чтобы демон proftpd запускался автоматически при загрузке системы, создайте соответствующие ссылки:

[root@test /]# chkconfig --add proftpd [root@test /]# chkconfig --level 345 proftpd on

Создание учетной записи FTP-клиента для соединения с FTP-сервером

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

Шаг 1

Создайте нового пользователя, например, karlnext, не имеющего доступа к командному интерпретатору. Его домашний каталог был определен ранее директивой <Anonymous …> в разделе Anonymous Server Context конфигурационного файла /etc/proftpd.conf. Выполните команды:

[root@test /]# useradd -g users -s /bin/false karlnext [root@test /]# passwd karlnext

Changing password for user

karlnext New UNIX password:ka4l$ectetn0esl0v0 Retype new UNIX password: ka4l$ectetn0esl0v0

passwd: all authentication tokens updated successfully

Шаг 2

Создайте домашний FTP-каталог для нового пользователя:

[root@test /]# mkdir /home/karl_next

и определите его владельцем пользователя karlnext и группу владельца users:

[root@test /]# chown -R karlnex.users /home/karl_next

Тестирование ProFTPD

Шаг 1

Запустите FTP-сервер:

[root@test /]# /etc/init.d/proftpd start

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

Соседние файлы в предмете Информатика