Настройка proftpd с хранением пользователей в MySQL

ProFTPd — FTP-сервер для Linux и UNIX-подобных операционных систем.
ProFTPd использует лишь один конфигурационный файл «proftpd.conf», который располагается по умолчанию в:
  • Linux — «/etc/proftpd/proftpd.conf»
  • FreeBSD — «/usr/local/etc/proftpd.conf»
Сервер может быть настроен для работы нескольких виртуальных хостов, также поддерживает chroot. Может быть запущен в виде отдельного сервера (демона) или в составе суперсервера inetd. Также поддерживает IPv6.
Расширения: поддерживает модули, добавляющие SSL/TLS шифрование, аутентификацию через LDAP, работу с SQL, туннелирование соединений через SSH.

Установка:

sudo aptitude install proftpd

Конфигурирование:

Файл /etc/proftp/proftp.conf
ServerName			"ProFTPD Default Installation"
ServerType			standalone
DefaultServer		on
# Port 21 is the standard FTP port.
Port				21

# Umask 022 Стандартная маска для новых директорий и файлов (777 - 755 = 022)
Umask				022

# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit the maximum number of processes per service
# (such as xinetd).
MaxInstances		30

# Группа и пользователь от которого запускаем сервер
User				proftpd
Group				proftpd

# Как хранить пароли в базе Plaintext,Crypt,md5 (Plaintext простым текстом)
SQLAuthTypes Plaintext
# Кого аутентифицируем по sql(только пользователей) users - только
пользователей, groups  - только группы no - никого
SQLAuthenticate users

# Минимальный GID и UID аутентифицирумого по sql пользователя
SQLMinUserGID 80
SQLMinUserUID 80

# Информация для подключения к базе данных
# база_данных@адрес_базы_данных:порт логин пароль
SQLConnectInfo proftp@localhost:3306 proftp proftp

# Название таблицы и полей пользователей в базе данных
# таблица имя_пользователя пароль_пользователя UID GID куда_cheroot'ить
# шелл_пользователя
SQLUserInfo users_table username password uid gid homedir shell

# Использовать системный шелл при авторизации? 
#(который хранится в /etc/shell) НЕТ!
RequireValidShell off

# Лог sql сессии
SQLLogFile /var/log/proftpsql.log

# chroot'ить пользователей в их домашние дериктории
DefaultRoot  ~ 

# права для домашних деррикторий пользователей
<Directory ~>
 	AllowOverwrite	on
 	<Limit WRITE>
		AllowAll
	</Limit>
	<Limit READ>
		AllowAll
	</Limit>
</Directory>

# Конфигурация анонимного пользователя и дериктории для него
<Anonymous /home/ftp>
	User				ftp
	Group				ftp

	# разрешаем пользователя 'anonymous' с правами 'ftp' (делаем алиас)
	UserAlias			anonymous ftp

	# максимальное колличество подключенных анонимных клиентов
	MaxClients			10

	# 'welcome.msg' отображается при входе на сервер
	DisplayLogin	        welcome.msg
       # '.message' отображается при смене каталога
	DisplayChdir		.message
	
	<Limit LOGIN CWD DIRS READ LIST>
		AllowAll
	</Limit>
	# запрещаем запись анонимному пользователю
	<Limit WRITE>
		DenyAll
	</Limit>
</Anonymous>
</pre>

Авторизация через MySQL.

Создание базы:
CREATE DATABASE proftp;
Создание структуры таблицы с пользователями:
DROP TABLE IF EXISTS `proftp.users_table`;
CREATE TABLE `users_table` (
  `unic_id` int(11) NOT NULL auto_increment,
  `username` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `groupname` varchar(24) NOT NULL,
  `uid` int(11) NOT NULL,
  `gid` int(11) NOT NULL,
  `homedir` varchar(50) NOT NULL,
  `shell` varchar(20) NOT NULL,
  `last_login` int(15) NOT NULL,
 `login_count` int(15) NOT NULL,
  `last_err_login` int(15) NOT NULL,
  `err_login_count` int(15) NOT NULL,
  PRIMARY KEY  (`unic_id`)
) ENGINE=MyISAM COMMENT='Таблица пользователей';

Создание учетных записей:
INSERT INTO `users_table` VALUES (1,'user1','123','users',65534,65534,
'/home/ftp','/sbin/nologin',0,0,0,0);
INSERT INTO `users_table` VALUES (2,'user2','123','users',65534,65534,
'/home/ftp','/sbin/nologin',0,0,0,0);
INSERT INTO `users_table` VALUE (3,'admin','secure%pass','admin',103,1001,
'/home/ftp','/sbin/nologin',0,0,0,0);
Содание пользователя для доступа к базе данных:
GRANT SELECT ON proftp.* TO 'proftp'@'localhost' IDENTIFIED BY 'proftp';

Авторизация через локальный файл

Правило iptables

Пассивный режим:
iptables -t filter -A INPUT -i ppp0 --protocol tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -i ppp0 --protocol tcp --dport 49152:65534 -j ACCEPT

где ppp0 интерфейс светящий в интернет

Активный режим:

Для активного режима достаточно разрешить входящие только для порта данных:

iptables -t filter -A INPUT -i ppp0 --protocol tcp --dport 21 -j ACCEPT

Ссылки:

proftpd с хранением пользователей в MySQL
Официальный сайт proftp
Bog BOS: FTP-сервер ProFTPD: установка, настройка и использование
FTP – активный и пассивный режимы
Виртуальные, неанонимные пользователи proftpd
FTP-сервер ProFTPD: установка, настройка и использование

Теги: , ,

Дата: 3 ноября 2010

Автор: ignusius

Комментарии: 0

Оставить комментарий

*

Комментарий:

Ваш e-mail не будет опубликован.
Обязательные поля помечены *

Разрешенные HTML теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>