|
Устанавливаем 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
|