云计算百科
云计算领域专业知识百科平台

ftp——构建FTP文件传输服务器

实验环境

以Centos 7为例

NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

vsftp服务器网卡配置

TYPE="Ethernet"
BOOTPROTO=static
DEFROUTE="yes"
NAME=eth0
DEVICE=eth0
ONBOOT="yes"
IPADDR=192.168.2.5
PREFIX=24
GATEWAY=192.168.2.2
DNS1=8.8.8.8
DNS2=114.114.114.114

vsftp服务器yum源

yum repolist

已加载插件:fastestmirror, priorities
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
10072 packages excluded due to repository priority protections
源标识 源名称 状态
!base/7/x86_64 CentOS-7 – Base – mirrors.aliyun.com 10,072
!extras/7/x86_64 CentOS-7 – Extras – mirrors.aliyun.com 526
!updates/7/x86_64 CentOS-7 – Updates – mirrors.aliyun.com 6,169+4
repolist: 16,767

关闭防火墙和SElinux

systemctl stop firewalld
systemctl status firewalld

● firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)

关闭SElinux

直接在/root目录输入以下命令

setenforce 0

在/etc/selinux/config中设置selinux为disabled 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
SELINUX=disabled #改为disabled
# SELINUXTYPE= can take one of three values:
# targeted – Targeted processes are protected,
# minimum – Modification of targeted policy. Only selected processes are protected.
# mls – Multi Level Security protection.
SELINUXTYPE=targeted

安装ftp软件包及依赖(用于测试)

yum -y install ftp

匿名用户配置

1.安装 vsftpd 服务

执行以下命令安装 vsftpd 并设置开机自启:

yum install -y vsftpd
systemctl enable vsftpd

2.创建匿名访问目录并配置权限

创建 /var/ftp/soft 目录并生成测试文件,设置目录权限为 755,归属用户和组为 ftp:

mkdir -p /var/ftp/soft
echo "Welcome to anonymous soft dir" > /var/ftp/soft/readme.txt
chmod 755 /var/ftp/soft
chown ftp:ftp /var/ftp/soft

3.配置 vsftpd.conf

备份原始配置文件

cp /etc/vsftpd/vsftpd.conf /opt/vsftpd.conf.bak

编辑配置文件/etc/vsftpd/vsftpd.conf

vim /etc/vsftpd/vsftpd.conf

添加以下关键配置:

listen=YES
listen_ipv6=NO
anonymous_enable=YES
local_enable=NO
write_enable=YES
anon_umask=022
anon_root=/var/ftp
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_max_rate=102400
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES

说明:

  • anon_max_rate=102400 限制下载带宽为 100KB/s(单位:字节)。
  • 禁止上传、删除等操作通过 NO 参数实现。

4.启动服务并验证

重启服务并检查状态:

systemctl restart vsftpd
systemctl status vsftpd

5.测试匿名访问

使用 ftp 命令连接本地服务,验证功能:

