Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
0
09:11, 09 июля 2010

Vsftpd + AD && Vsftpd + MySQL

FTP – это протокол передачи файлов. Программы, использующие этот протокол, стали частью отдельного сервиса Интернет. Для пользования FTP нужна специальная программа – FTP-клиент. FTP-клиент - это сервисная программа, с помощью которой можно произвести соединение с FTP сервером. Обычно эта программа имеет командную строку, но некоторые имеют оконный интерфейс и не требуют запоминания команд. Пример FTP-клиента - программы CuteFTP, Go!Zilla, ReGet и т.д, называются они менеджерами загрузки. У них удобный интерфейс и позволяют пользователям удобно осуществлять загрузку-выгрузку файлов.

FTP-сервер - компьютер, который содержит общедоступные файлы и настроен на поддержку протокола FTP (FTP-сервер должен иметь программное обеспечение, поддерживающее протокол FTP).

И так приступим к настройке нашего FTP сервера, вся установка проводилась на FreeBSD v_7.1. Нам понадобятся следующие пакеты:

 
Port:   vsftpd-2.0.7
Path:   /usr/ports/ftp/vsftpd
Info:   A FTP daemon that aims to be "very secure"
 
Port:   mysql-server-5.0.67_1
Path:   /usr/ports/databases/mysql50-server
Info:   Multithreaded SQL database (server)
 
 
Port:   pam_mysql-0.7.r1
Path:   /usr/ports/security/pam-mysql
Info:   A pam module for authenticating with MySQL

Так же для связки FTP с AD необходимо что бы машина с FreeBSD была включена в домен Windows. Статья, которая описывает процедуру введения машины с FreeBSD в домен - FreeBSD и AD.

Устанавливаем базу данных MySQL, пример настройки и установки я не буду приводить, думаю в интернете есть большое количество статей :)

Настроим сначала связку vsftpd и AD, для этого устанавливаем vsftpd со следующими опциями:

 
[X] RC_NG       install RC_NG script               
[X] VSFTPD_SSL  Include support for SSL

После того как vsftpd установлен, необходимо создать пользователя 'ftp' с домешнем каталогом, в который будут логиниться anonymous и создать файл конфигурации в каталоге /usr/local/etc есть файл vsftpd.conf.dist, его можно переименовать в vsftpd.conf, но лучше сделать с нуля:

 
touch /usr/local/etc/vsftpd.conf

После создания файла vsftpd.conf приступаем к внесению конфигурационных опций :) Созданный нами конфиг предполагает работу vsftpd в качестве анонимного сервера и сервера с авторизацией юзеров из AD. По желанию можно отключить одно из двух :)

 
# Работа сервера  в standalone режиме
listen=YES
 
# Работа в качестве демона
background=YES
 
# На каком IP работать
listen_address=192.168.0.1
 
# Имя файла pam сервиса в /etc/pam.d
pam_service_name=ftp
session_support=YES
 
# Включить пассивный режим
pasv_enable=YES
pasv_max_port=50000
pasv_min_port=60000
 
# Использовать sendfile
use_sendfile=YES
 
# Для пролхих клиентов
async_abor_enable=YES
 
 
 
#----Ограничения
#-----------------------------------------------
# Определяет какие email адреса использовать для анонимов в качестве пароля
# из файла email_password_file
secure_email_list_enable=NO
#email_password_file=/usr/local/etc/vsftpd_email.password
 
# Запретить использовать email для доступа анонима из файла banned_email_file
deny_email_enable=NO
#banned_email_file=/usr/local/etc/vsftpd_email.deny
 
# Chroot в каталог 
secure_chroot_dir=/usr/local/share/vsftpd/empty
 
# Chroot по списку из файла chroot_list_file
chroot_list_enable=NO
#chroot_list_file=/usr/local/etc/vsftpd_chroot.list
 
# Разрешить запись
write_enable=YES
 
# Чтение юзеров из файлов deny
userlist_enable=YES
 
