Установка и настройка Proftpd Proftpd-Administrator MySQL/MariaDB Apache

Цель

Организация ftp доступа к серверу с хранением имен пользователей и паролей, домашних каталогов и т.д. в СУБД MySQL

Описание

ProFTPd — FTP-сервер для Linux и UNIX-подобных операционных систем.

Поддерживаемые платформы

  • AIX
  • BSD/OS
  • DG/UX
  • Digital Unix
  • FreeBSD
  • HP/UX
  • IRIX
  • Linux for IBM S/390, zSeries
  • Linux
  • Mac OS X
  • NetBSD
  • OpenBSD
  • SCO
  • Solaris
  • SunOS
  • Windows (via Cygwin)

Список литературы

Базовая установка CentOS

Версия 6.6, х64, minimal

cd

Перед началом необходимо добавить репозитории:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 

После установки необходимо включить «remi»: отредактировать файл /etc/yum.repos.d/remi.repo, поменяв с enable=0 на enable=1 в разделах [remi] и [remi-php55]

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm 

Этот репозиторий взят с сайта postgre https://downloads.mariadb.org/mariadb/repositories/#mirror=mephi

cat << EOT > /etc/yum.repos.d/mariadb.repo
# MariaDB 10.0 CentOS repository list - created 2015-04-16 11:23 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOT

Далее, обновить.

yum update -y

Отключение сервисов

Необходимо отключить SELinux. Для этого в файле /etc/selinux/config заменить

SELINUX=enforced

на

SELINUX=disabled

Необходимо отключить IPTables:

chkconfig iptables off

и

chkconfig ip6tables off

Далее, прописать хостнэйм нашей машины в файле /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.1 proftpd.pnv152.ru

После чего, перезагрузить сервер.

Установка дополнительного ПО

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

yum install jwhois bind-utils mc wget which tcpdump traceroute ntp telnet mlocate gd dos2unix

Установка и настройка MySQL / MariaDB

yum install MariaDB-client MariaDB-devel MariaDB-server

Шаблон кофигурации я взял /usr/share/mysql/my-innodb-heavy-4G.cnf Скопировал поверх /etc/my.cnf и немного поправил. Вот результат:

