Установка и настройка ProFTPd в Ubuntu

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

Простая установка:

sudo apt-get install proftpd

Во время установки нужно будет выбрать режим запуска:
(standalone — самостоятельно, тоесть автоматически будет грузится при запуске системы или inetd — вручную)
Расположение конфига:
/etc/proftpd/proftpd.conf

Немного параметров конфига:

Include /etc/proftpd/modules.conf
# отключаем IPv6 протокол из-за ненадобности
UseIPv6 off
IdentLookups off
# имя сервера
ServerName "Debian"
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
# Запрещаем заливать файлы начинающиеся с точки
DenyFilter \*.*/
# Указываем домашний каталог
DefaultRoot /home/ftp
# Запрещаем пользователям ходить выше своего домашнего каталога
DefaultRoot ~
# Порт сервера, учитывая большое количество сканеров ботов по интернету, лучше сменить на произольный
Port 21
MaxInstances 30
# пользователь и группа от имени которых работает proftpd
User proftpd
Group nogroup
# ограничение на создание файлов и папок
Umask 022 022
AllowOverwrite on
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
# Стандартный параметр который подгружает все конфиги в указанной директории
Include /etc/proftpd/conf.d/
# По желанию можно присвоить алиас для имени пользователя
# UserAlias
# Запрещаем подключаться к серверу пользователю root
RootLogin off
# Разрежаем докачивать файлы
AllowStoreRestart on

# Перезагружаем proftpd чтобы применились новые настройки конфига

sudo /etc/init.d/proftpd restart

Настройка ProFTPd с использованием MySQL базы данных пользователей:

Устанавливаем дополнительный пакет:

sudo apt-get install proftpd-mod-mysql

В начале конфига /etc/proftpd/proftpd.conf добавить:

Include /etc/proftpd/sql.conf

Ниже раскоментироовать:

DefaultRoot ~
RequireValidShell off

Создаем отдельного системного пользователя и группу к которым будут привязаны виртуальные пользователи из MySQL базы данных:

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

Выполняя sql запрос создаем любую базу данных и пользователя с привилегиями на нее, например proftpd:

create database proftpd;
GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO 'proftpd'@'localhost' IDENTIFIED BY 'пароль';
GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'пароль';
FLUSH PRIVILEGES;

Создаем в этой новой базе две таблицы:

CREATE TABLE ftpgroup (
 groupname varchar(16) NOT NULL default '',
 gid smallint(6) NOT NULL default '2001',
 members varchar(16) NOT NULL default '',
 KEY groupname (groupname)
 ) ENGINE=MyISAM COMMENT='ProFTP group table';

CREATE TABLE ftpuser (
 id int(10) unsigned NOT NULL auto_increment,
 userid varchar(32) NOT NULL default '',
 passwd varchar(32) NOT NULL default '',
 uid smallint(6) NOT NULL default '2001',
 gid smallint(6) NOT NULL default '2001',
 homedir varchar(255) NOT NULL default '',
 shell varchar(16) NOT NULL default '/sbin/nologin',
 count int(11) NOT NULL default '0',
 accessed datetime NOT NULL default '0000-00-00 00:00:00',
 modified datetime NOT NULL default '0000-00-00 00:00:00',
 PRIMARY KEY (id),
 UNIQUE KEY userid (userid)
 ) ENGINE=MyISAM COMMENT='ProFTP user table';

Раскомментируем в конфиге /etc/proftpd/modules.conf две строки:

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

Отредактируем конфиг /etc/proftpd/sql.conf:

SQLBackend mysql
SQLAuthTypes Crypt
SQLConnectInfo ftp@localhost ftp password
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

Добавляем в MySQL базу желаемого пользователя:

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES ('', 'имяпользователя', ENCRYPT('пароль'), 2001, 2001, '/srv/ftp/имяпользователя', '/sbin/nologin', 0, '', '');

Перезагружаем proftpd чтобы применились новые настройки конфига:

sudo /etc/init.d/proftpd restart

Если что-то не получается, можно остановить sudo /etc/init.d/proftpd stop и запустить командой proftpd -nd6, после чего вся подробная информация о работе proftpd будет выводится на экране.

Вот для примера содержимое конфигурационного файла при котором proftpd брал данные пользователей из mysql базы данных биллинга:

ServerName		"Name"
ServerType		standalone
ServerIdent		off
DefaultServer		on
ScoreboardFile		/var/run/proftpd.scoreboard
Port			21
ServerAdmin             admin@example.net
Umask			002
MaxInstances		300
CommandBufferSize	512
UseReverseDNS		off
IdentLookups		off
RequireValidShell	off

DefaultAddress		0.0.0.0
PassivePorts 		30000 50000

TimesGMT		off

TimeoutSession		1800
TimeoutStalled		300

User			ftp
Group			ftp

CharsetLocal		KOI8-U
CharsetRemote		CP1251

ExtendedLog		/var/log/proftpd.log ALL ideal
LogFormat		ideal "%t %a %U %m %D %f %b %T"
TransferLog 		NONE

AllowRetrieveRestart	on
AllowStoreRestart	on

DefaultRoot ~

AllowOverwrite	off

<Limit SITE_CHMOD>
  DenyAll
</Limit>

<Limit Write>
    AllowAll
</Limit>

<Limit READ>
    AllowAll
</Limit>

<Limit DELE RMD XRMD RNFR RNTO>
    AllowUser myadmin manager
    DenyAll
</Limit>

AuthOrder 		mod_auth_unix.c mod_sql.c

SQLAuthTypes		Plaintext
SQLAuthenticate	users
SQLConnectInfo		base@192.168.0.1:3306 mysqluser password
SQLDefaultGID		1003
SQLDefaultUID		1003
SQLDefaultHomedir	/ftp
SQLUserInfo		`abon` `login` `password` "NULL" "NULL" "NULL" "NULL"
SQLUserWhereClause	"killed!='killed'"

#SQLNamedQuery	auth	SELECT "login,password,1003,1003,'/usr/home/ftp','' from abon where killed!='killed' and login = '%u'"
#SQLUserInfo		custom:/auth
#SQLLogFile		/var/log/proftpd_sql.log

<Directory ~>

</Directory>

Смотри также мои статьи:
IPTables правила для FTP сервера
Активный и пассивный режим работы FTP
Установка и настройка Pure-FTPd в Ubuntu

Добавить комментарий