# Запрещён доступ для юзеров перечисленных в указанном файле
userlist_deny=YES
userlist_file=/usr/local/etc/vsftpd_user.deny
 
# Время ожидания соединения на порт в sec
connect_timeout=60
 
# Время передачи простоя, если данные не передаются
data_connection_timeout=300
 
# Задержка перед сообщением об ошибке регистрации
delay_failed_login=1
 
# Задержка при правильной регистрации
delay_successful_login=0
 
# Задрежка между вводом FTP команд в sec
idle_session_timeout=300
 
# Запрет команды chmod
chmod_enable=NO
 
# Максимальное количество клиентов
max_clients=10
 
# Максимально количество неправильных входов, далее разрыв
max_login_fails=3
 
# Максимальное количество соединений с одного ip
max_per_ip=1
 
# Запрещённые файлы через запятую
deny_file={*.lnk}
 
# Скрыть указанные файлы через запятую
hide_file={*.lnk} 
 
# Запретить использовать команду ls -R
ls_recurse_enable=NO
 
# Проверка существования shell в /etc/shells
check_shell=NO
 
# Не показывать файлы начинающиеся с точки
force_dot_files=NO
 
# Скрывать кто является реальным владельцем файла
# Будет указываться владелец 'ftp'
hide_ids=YES
 
# Блокировать доступ к загружаемому файлу
lock_upload_files=YES
 
# Разрешить чтение каталогов
dirlist_enable=YES
 
# Разрешить загрузку
download_enable=YES
 
# Удалить файлы загруженные с ошибками или недокачанные
delete_failed_uploads=YES
 
# Разрешить соединение на 20 порт
connect_from_port_20=NO
#------------------------------------------------
 
 
 
#----Локальные пользователи
#------------------------------------------------
# Разрешить локальных пользователей из файла /etc/passwd
local_enable=YES
 
# Использовать привелегии локальных юзеров для виртуальных
# Если NO то используются привелегии anonymous
virtual_use_local_privs=YES
 
# Посадить в тюрьму локального юзера
chroot_local_user=YES
 
# Маска для локальных пользователей
local_umask=022
 
# Каталог для локальных юзеров
local_root=/home/IMPEX/$USER
 
# Создание папки пользователя
# Образец каталога берётся из параметра guest_username
user_sub_token=$USER
 
# Chroot в каталоге юзера указанного в /etc/passwd
passwd_chroot_enable=YES
 
# Скорость закачки byt/sec
local_max_rate=2097152
#-------------------------------------------------
 
 
 
#----Анонимные пользователи
#-------------------------------------------------
# Разрешить анонимных пользователей
anonymous_enable=YES
 
# Каталог для анонимов
anon_root=/server/ftp
 
# Разрешает загрузку. Работает при write_enable=YES
anon_upload_enable=YES
 
# Создание каталогов. Работает при write_enable=YES
anon_mkdir_write_enable=YES
 
# Создание, загрузка и удаление
anon_other_write_enable=NO
 
# Не использовать пароль для анонимного доступа
no_anon_password=YES
 
# Маска для файлов созаваемых анонимом
anon_umask=022
 
# Режим для загружаемых файлов
chown_upload_mode=0440
 
# Только чтение, запрещает скачивать файлы с FTP
anon_world_readable_only=NO
 
# Установить владельцем файлов юзера указанного в chown_username
chown_uploads=YES
chown_username=ftp
 
# Скорость закачки byt/sec
anon_max_rate=2097152
#--------------------------------------------------
 
 
 
#----Ведение логов
#--------------------------------------------------
# Логирование всех запросов к ftp
# Работает при выключенной опции xferlog_std_format
# Используется для отладки
log_ftp_protocol=NO
 
# Файл логов
vsftpd_log_file=/var/log/vsftpd.log
 
# Отправка логов в syslog
syslog_enable=YES
 
# Паралельное ведение логов в vsftpd.log и xferlog
dual_log_enable=NO
 