[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock

#
# The MariaDB server
#
[mysqld]

user=mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
bind-address = 127.0.0.1

port            = 3306
socket          = /var/lib/mysql/mysql.sock
back_log = 50
#skip-networking
max_connections = 100
max_connect_errors = 10
table_open_cache = 2048
#external-locking
max_allowed_packet = 16M
binlog_cache_size = 1M
max_heap_table_size = 64M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_cache_size = 8
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
#memlock
default-storage-engine = INNODB
thread_stack = 240K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
#log-bin=mysql-bin
#binlog_format=mixed
#log_slave_updates
#log
#log_warnings
slow_query_log
long_query_time = 2
tmpdir = /tmp

#*** MyISAM Specific options

key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover

# *** INNODB Specific options ***

#skip-innodb
#innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 2G
innodb_data_file_path = ibdata1:10M:autoextend
#innodb_data_home_dir = <directory>
innodb_write_io_threads = 8
innodb_read_io_threads = 8
#innodb_force_recovery=1
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 1
#innodb_fast_shutdown
innodb_log_buffer_size = 8M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
#innodb_log_group_home_dir
innodb_max_dirty_pages_pct = 90
#innodb_flush_method=O_DSYNC
innodb_lock_wait_timeout = 120

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
open-files-limit = 8192

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
!includedir /etc/my.cnf.d

Запускаем сервис

service mysql start

Настраиваем:

/usr/bin/mysql_secure_installation

Включаем в автозагрузку

chkconfig mysql on

Установка Apache

yum install httpd httpd-devel mod_ssl

Поправил конфигурационный файл

vi /etc/httpd/conf/httpd.conf

Результат:

### Section 1: Global Environment
#
TraceEnable Off
ServerTokens Prod
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
##

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

Listen 80

#
# Dynamic Shared Object (DSO) Support
#

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so

#
# Load config files from the config directory "/etc/httpd/conf.d".
#
Include conf.d/*.conf

User apache
Group apache

### Section 2: 'Main' server configuration
#

ServerAdmin root@localhost
ServerName proftpd.pnv152.ru:80
UseCanonicalName Off
DocumentRoot "/var/www/html"

<Directory />
    Options FollowSymLinks
    Order deny,allow
    AllowOverride All
    Allow from all
</Directory>

<Directory "/var/www/html">
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

<IfModule mod_userdir.c>
    UserDir disabled
</IfModule>

DirectoryIndex index.html index.html.var
AccessFileName .htaccess

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

TypesConfig /etc/mime.types

DefaultType text/plain

<IfModule mod_mime_magic.c>
#   MIMEMagicFile /usr/share/magic.mime
    MIMEMagicFile conf/magic
</IfModule>

HostnameLookups Off
EnableMMAP off
EnableSendfile off
ErrorLog logs/error_log
LogLevel warn

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log common
CustomLog logs/referer_log referer
CustomLog logs/agent_log agent
CustomLog logs/access_log combined
ServerSignature Off

Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<IfModule mod_dav_fs.c>
    DAVLockDB /var/lib/dav/lockdb
</IfModule>

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

DefaultIcon /icons/unknown.gif

AddDescription "GZIP compressed document" .gz
AddDescription "tar archive" .tar
AddDescription "GZIP compressed tar archive" .tgz

ReadmeName README.html
HeaderName HEADER.html

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

DefaultLanguage ru

AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw

LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

ForceLanguagePriority Prefer Fallback

AddDefaultCharset UTF-8

AddType application/x-tar .tgz
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
AddHandler cgi-script .cgi
AddHandler send-as-is asis
AddHandler type-map var
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

Alias /error/ "/var/www/error/"

<IfModule mod_negotiation.c>
<IfModule mod_include.c>
    <Directory "/var/www/error">
        AllowOverride None
        Options IncludesNoExec
        AddOutputFilter Includes html
        AddHandler type-map var
        Order allow,deny
        Allow from all
        LanguagePriority en es de fr
        ForceLanguagePriority Prefer Fallback
    </Directory>
</IfModule>
</IfModule>

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully

Установка и настройка PHP

Ставим php 5.5 (Если есть желание установить 5.6, то необходимо в remi.repo включить [remi-php56])

yum install php php-cli php-gd php-common php-devel php-mbstring php-snmp php-soap php-xml php-xmlrpc php-mcrypt php-mysqlnd php-pdo php-pear php-process

Корректируем конфиг:

vi /etc/php.ini

Кроме того, надо прописать timezone

date.timezone = Europe/Moscow

Запускаем сервис httpd:

service httpd start

Добавляем в автозагрузку

chkconfig httpd on

Проверяем работу связки apache + php

Создадим файл

cat << EOT > /var/www/html/testphp.php
<?php
phpinfo();
?>
EOT

Смотрим на содержимое через браузер. В моем случае http://proftpd.pnv152.ru/testphp.php

После изучения этой информации - удаляем файл, т.к. он доступен в настоящий момент всем.

rm -f /var/www/html/testphp.php

Установка и настройка ProFTPD 1.3.4a

Для начала устанавливаем пакет proftpd-mysql.x86_64, после чего приступаем к настройке конфигурационного файла /etc/proftpd.conf

Прошу обратить внимание на версию proftpd, т.к. в более старых версиях конфигурация отличается!

yum install proftpd-mysql

Конфигурационный файл настроен с учётом как доступа пользователей по паролю, так и анонимного.

ServerName                      "ProFTPD server"
ServerIdent                     on "FTP Server ready."
ServerAdmin                     root@localhost
ServerType                      standalone
DefaultServer                   on
AccessGrantMsg                  "User %u logged in."
DisplayGoAway                   /etc/ftpgoaway
DeferWelcome                    off
DefaultRoot                     ~ !test_user
IdentLookups                    off
UseReverseDNS                   off
Port                            21
Umask                           022
ListOptions                     "-a"
RootLogin                       off
MaxLoginAttempts                3
MaxClientsPerHost               3
AllowRetrieveRestart            on
AllowStoreRestart               on
MaxInstances                    20
TimeoutStalled                  300
User                            nobody
Group                           nobody
UseSendfile                     no
ScoreboardFile                  /var/run/proftpd.score

##### эти строки нужны для указания конкретного ip для 21-ого порта ####
#SocketBindTight                 on
#DefaultAddress                  192.168.0.1
########################################################################

<Global>
  AllowOverwrite                yes
  <Limit ALL SITE_CHMOD>
    AllowAll
  </Limit>
</Global>


<IfModule mod_dso.c>
   LoadModule mod_sql.c
   LoadModule mod_sql_mysql.c

## настройки для авторизации через mysql. (пароли используются в открытом виде: PlainText)
  SQLConnectInfo proftpd_db@localhost:3306 proftpd_user proftpd_password
  SQLAuthTypes Backend
  SQLUserInfo usertable userid passwd uid gid homedir shell
  RequireValidShell off
  SQLGroupInfo grouptable groupname gid members
  SQLAuthenticate users groups
  SQLUserInfo                     usertable userid passwd uid gid homedir shell
  SQLGroupInfo                    grouptable groupname gid members
  SQLUserWhereClause              "disabled=0 and (NOW()<=expiration or expiration=-1 or expiration=0)"

# путь к лог-файлу и его формат отображения
  SyslogLevel             notice
  SQLLogFile              /var/log/proftpd/proftpd_sql.log
  SystemLog               /var/log/proftpd/proftpd.log
  TransferLog             /var/log/xferlog
  WtmpLog                 on
  ExtendedLog             /var/log/proftpd/proftpd_auth.log AUTH auth
  ExtendedLog             /var/log/proftpd/proftpd_paranoid.log ALL default
  ExtendedLog             /var/log/proftpd/access.log WRITE,READ default
</IfModule>

<Anonymous ~ftp>
  User                          ftp
  Group                         ftp
  AccessGrantMsg                "Anonymous login ok, restrictions apply."
  UserAlias                     anonymous ftp
  MaxClients                    10 "Sorry, max %m users -- try again later"
  DefaultChdir                  /pub
  DisplayLogin                  /welcome.msg
  DirFakeUser                   on ftp
  DirFakeGroup                  on ftp

  <Limit WRITE SITE_CHMOD>
    DenyAll
  </Limit>

  <Directory uploads/*>
    AllowOverwrite              no
    <Limit READ>
      DenyAll
    </Limit>
    <Limit STOR>
      AllowAll
    </Limit>
  </Directory>

  WtmpLog                       off
  ExtendedLog           /var/log/proftpd/anonymous-access.log WRITE,READ default
  ExtendedLog           /var/log/proftpd/anonymous-auth.log AUTH auth
</Anonymous>

LogFormat                       default "%h %l %u %t \"%r\" %s %b"
LogFormat                       auth    "%v [%P] %h %t \"%r\" %s"

На данном этапе мы еще не можем запустить наш ftp-сервер, т.к. отсутствует база mysql. Для этого нам необходимо скачать proFTPd Administrator. Скачать его можно с http://sourceforge.net/projects/proftpd-adm/. Полученный архив распаковываем:

tar xvfz proftpd_admin_v1.2.tar.gz

Перемещаем распакованный архив proFTPd Administrator-а в каталог, доступный по 80 порту, например в /var/www/html/

chown -R apache:apache /var/www

Дамп базы находится в каталоге распакованного архива misc/database_structure_mysql, в файле db_structure.sql.
Перед заливкой дампа необходимо поправить файл db_structure.sql:

  1. Заменить имя базы
  2. Заменить TYPE=MyISAM на ENGINE=MyISAM
  3. Заменить строки GRANT
dos2unix /var/www/html/misc/database_structure_mysql/db_structure.sql
vi /var/www/html/misc/database_structure_mysql/db_structure.sql

Результат

CREATE DATABASE proftpd_db;
USE proftpd_db;

CREATE TABLE usertable (
  userid text,
  passwd text,
  homedir text,
  shell text,
  uid int(11) NOT NULL auto_increment,
  gid int(11) default NULL,
  count int(11) NOT NULL default '0',
  lastlogin datetime NOT NULL default '0000-00-00 00:00:00',
  lastlogout datetime NOT NULL default '0000-00-00 00:00:00',
  expiration datetime NOT NULL default '0000-00-00 00:00:00',
  disabled tinyint(4) default '0',
  det_name tinytext,
  det_mail tinytext,
  det_adress tinytext,
  det_notes tinytext,
  PRIMARY KEY  (uid)
) ENGINE=MyISAM;

CREATE TABLE grouptable (
  groupname text,
  gid int(11) NOT NULL auto_increment,
  members text,
  description tinytext,
  PRIMARY KEY  (gid),
  UNIQUE KEY gid_2 (gid),
  KEY gid (gid)
) ENGINE=MyISAM;

CREATE TABLE xfer_stat (
  userid text,
  file text,
  size bigint(20) default '0',
  address_full text,
  address_ip text,
  command text,
  timespent text,
  time text,
  cmd text,
  dunno text
) ENGINE=MyISAM;

CREATE TABLE `ftpquotalimits` (
  `name` varchar(30) NOT NULL default '',
  `quota_type` enum('user','group','class','all') NOT NULL default 'user',
  `per_session` enum('false','true') NOT NULL default 'false',
  `limit_type` enum('soft','hard') NOT NULL default 'hard',
  `bytes_in_avail` float NOT NULL default '0',
  `bytes_out_avail` float NOT NULL default '0',
  `bytes_xfer_avail` float NOT NULL default '0',
  `files_in_avail` int(10) unsigned NOT NULL default '0',
  `files_out_avail` int(10) unsigned NOT NULL default '0',
  `files_xfer_avail` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`name`)
) ENGINE=MyISAM;

CREATE TABLE `ftpquotatallies` (
  `name` varchar(30) NOT NULL default '',
  `quota_type` enum('user','group','class','all') NOT NULL default 'user',
  `bytes_in_used` float NOT NULL default '0',
  `bytes_out_used` float NOT NULL default '0',
  `bytes_xfer_used` float NOT NULL default '0',
  `files_in_used` int(10) unsigned NOT NULL default '0',
  `files_out_used` int(10) unsigned NOT NULL default '0',
  `files_xfer_used` int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM;

INSERT INTO usertable (uid) VALUES (9999);
DELETE FROM usertable WHERE uid=9999;
INSERT INTO grouptable (gid) VALUES (9999);
DELETE FROM grouptable WHERE gid=9999;
INSERT INTO grouptable (groupname, description) VALUES ("admins", "Administrators");
INSERT INTO grouptable (groupname, description) VALUES ("users", "Ordinary users");

GRANT ALL ON proftpd_db.* TO proftpd_user@localhost IDENTIFIED BY 'proftpd_password';
FLUSH PRIVILEGES;
mysql -uroot -pmy_password < /var/www/html/misc/database_structure_mysql/db_structure.sql

Теперь запускаем proftpd

service proftpd start
chkconfig proftpd on

Запускаем в браузере http://proftpd.pnv152.ru

  1. В разделе Configure, производим настройки по подключению к БД
  2. В разделе Users создаем пользователя для авторизации на ftp-сервере

Пояснять не буду, т.к. там все интуитивно понятно.

Расположение каталогов:

  1. Для анонимного пользователя по умолчанию - /var/ftp/
  2. Для созданных пользователей через ProFTPD Administrator по умолчанию - /home/, т.е. при создании пользователя надо руками создать там его каталог.

Настройка безопасности

Т.к. страница доступна в открытом виде для всех, то нам необходимо защитить ее.
Рассмотрим два варианта:

  • С помощью htpasswd
  • С помощью ACL (access control list)

htpasswd

Для начала создаем файл со списком пользователей и их паролей (пароль, желательно, захэшировать)
Полный список команд утилиты:

htpasswd

В моём случае:

htpasswd -cb /etc/httpd/conf/password_file test_user_apache my_password

Вывод

Adding password for user test_user_apache

Проверяем

cat /etc/httpd/conf/password_file

Вывод

test_user_apache:7hYku0BoY4.og

Теперь нам необходимо изменить конфигурационный файл apache:

vi /etc/httpd/conf/httpd.conf

Результат:

...
<Directory "/var/www/html">
    AuthType Basic
    AuthName proftpd
    AuthUserFile /etc/httpd/conf/password_file
    require valid-user
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
...

В конце

service httpd restart

Получим вот такую форму

ACL

Необходимо создать файл и прописать туда те ip-адреса, с которых разрешен доступ

cat << EOT > /etc/httpd/conf/proftpd.acl
Allow from 192.168.0.1
EOT

Проверяем

cat /etc/httpd/conf/proftpd.acl

Вывод

Allow from 192.168.0.1

Теперь необходимо изменить конфигурационный файл apache:
Возможен вариант как отдельно использовать подобную защиту, так и в паре с предыдущей

vi /etc/httpd/conf/httpd.conf

Результат:

...
<Directory "/var/www/html">
    AuthType Basic
    AuthName proftpd
    AuthUserFile /etc/httpd/conf/password_file
    require valid-user
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Include conf/proftpd.acl
</Directory>
...

В конце

service httpd restart

В случае некорректного адреса получим для себя или дефолтную страницу или «Forbidden»

Наслаждаемся!

Подъем сервера и написание статьи — 14/03/2013

Редактирование - 22/04/2015

Яндекс.Метрика