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.