# Логи детальной upload/download
xferlog_enable=NO
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
#--------------------------------------------------
 
 
#----Определение кодировки
#--------------------------------------------------
# Использование ASCII  при скачке/загрузке
# Работают русские символы, кодировка для клиента KOI8-R
ascii_download_enable=YES
ascii_upload_enable=YES
#--------------------------------------------------
 
 
 
#----Сообщения
#---------------------------------------------------
# Банер приветствия при входе
ftpd_banner=Welcom to FTP service
 
# Показ сообщения пользователю из файла '.message' при входе в каталог. Файл определяется 
# в опции message_file. Файл должен находится в этом же каталоге.
dirmessage_enable=NO
message_file=.message
#--------------------------------------------------
 
 
# Разрешить гостя. Все не анонимные пользователи логинятся как гость
# Имя юзера гостя определено в опции 'guest_username'
guest_enable=NO
guest_username=atrium
 
# Пользователь для анонимных юзеров
ftp_username=ftp
nopriv_user=nobody
 
# Показать имя и группу вместо uid/gid
text_userdb_names=YES

После того как настроили vsftpd, создаём файл с именем 'ftp' в /etc/pam.d, если он отсутствует, со следующим содержанием:

 
auth    required  pam_nologin.so  no_warn
auth    sufficient  /usr/local/lib/pam_winbind.so krb5_auth
auth    sufficient  pam_opie.so no_fake_prompts  
auth    requisite pam_opieaccess.so   allow_local no_warn
auth    required  pam_unix.so no_warn try_first_pass
 
 
account   required  pam_nologin.so  no_warn
account   sufficient  /usr/local/lib/pam_winbind.so krb5_auth
account   required  pam_unix.so
 
session   required  pam_permit.so

Делаем проверку:

 
 
220 Welcom to FTP service
Name (10.178.1.11:atrium): Administrator
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

Настроим теперь vsftpd с MySQL :)
Как говорилось выше, базу данных MySQL установили и запустили, всё работает. Создаём необходимую базу и таблицу, в которой будут храниться наши юзвери :)

 
-- MySQL dump 10.11
--
-- Host: localhost    Database: vsftpd
-- ------------------------------------------------------
-- Server version 5.0.67
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
 
--
-- Current Database: `vsftpd`
--
 
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `vsftpd`
                /*!40100 DEFAULT CHARACTER SET cp1251 */;
 
USE `vsftpd`;
 
--
-- Table structure for table `accounts`
--
 
DROP TABLE IF EXISTS `accounts`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `accounts` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(50) NOT NULL,
  `pass` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
SET character_set_client = @saved_cs_client;

Создадим тестового пользователя, пароль будет шифроваться алгоритмом MD5, заданный алгоритм определят параметр crypt=3 в файле /etc/pam.d/ftp, листинг которого приводится ниже:

 
use vsftpd;
insert into accounts set username='testuser', pass=md5('test');

После создания базы, таблицы и пользователя необходимо установить pam-mysql и создать файл с именем 'ftp' в каталоге /etc/pam.d, если он отсутствует, со следующим содержанием:

 
auth            requisite         /usr/local/lib/pam_mysql.so   user=root passwd=root \
db=vsftpd host=localhost table=accounts usercolumn=username passwdcolumn=pass crypt=3
account         requisite         /usr/local/lib/pam_mysql.so   user=root passwd=root \
db=vsftpd host=localhost table=accounts usercolumn=username passwdcolumn=pass crypt=3

После всех операций в конфиге vsftpd.conf, который был представлен выше необходимо изменить:

 
# Разрешить гостя. Все не анонимные пользователи логинятся как гость
# Имя юзера гостя определено в опции 'guest_username'
guest_enable=YES
guest_username=ftp

Делаем проверку:

 
220 Welcom to FTP service
Name (10.178.1.11:atrium): testuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

Важно:
- Для доступа к MySQL создайте отдельного пользователя с минимальными привилегиями
- Представленный конфиг vsftpd.conf подходит также для работы с локальными пользователями, аутентификация определяется с помощью pam.

0
333
0