Главная страница

Кто ты, сказочник?

Благодарности

Устанавливаем FreeBSD

Первоначальная конфигурация FreeBSD

Последующая настройка FreeBSD

Что необходимо для полного счастья

MySQL

Почтовый сервер на базе Exim + Dovecot + clamav + spamassassin

FTP-сервер

PHP+Apache

Squid + SquidGuard

Гостевая книга

Устанавливаем ftp-сервер

Для нашего ftp-сервера мы будем использовать PureFTPd. Это один из безопасных серверов поддерживающий защищенное соединение SSL и с поддержкой виртуальных аккаунтов.

Забираем последнюю версию (на момент написания это 1.0.20) с сайта www.pureftpd.org. Распакуем, сконфигурируем с помощью созданного нами скрипта, скомпилируем и установим. Так же сегнерируем сертификат SSL для нашего фтп-сервера.

$ cd $HOME/install
$ links www.pureftpd.org
$ tar xzfv pure-ftpd-1.0.20.tar.gz
$ cd pure-ftpd-1.0.20
$ ee config.sh
./configure \
--with-everything \
--with-paranoidmsg \
--with-virtualchroot \
--with-mysql=/usr/local/mysql \
--with-mysql-lib=/usr/local/mysql/lib/mysql \
--with-mysql-include=/usr/local/mysql/include/mysql \
--with-cookie \
--with-peruserlimits \
--with-throttling \
--with-ratios \
--with-quotas \
--sysconfdir=/usr/local/etc \
--with-tls \
--with-certfile=/etc/ssl/certs/ftp.pem

$ sh config.sh
$ make
$ su
# make install
# cp configuration-file/pure-config.pl /usr/local/sbin/
# chmod +x /usr/local/sbin/pure-config.pl

Создадим сертификат для защищенного соединения с нашим сервером.

# cd /etc/ssl/certs
# openssl req -x509 -newkey rsa:1024 -keyout ftp.pem -out ftp.pem -days 9999 -nodes
# chmod 440 /etc/ssl/certs/ftp.pem
# exit

Для работы нашего фтп-сервера нужно создать базу данных, пользователя и таблицу пользователей, а также создать конфигурациооные файлы PurFTPd.

Начнем с базы. Как помнишь, многие вещи я люблю записывать в отдельные файлы. Вот и структуру нашей базы пользоватлей фтп мы тоже создадим в отдельном файле.

$ ee pureftpd.sql
### таблица пользователей ###
CREATE TABLE users (
  user varchar(16) NOT NULL default '',
  password varchar(64) NOT NULL default '',
  uid int(11) NOT NULL default '10000',
  gid int(11) NOT NULL default '10000',
  dir varchar(128) NOT NULL default '',
  userip varchar(15) NOT NULL default '',
  serverip varchar(15) NOT NULL default '',
  quotasize int(11) NOT NULL default '0',
  ulbandwidth int(11) NOT NULL default '0',
  dlbandwidth int(11) NOT NULL default '0',
  ulratio int(11) NOT NULL default '0',
  dlratio int(11) NOT NULL default '0',
  PRIMARY KEY  (user)
);
### наш первый пользователь ###
INSERT INTO users (user,password,uid,dir) \
VALUES ('admin', encrypt('my_password'), '1001', '/home/admin');

После чего приступим.

$ /usr/local/mysql/bin/mysql -u myadmin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 470 to server version: 4.1.10a-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
mysql> CREATE DATABASE pureftpd;
mysql> GRANT ALL PRIVILEGES ON pureftpd.* TO pureftpd@localhost
    -> IDENTIFIED BY 'my_base_password' WITH GRANT OPTION;
mysql> use pureftpd;
mysql> \. pureftpd.sql
mysql> \q

Теперь создадим конфигурационные файлы.

Файл конфигурации самого сервера. Здесь куча опций для различных настроек. Так что все в твоих руках. Здесь я приведу рабочий файл с одного из моих серверов, который эксплуатируется для внутреннего использования.

$ su
# ee /usr/local/etc/pure-ftpd.conf
### Configuration file for pure-ftpd wrappers ###

ChrootEveryone              yes
BrokenClientsCompatibility  no
MaxClientsNumber            50
Daemonize                   yes
MaxClientsPerIP             8
VerboseLog                  no
DisplayDotFiles             yes
AnonymousOnly               no
NoAnonymous                 no
SyslogFacility              ftp
DontResolve                 yes
MaxIdleTime                 15
MySQLConfigFile             /usr/local/etc/pureftpd-mysql.conf
LimitRecursion              2000 8
AnonymousCanCreateDirs      no
MaxLoad                     4
AntiWarez                   yes
Umask                       133:022
MinUID                      100
AllowUserFXP                no
AllowAnonymousFXP           no
ProhibitDotFilesWrite       no
ProhibitDotFilesRead        no
AutoRename                  no
AnonymousCantUpload         yes
CreateHomeDir               no
PIDFile                     /var/run/pure-ftpd.pid
MaxDiskUsage                99
CustomerProof               yes
TLS                         1

Создадим файл конфигурации аутентифакции и установим права на него.

# ee /usr/local/etc/pureftpd-mysql.conf
MYSQLSocket     /tmp/mysql.sock
MYSQLUser       pureftpd
MYSQLPassword   my_base_password
MYSQLDatabase   pureftpd
MYSQLCrypt      any
MYSQLGetPW      SELECT Password FROM users WHERE User="\L"
MYSQLGetUID     SELECT Uid FROM users WHERE User="\L"
MYSQLGetGID     SELECT Gid FROM users WHERE User="\L"
MYSQLGetDir     SELECT Dir FROM users WHERE User="\L"

# chmod 600 /usr/local/etc/pureftpd-mysql.conf

Напишем скрипт для автозапуска pureftpd при загрузке и присвоим ему исполняемый бит.

# ee /usr/local/etc/rc.d/pure-ftpd.sh
#!/bin/sh

case "$1" in
  start)
    echo -n "Starting Pure-FTPd..."
    /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf > /dev/null
  ;;
  stop)
    echo -n "Shutting down Pure-FTPd..."
    kill `cat /var/run/pure-ftpd.pid | head -1`
  ;;
  restart)
    echo -n "Restarting Pure-FTPd..."
    kill `cat /var/run/pure-ftpd.pid | head -1`
    sleep 1
    /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf > /dev/null
  ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
  ;;
esac

# chmod +x /usr/local/etc/rc.d/pure-ftpd.sh

И запустим наш сервер.

# /usr/local/etc/rc.d/pure-ftpd.sh start
# exit

И проверим работоспособность нашего фтп-сервера.

$ ftp localhost
Trying ::1...
Connected to localhost.ru.
220---------- Welcome to Pure-FTPd [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 20:16. Server port: 21.
220 You will be disconnected after 15 minutes of inactivity.
Name (localhost:admin):

Вводим имя нашего пользователя admin и затем его пароль.


331 User admin OK. Password required
Password:
230-User admin has group access to:  10000
230 OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

"Ну вот мы и в Хопре!"

Если ты разрешишь анонимным пользователям пользоваться твоим ftp-сервером, то не забудь создать системного пользователя ftp, который обычно имеет uid=14 и принадлежит группе operator, и создать стандартную структуру каталогов фтп-сервера.

$ su
# pw useradd ftp -u 14 -c "Anonymous FTP" -d /var/ftp -g operator -s /nonexistent
# mkdir -p /var/ftp/incoming /var/ftp/pub
# chgrp -R operator /var/ftp
# chmod 1777 /var/ftp/incoming
# chmod 755 /var/ftp/pub