Linux详细搭建 vsftpd 服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux详细搭建 vsftpd 服务相关的知识,希望对你有一定的参考价值。

1.FTP服务简介
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件传输协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。
在FTP的使用当中,用户经常遇到两个概念下载(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件,由于FTP的文件传输是明文方式,具有一定危险性,所以就诞生了一种更加安全的传输方式vsftp,下面主要介绍vsftp的特性及相关配置。


2.VSFTP是一个比FTP更安全的软件具有以下特点:

(1)vsftp一般以普通用户运行,降低了进程的权限,提高了安全性
(2)任何需要执行较高权限的指令都需要上层程序的许可
(3)ftp的命令都被整合到了vsftp中,不需要系统额外提供命令
(4)用于chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录
(5)vsftpd 是一个基于GPL发布的FTP服务器软件。其中的vs是“ Very Secure”的缩写,由此名称缩写可以看出,本服务器的初衷就是服务的安全性。
(6)vsftpd是RedHat Linux默认使用的ftp服务端软件。
(7)vsftpd不再依赖于xinetd服务
(8)vsftpd可同时允许匿名( anonymous )与本地用户(local)访问,还可以支持虚拟用户。


3.vsftpd连接类型

命令连接:TCP 21,用于发送FTP命令信息

数据连接:TCP 20,用于上传、下载数据


4.vsftpd工作模式
主动模式:(服务端通过20号端口主动向客户端进行连接,来进行数据传输)
1.命令连接:客户端(1025) -----> 服务端 (21)
客户端以一个随机端口(大于1023)来连接服务端的21号端口
2.数据连接:服务器端(20/tcp)-----> 客户端 (1025+1)
服务端以自己的20号端口去连接客户端创建命令连接时使用的随机端口+1的端口号

被动模式:(服务端启动随机端口,等待客户端进行连接,来进行数据传输)
1.命令连接:客户端(1110)----> 服务端(21)
客户端以一个随机端口来连成服务端的21号端口
2.数据连接:客户端(1110+1) ----> 服务端(随机端口)

技术分享图片

5.vsftpd配置
/etc/pam.d/vsftpd //vsftpd用户认证配置文件
/etc/vsftpd/ //配置文件目录
/etc/vsftpd/vsftpd.conf //主配置文件

vsftpd常见的配置参数:

参数 作用
anonymous_enable=YES 启用匿名用户登入
anon_upload_enable=YES 允许匿名用户上传
anon_mkdir_write_enable=YES 允许匿名用户创建目录,但是不能删除
anon_other_write_enable=Y ES 允许匿名用户创建和删除目录
local_enable=YES 启用本地用户登入
write_enable=YES 允许本地用户有写权限
local_umask=022 通过ftp上传文件的默认遮罩码
chroot_local_user=YES 禁锢所有的ftp本地用户于其家目录中
chroot_list_enable=YES 开启禁锢文件列表 需要与chroot_list_file参数一起使用
chroot_list_file=/etc/vsftpd/ chroot_list 指定禁锢列表文件路径 在此文件里面的用户将禁锢在其家目录中
allow_writeable_chroot=YE S 允许被禁锢的用户家目录有写权限
xferlog_enable=YES 是否启用传输日志,记录ftp传输过程
xferlog_std_format=YES 传输日志是否使用标准格式
xferlog_file=/var/log/xferlog 指定传输日志存储的位置
chown_uploads=YES 是否启用改变上传文件属主的功能
chown_username=whoever 指定要将上传的文件的属主改为那个用户 此用户必须在系统中存在
pam_service_name=vsftpd 指定vsftpd使用/etc/pam.d下的哪个pam配置文件进行用户认证
userlist_enable=YES 是否启用控制用户登录的列表文件;默认为/etc/vsftpd/user_list文件
userlist_deny=YES 是否拒绝userlist指定的列表文件中存在的用户登录ftp
max_clients=# 最大并发连接数
max_per_ip=# 每个IP可同时发起的并发请求数
anon_max_rate 匿名用户的最大传输率,单位是“字节/秒”
local_max_rate 本地用户的最大传输率,单位是“字节/秒”
dirmessage_enable=YES 启用某目录下的.message描述信息 假设有一个目录为/upload,在其下创建一个文件名为.message, 在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示.message文件中的内容
message_file 设置访问一个目录时获得的目录信息文件的文加名,默认是.message
idle_session_timeout=600 设置默认的断开不活跃session时间
data_connection_timeout=1 20 设置数据传输超时时间
ftpd_banner="Welcome to c henlf FTP service." 定制欢迎信息,登录ftp时会自动显示

6.用户认证
ftp的用户主要有三种:
虚拟用户:仅用于访问某特定服务中的资源
系统用户:可以登入系统的真实用户
匿名用户


7.vsftpd虚拟用户配置步骤如下(演示)

    关闭防火墙
         //安装依赖的程序
    [[email protected] ~]# cd /etc/yum.repos.d/
    [[email protected] ~]# yum install -y wget
    [[email protected] yum.repos.d]# wget  http://mirrors.163.com/.help/CentOS7-Base-163.repo
    [[email protected] ~]# yum clean all
    [[email protected] ~]# yum -y install epel-release
    [[email protected] ~]# yum install -y vsftpd db4* 
            //创建文本格式的用户名,密码列表
    [[email protected] ~]# cat >> /etc/vsftpd/vu.list << EOF
    lan
   123
    zhi
   123
   EOF

         //将刚创建的文本格式的用户名和密码文件使用db4工具转换成数据库文件
   [[email protected] ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db

         //给虚拟用户的文件权限为600,以免数据外泄
[[email protected] ~]# chmod 600 /etc/vsftpd/vu.* 
[[email protected] ~]# ll /etc/vsftpd/vu.*  
    -rw-------. 1 root root 12288 Aug 2 15:53 /etc/vsftpd/vu.db 
    -rw-------. 1 root root 18 Aug 2 15:50 /etc/vsftpd/vu.list

    //给虚拟用户的映射账号,映射账号的名称为vftp
    [[email protected] ~]# useradd -d /var/ftproot -s /sbin/nologin vftp 
    [[email protected] ~]# chmod 755 /var/ftproot/
    [[email protected] ~]# ll -d /var/ftproot/ 
    drwxr-xr-x. 2 vftp vftp 62 Aug 2 15:56 /var/ftproot/

    //为虚拟用户建立PAM认证
     [[email protected] ~]# mv /etc/pam.d/vsftpd{,.bak} 
     [[email protected] ~]# vim /etc/pam.d/vsftpd 
    #%PAM-1.0
    auth required pam_userdb.so db=/etc/vsftpd/vu
    account required pam_userdb.so db=/etc/vsftpd/vu

            //修改vsftpd配置文件,添加虚拟用户支持。为不同虚拟用户建立独立的配置文件
    [[email protected] ~]# cp /etc/vsftpd/vsftpd.conf . 
    [[email protected] ~]# cat >> /etc/vsftpd/vsftpd.conf << EOF
    guest_enable=YES
    guest_username=vftp
    user_config_dir=/etc/vsftpd/vusers_dir
    allow_writeable_chroot=YES
    EOF

            //有了上述配置后,可以在/etc/vsftpd/vusers_dir目录中为每个虚拟用户分别建立配置文件了
    [[email protected] ~]# mkdir /etc/vsftpd/vusers_dir 
    [[email protected] ~]# ll /etc/vsftpd/  
    total 36
    -rw-------. 1 root root 125 Mar 23 2017 ftpusers
    -rw-------. 1 root root 361 Mar 23 2017 user_list
    -rw-------. 1 root root 5106 Aug 2 16:01 vsftpd.conf
    -rwxr--r--. 1 root root 338 Mar 23 2017 vsftpd_conf_migrate.sh     -rw-------. 1 root root 12288 Aug 2 15:53 vu.db
    -rw-------. 1 root root    18 Aug  2 15:50 vu.list
    drwxr-xr-x. 2 root root     6 Aug  2 16:03 vusers_dir

            //设置lan用户可以上传文件,创建目录,删除操作
    [[email protected] ~]# cat >> /etc/vsftpd/vusers_dir/lan << EOF
    >anon_umask=022
    >anon_upload_enable=YES
    >anon_mkdir_write_enable=YES
    >anon_other_write_enable=YES
    >EOF

            //设置zhi用户只要默认的下载权限,只需创建一个名为zhi的空文件即可
    [[email protected] ~]# touch /etc/vsftpd/vusers_dir/zhi

        //启动vftpd服务
    [[email protected] ~]# systemctl start vsftpd

8.通过脚本来实现虚拟用户配置以及实现文件共享功能

         [[email protected] ~]#vim ftp.sh
        #!/bin/bash
        #关闭防火墙
        systemctl disable firewalld
        systemctl stop firewalld
        sed -ri ‘s#^(SELINUX=).*#1disabled#g‘ /etc/selinux/config
        setenforce 0

       #安装依赖的程序
      cd /etc/yum.repos.d/
      mv * /tmp/
      curl -o 163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
      sed -i ‘s/$releasever/7/g‘ /etc/yum.repos.d/163.repo
      sed -i ‘s/enabled=0/enabled=1/g‘                   /etc/yum.repos.d/163.repo
      yum clean all && yum install -y epel-release && yum install -y vsftpd db4* &>/dev/null

     #添加两个用户lan、zhi 密码分别为123、123
     cat > /etc/vsftpd/vu.list << EOF
     lan
    123
     zhi
    123
    EOF
    #使用db4工具转换成数据库文件
    db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
    #给虚拟用户设置文件权限为600
    chmod 600 /etc/vsftpd/vu.*
    #给虚拟用户映射账号 创建ftp根目录     映射账号的名称为  vftp
   id vftp &>/dev/null
   if [ $? -ne 0 ];then
   useradd -d /var/fenxiang -s /sbin/nologin vftp
else
   userdel -r vftp
   useradd -d /var/fenxiang -s /sbin/nologin vftp
fi
  chmod 755 /var/fenxiang/
 #为虚拟用户建立PAM认证
 mv /etc/pam.d/vsftpd{,.bak}    
 cat > /etc/pam.d/vsftpd << EOF
 #%PAM-1.0
 auth required pam_userdb.so db=/etc/vsftpd/vu
 account required pam_userdb.so db=/etc/vsftpd/vu
 EOF
 #修改Vsftpd主配置文件
 cp /etc/vsftpd/vsftpd.conf /root/
 cat >> /etc/vsftpd/vsftpd.conf << EOF
 guest_enable=YES
 guest_username=vftp
 user_config_dir=/etc/vsftpd/yonghu
 allow_writeable_chroot=YES
 EOF
#配置虚拟用户lan的权限 上传 下载 删除
if [ ! -d /etc/vsftpd/yonghu ];then
mkdir /etc/vsftpd/yonghu
fi
cat > /etc/vsftpd/yonghu/lan << EOF
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
touch /etc/vsftpd/yonghu/zhi
systemctl restart vsftpd

以上是关于Linux详细搭建 vsftpd 服务的主要内容,如果未能解决你的问题,请参考以下文章

搭建nginx+vsftpd详细

Centos 7 搭建FTP详细配置步骤方法

LINUX下搭建VSFTPD服务器

Linux系统下vsftpd虚拟ftp用户账号存放在mysql数据库的FTP搭建

腾讯云服务器linux centOS7.4 搭建ftp服务器 vsftpd

Linux下ftp服务器搭建