ftp localhost
Name: ftp
Password: (直接回车)
ftp> ls
ftp> cd soft
ftp> get readme.txt
ftp> put testfile # 应提示 550 Permission denied

    虚拟用户配置

    1.安装 vsftpd服务

    确保系统已安装 vsftpd,若未安装执行以下命令:

    yum install -y vsftpd
    systemctl enable vsftpd

    2.创建虚拟用户数据库文件

    编辑 /etc/vsftpd/vusers.list 文件,添加以下内容:

    vim /etc/vsftpd/vusers.list

    devadm
    dev123
    sales
    sales123
    salesadm
    adm123

    转换为 Berkeley DB 格式:

    cd /etc/vsftpd
    db_load -T -t hash -f vusers.list vusers.db
    chmod 600 vusers.db vusers.list

    3.创建映射的系统用户及目录

    创建系统用户并设置目录权限:

    useradd -d /var/ftproot -s /sbin/nologin virtual
    mkdir -p /var/ftp/soft /var/market
    chown virtual:virtual /var/ftp/soft /var/market
    chmod 755 /var/ftp/soft /var/market

    4.创建 PAM 认证文件

    编辑 /etc/pam.d/vsftpd.vu 文件,添加以下内容:

    auth required pam_userdb.so db=/etc/vsftpd/vusers
    account required pam_userdb.so db=/etc/vsftpd/vusers

    5.修改主配置文件

    编辑 /etc/vsftpd/vsftpd.conf 文件,确保包含以下配置:

    vim /etc/vsftpd/vsftpd.conf

    listen=YES
    listen_ipv6=NO
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    anon_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    xferlog_std_format=YES
    guest_enable=YES
    guest_username=virtual
    pam_service_name=vsftpd.vu
    chroot_local_user=YES
    allow_writeable_chroot=YES
    user_config_dir=/etc/vsftpd/vusers_dir
    max_clients=150
    max_per_ip=5

    6.创建独立用户配置文件

    创建用户配置目录并分别为每个虚拟用户设置配置文件:

    mkdir /etc/vsftpd/vusers_dir

    (1)devadm 配置文件

    编辑 /etc/vsftpd/vusers_dir/devadm:

    local_root=/var/ftp/soft
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES

    (2)sales 配置文件

    编辑 /etc/vsftpd/vusers_dir/sales:

    local_root=/var/market
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    anon_other_write_enable=NO
    anon_max_rate=102400

    (3)salesadm 配置文件

    编辑 /etc/vsftpd/vusers_dir/salesadm:

    local_root=/var/market
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    anon_max_rate=204800

    7.重启服务并测试

    重启 vsftpd 服务并进行测试:

    systemctl restart vsftpd

    测试方法:

    ftp localhost
    Name: devadm
    password: dev123
    ftp> pwd # 显示 /
    ftp> put /etc/hosts # 成功上传
    同理测试 sales 和 salesadm。

    使用不同虚拟用户登录(如 devadm、sales、salesadm)并验证权限和限速是否生效。

    本地用户配置

    1.创建本地用户并设置密码

    使用以下命令创建本地用户并设置密码:

    useradd -d /home/localuser -s /sbin/nologin localuser
    echo "localuser:123456" | chpasswd

    2.准备测试文件

    创建测试文件并调整权限,确保用户可访问:

    echo "Local user file" > /home/localuser/test.txt
    chown localuser:localuser /home/localuser/test.txt
    chmod 755 /home/localuser

    3.配置 vsftpd

    编辑 /etc/vsftpd/vsftpd.conf,添加或修改以下参数:

    local_enable=YES
    write_enable=YES
    local_umask=022
    chroot_local_user=YES
    allow_writeable_chroot=YES
    local_max_rate=204800 # 限速 200KB/s(可选)

    4.管理用户访问控制

    确保用户不在默认拒绝列表中:

    • 检查 /etc/vsftpd/ftpusers,移除或注释 localuser。
    • 根据 /etc/vsftpd/user_list 的配置逻辑调整:
      • 若 userlist_deny=YES,需移除 localuser。
      • 若 userlist_deny=NO,需将 localuser 加入白名单。

    启用白名单模式:

    echo "userlist_enable=YES" >> /etc/vsftpd/vsftpd.conf
    echo "userlist_deny=NO" >> /etc/vsftpd/vsftpd.conf
    echo "localuser" >> /etc/vsftpd/user_list

    5.配置 PAM 认证

    指定 PAM 服务名并编辑认证文件:

    echo "pam_service_name=vsftpd.vu" >> /etc/vsftpd/vsftpd.conf

    编辑 /etc/pam.d/vsftpd.vu,内容如下:

    vim /etc/pam.d/vsftpd.vu

    #%PAM-1.0
    auth sufficient pam_unix.so nullok try_first_pass
    auth required pam_userdb.so db=/etc/vsftpd/vusers
    account sufficient pam_unix.so
    account required pam_userdb.so db=/etc/vsftpd/vusers

    6.重启服务并验证

    重启 vsftpd 服务并测试登录:

    systemctl restart vsftpd

    使用 FTP 客户端登录验证功能:

    ftp localhost
    Name: localuser
    Password: 123456
    ftp> ls
    ftp> get test.txt
    ftp> put /etc/issue
    ftp> mkdir newdir

    注意事项

    • 防火墙需放行 FTP 端口(默认 21):

      firewall-cmd –add-service=ftp –permanent
      firewall-cmd –reload

    • 若需日志记录,检查 /var/log/xferlog 文件。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » ftp——构建FTP文件传输服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!