在 Ubuntu 15.10 上使用 vsftpd + TLS 加密和 MySQL 的虚拟主机在 Ubuntu 15.10 上使用 vsftpd + TLS 加密和 MySQL 的虚拟主机在 Ubuntu 15.10 上使用 vsftpd + TLS 加密和 MySQL 的虚拟主机在 Ubuntu 15.10 上使用 vsftpd + TLS 加密和 MySQL 的虚拟主机
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

在 Ubuntu 15.10 上使用 vsftpd + TLS 加密和 MySQL 的虚拟主机

本教程适用于这些操作系统版本

  • Ubuntu 15.10(狡猾的狼人)
  • Ubuntu 12.10(Quantal Quetzal)

在此页

  1. 1 条初步说明
  2. 2 安装 vsftpd、MySQL 和 phpMyAdmin
  3. 3 为 vsftpd 创建 MySQL 数据库
  4. 4 配置vsftpd
  5. 5 为 TLS 创建 SSL 证书
  6. 6 在 vsftpd 中启用 TLS
  7. 7 创建第一个虚拟用户
  8. 8 数据库管理
  9. 9 虚拟机镜像
    1. SSH登录
    2. MySQL 登录

    Vsftpd 是 Linux 上最安全和最快的 FTP 服务器之一。通常,vsftpd 被配置为与系统用户一起工作。本文档描述了如何安装一个 vsftpd 服务器,该服务器使用 MySQL 数据库中的虚拟用户而不是真实的系统用户。这样性能更高,并且允许在一台机器上拥有数以千计的 ftp 用户。

    对于 MySQL 数据库的管理,您可以使用基于 Web 的工具,如 phpMyAdmin,它也将安装在本指南中。 phpMyAdmin 是一个舒适的图形界面,这意味着您不必乱用命令行。

    本教程基于 Ubuntu 15.10。你应该已经设置了一个

    本指南旨在作为实用指南;它不包括理论背景。它们在网络上的许多其他文档中得到处理。

    本文档不提供任何形式的保证!我想说的是,这不是建立这样一个系统的唯一方法。有很多方法可以实现这个目标,但这是我采用的方法。我不保证这对你有用!

    1 初步说明

    在本教程中,我使用 IP 地址为 192.168.1.100 的主机名 server1.example.com。这些设置可能因您而异,因此您必须在适当的地方替换它们。

    因为我们必须以 root 权限运行本教程中的所有步骤,所以我们可以在本教程中的所有命令前加上字符串 sudo,或者我们现在通过键入成为 root

    sudo su

    2 安装vsftpd、MySQL和phpMyAdmin

    Vsftpd 没有内置的 MySQL 支持,因此我们必须使用 PAM 对 MySQL 数据库进行身份验证。所以我们除了安装 vsftpd、MySQL 和 phpMyAdmin 之外,还安装了 libpam-mysql:

    apt-get -y install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin libpam-ldap

    您将被问及以下问题:

    New password for the MySQL "root" user: <-- yourrootsqlpassword
    Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
    LDAP server Uniform Resource Identifier: <--  ENTER
    Distinguished name of the search base: <-- ENTER
    LDAP version to use: <-- 3
    Make local root Database admin: <-- Yes
    Does the LDAP database require login?  <-- No
    LDAP account for root: <-- ENTER
    LDAP root account password: <-- ldaprootpw
    Web server to configure automatically: <-- Select the option: apache2
    Configure database for phpmyadmin with dbconfig-common? <-- Yes
    Password of the database's administrative user: <-- Enter the MariaDB root password
    MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

    3 为 vsftpd 创建 MySQL 数据库

    现在我们创建一个名为 vsftpd 的数据库和一个名为 vsftpd 的 MySQL 用户,vsftpd 守护进程稍后将使用它来连接到 vsftpd 数据库:

    mysql --defaults-file=/etc/mysql/debian.cnf
    CREATE DATABASE vsftpd;
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
    FLUSH PRIVILEGES;

    将字符串 ftpdpass 替换为您要用于 MySQL 用户 vsftpd 的任何密码。仍然在 MySQL shell 上,我们创建我们需要的数据库表(是的,只有一张表!):

    USE vsftpd;
    CREATE TABLE `accounts` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `username` VARCHAR( 30 ) NOT NULL ,
    `pass` VARCHAR( 50 ) NOT NULL ,
    UNIQUE (
    `username`
    )
    );
    quit;

    正如您可能已经注意到的那样,随着退出;命令我们已经离开了 MySQL shell 并回到了 Linux shell。

    顺便说一句,(我假设你的 ftp 服务器系统的主机名是 server1.example.com)你可以在 http://server1.example.com/phpmyadmin/ 下访问 phpMyAdmin(你也可以使用 IP 地址代替 server1.example .com) 在浏览器中并以用户 vsftpd 身份登录。然后你可以看看数据库。稍后您可以使用 phpMyAdmin 来管理您的 vsftpd 服务器。

    4 配置vsftpd

    首先,我们创建一个名为 vsftpd 的非特权用户(主目录为 /home/vsftpd),属于组 nogroup。我们将在该用户下运行 vsftpd,我们的虚拟用户的 FTP 目录将在 /home/vsftpd 目录中(例如 /home/vsftpd/user1、/home/vsftpd/user2 等)。

    useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

    然后我们备份原始的 /etc/vsftpd.conf 文件并创建我们自己的:

    cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
    cat /dev/null > /etc/vsftpd.conf
    nano /etc/vsftpd.conf

    该文件应包含以下内容:

    listen=YES
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    nopriv_user=vsftpd
    chroot_local_user=YES
    secure_chroot_dir=/var/run/vsftpd
    pam_service_name=vsftpd
    rsa_cert_file=/etc/ssl/certs/vsftpd.pem
    guest_enable=YES
    guest_username=vsftpd
    local_root=/home/vsftpd/$USER
    user_sub_token=$USER
    virtual_use_local_privs=YES
    user_config_dir=/etc/vsftpd_user_conf

    配置选项在 http://vsftpd.beasts.org/vsftpd_conf.html 上有解释。我们的虚拟设置的重要选项是 chroot_local_user、guest_enable、guest_username、user_sub_token、local_root 和 virtual_use_local_privs。

    使用 user_config_dir 选项,您可以为覆盖部分全局设置的每个用户配置文件指定一个目录。如果您想使用此功能,这完全是可选的,由您决定。但是,我们现在应该创建该目录:

    mkdir /etc/vsftpd_user_conf

    现在我们必须配置 PAM,以便它使用 MySQL 数据库来验证我们的虚拟 FTP 用户,而不是 /etc/passwd 和 /etc/shadow。 vsftpd 的 PAM 配置在 /etc/pam.d/vsftpd 中。我们备份原始文件并创建一个新文件,如下所示:

    cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
    cat /dev/null > /etc/pam.d/vsftpd
    nano /etc/pam.d/vsftpd
    auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
    account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

    之后,我们重启 vsftpd:

    service vsftpd restart

    5 为 TLS 创建 SSL 证书

    为了使用 TLS,我们必须创建一个 SSL 证书。我在 /etc/ssl/private 中创建它 - 如果该目录不存在,请立即创建它:

    mkdir -p /etc/ssl/private
    chmod 700 /etc/ssl/private

    之后,我们可以生成 SSL 证书,如下所示:

    openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

    国家名称(2 个字母代码)[AU]:<-- 输入您的国家名称(例如,\DE\)。
    州或省名称(全名)[Some-State]:<-- 输入您的州或省名称。
    地方名称(例如,城市)[]:<-- 输入您的城市。
    组织名称(例如,公司)[Internet Widgits Pty Ltd]:<-- 输入您的组织名称(例如,您公司的名称)。
    组织单位名称(例如,部门)[]:<-- 输入您的组织单位名称(例如 \IT 部门\)。
    通用名称(例如,您的name) []:<-- 输入系统的完全限定域名(例如 \server1.example.com\)。
    电子邮件地址 []:<-- 输入您的电子邮件地址。

    6 在 vsftpd 中启用 TLS

    为了在 vsftpd 中启用 TLS,打开 /etc/vsftpd.conf...

    nano /etc/vsftpd.conf

    ...并添加以下选项:

    # Turn on SSL
    ssl_enable=YES
    
    # Allow anonymous users to use secured SSL connections
    allow_anon_ssl=YES
    
    # All non-anonymous logins are forced to use a secure SSL connection in order to
    # send and receive data on data connections.
    force_local_data_ssl=YES
    
    # All non-anonymous logins are forced to use a secure SSL connection in order to send the password.
    force_local_logins_ssl=YES
    
    # Permit TLS v1 protocol connections. TLS v1 connections are preferred
    ssl_tlsv1=YES
    
    # Permit SSL v2 protocol connections. TLS v1 connections are preferred
    ssl_sslv2=NO
    
    # permit SSL v3 protocol connections. TLS v1 connections are preferred
    ssl_sslv3=NO
    
    # Disable SSL session reuse (required by WinSCP)
    require_ssl_reuse=NO
    
    # Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla)
    ssl_ciphers=HIGH
    
    # This option specifies the location of the RSA certificate to use for SSL
    # encrypted connections.
    rsa_cert_file=/etc/ssl/private/vsftpd.pem
    [...]

    如果您使用 force_local_logins_ssl=YES 和 force_local_data_ssl=YES,则只允许 TLS 连接(这将锁定所有使用不支持 TLS 的旧 FTP 客户端的用户);通过使用 force_local_logins_ssl=NO 和 force_local_data_ssl=NO 允许 TLS 和非 TLS 连接,具体取决于 FTP 客户端支持的内容。

    之后重启vsftpd:

    service vsftpd restart

    就是这样。您现在可以尝试使用您的 FTP 客户端进行连接;但是,您应该将 FTP 客户端配置为使用 TLS(如果您使用 force_local_logins_ssl=YES 和 force_local_data_ssl=YES,这是必须的)——请参阅下一章如何使用 FileZilla 执行此操作。

    7 创建第一个虚拟用户

    要填充数据库,您可以使用 MySQL shell:

    mysql --defaults-file=/etc/mysql/debian.cnf
    USE vsftpd;

    现在我们使用密码 secret 创建虚拟用户 testuser(将使用 MySQL 的 PASSWORD 函数加密存储):

    INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
    quit;

    testusers 主目录是/home/vsftpd/testuser;不幸的是,如果该目录不存在,vsftpd 不会自动创建该目录。因此,我们现在手动创建它并使其归 vsftpd 用户和 nogroup 组所有:

    mkdir /home/vsftpd/testuser
    chown vsftpd:nogroup /home/vsftpd/testuser
    chmod a-w /home/vsftpd/testuser

    现在在您的工作站上打开您的 FTP 客户端程序(例如 FileZilla 或 FireFTP)并尝试连接。作为主机名,您使用 server1.example.com(或系统的 IP 地址),用户名是 testuser,密码是秘密的。

    8 数据库管理

    对于大多数人来说,如果他们有 MySQL 的图形前端,那就更容易了;因此您也可以使用 phpMyAdmin(在本例中位于 http://server1.example.com/phpmyadmin/)来管理 vsftpd 数据库。

    每当您创建或修改用户时,请确保使用 MySQL 的 PASSWORD 函数来加密该用户的密码。另外,当你创建一个新的虚拟用户时,请不要忘记在 shell 上创建该用户的 homedir,如上一章末尾所示。

    9 虚拟机镜像

    本教程以 OVA/OVF 格式的虚拟机可供 Howtoforge 订阅者使用。 VM 格式兼容 VMWare 和 Virtualbox 以及其他可以导入此格式的工具。您可以在顶部的右侧菜单中找到下载链接。单击文件名开始下载。

    VM 的登录详细信息为:

    SSH登录

    用户名:administrator
    密码:howtoforge

    管理员用户具有 sudo 权限。

    登录

    用户名:root
    密码:howtoforge

    请在首次启动后更改密码。

    VM 配置为静态 IP 192.168.1.100,可以在文件 /etc/network/interfaces 中更改 IP。

    10 个链接

    • vsftpd:http://vsftpd.beasts.org/
    • Ubuntu:http://www.ubuntu.com/

©2015-2025 艾丽卡 support@alaica.com