Skip to content Skip to main navigation Skip to footer

linux FTP 服务器安装配置及命令使用教程(附:视频讲解)

本文将会讲述如何在linux系统下安装并配置最常用的FTP 服务器(VSFTPD),并通过实例来介绍如何利用FTP命令来上次文件和从ftp服务器上下载文件。

FTP 是什么

FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。  -摘自 百度百科

linux FTP 服务器安装(VSFTP 软件包安装)

在linux系统下我们主要使用ftp软件是vsftp,它的进程名为vsftpd,下面我们来介绍如何来安装vsftp 软件包。
1# 检查vsftp软件包是否安装
执行下面的命令:

# rpm -qa |grep vsftp

2# 如果vsftp软件没有安装,执行下面的命令安装

# yum install vsftpd

linux FTP 服务启用

1# 启用vsftpd ftp 服务
执行下面命令:

# chkconfig vsftpd on

linux FTP 服务器启动/停止/重启

1# 启动vsftpd ftp 服务器
执行下面的命令:

# service vsftpd start

对于centos7 或者ubuntu 16.04 系统,执行命令:

# systemctl start vsftpd.service

2# 停止vsftpd ftp 服务器
执行下面的命令:

# service vsftpd stop

对于centos7 或者ubuntu 16.04 系统,执行命令:

# systemctl stop vsftpd.service

3# 重启vsftpd ftp 服务器

# service vsftpd restart

对于centos7 或者ubuntu 16.04 系统,执行命令:

# systemctl restart vsftpd.service

Linux FTP 端口开启(ftp端口号为21)

在linux下的ftp 服务默认使用的端口号为21,我们需要配置防火墙策略,允许对服务器21号端口的访问。
1# 使用vim 编辑器打开/etc/sysconfig/iptables配置文件
执行命令:

# vim /etc/sysconfig/iptables

2# 添加下面的防火墙策略到配置文件里

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

3# 保存并退出配置文件。重启防火墙服务
执行下面命令:

# service iptables restart

测试 FTP 服务器

执行下面命令:

# ftp localhost
# ftp ftp服务器ip地址

linux FTP 服务器配置

Vsftp ftp 软件默认的配置文件为/etc/vsftpd/vsftpd.conf, 我们需要根据实际情况来对配置文件做更改, 下面将会对一些典型的配置案例做介绍:
1# ftp 匿名用户配置
如果想让匿名用户浏览ftp服务器上的文件,但不能上传文件以及创建目录,那么我们可以对配置做下面的更改:

ftpd_banner=Welcom to my FTP Server!!!    //登录时显示的欢迎信息
 dirmessage_enable=YES            //允许为目录配置显示信息,显示每个目录下面message_file文件的内容
 setproctitle_enable=YES            //显示会话状态信息
anonymous_enable=YES            //接受匿名用户
 no_anon_password=YES            //匿名用户登录时不询问口令
 anon_root=目录路径            //匿名用户登录后所在的位置,可以根据自己的实际需求来修改
 write_enable=YES            //可以上传(全局控制)
 file_open_mode=0666            //上传文件的权限,配合umask使用
 anon_upload_enable=NO        //匿名用户可以上传
 anon_mkdir_write_enable=YES        //匿名用户可以建立目录
 anon_other_write_enable=YES        //匿名用户可以重名名、删除等权限
 anon_world_readable_only=YES    //如果设为YES,匿名用户登入者会被允许下载可阅读的文档
 chown_uploads=YES            //所有匿名上传的文件的所属用户将会被更改为chown_username
 chown_username=user            //匿名上传文件所属用户名

2# 允许用户上传文件并在服务器上创建目录的配置
通过vim 编辑vsftpd 配置文件,更改下面的配置:

anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES

保存并退出配置文件,并重启vsftpd 服务器
3# FTP网络连接参数
如果需要对ftp服务器网络连接参数做更改,可以优化下面的网络参数配置:

max_clients=1000            //可接受的最大连接数,可以根据自己的实际情况来修改
 max_per_ip=5                //每个IP地址的最大连接数,可以根据自己的实际情况来修改
 anon_max_rate=51200            //匿名用户的带宽(b/s)
 local_max_rate=5120000        //本地用户的带宽(b/s)
 idle_session_timeout=600        //空闲连接超时时间
 data_connection_timeout=120        //数据传输超时时间
 ACCEPT_TIMEOUT=60            //PAVS请求超时时间
 connect_timeout=60            //PORT模式连接超时时间
 connect_from_port_20=YES        //使用标准的20端口来连接FTP
 listen_address=地址或网段        //绑定到某个IP或网段,其他IP不能访问该FTP
 listen_port=2121            //绑定到某个端口
 ftp_data_port=2020            //数据传输端口
 pasv_max_port=0            //PASV连接模式时可以使用port范围的上界,0表示任意。
 pasv_min_port=0            //PASV连接模式时可以使用port范围的下界,0表示任意。

linux ftp 服务器配置后可能遇到的问题

Ftp 服务器中的默认文件存放路径是在/var/ftp/pub 目录下,服务器配置完毕后,可能会遇到一些小问题,比如:无法登陆,不能创建目录,不能写文件等,造成这种问题的原因主要是权限问题。我们需要对权限做一些更改,如下:
1# 更改pub目录的权限为755, 执行下面命令:

# chmod 755 -R /var/ftp/pub

需要注意的是,pub目录的权限不能设置为777, 否则会报错。
2# 如果匿名用户需要上传文件,那么需要给pub目录的其它组增加写的权限,执行下面命令:

#chmod o+w /var/ftp/pub/

Linux 下通过shell 脚本自动化实现FTP服务器的安装及配置

在实际的工作中,可能需要实现ftp服务器的自动化安装及配置,那么我们就可以使用linux bash shell 脚本来实现其自动化安装配置。下面的脚本仅作为参考使用,具体的设置可以执行更改。

#!/bin/bash
# 设置ftp环境的脚本。ftp的根目录为只读,其下的writable目录为可写
# 可自定义以下四项
# ftp用户名
userName="test"
# ftp密码
password="test"
# ftp根目录,末尾不要加/
ftp_dir="$HOME/ftp"
# 可写目录的目录名
writable="writable"
# 如果没有加sudo,提示错误并退出
if [ "x$(id -u)" != x0 ]; then
echo "Error: please run this script with 'sudo'."
exit 1
fi
# 核心工具,vsftpd。 -y是对所有提示都回答yes
sudo apt-get -y install vsftpd
# db-util是用来生成用户列表数据库的工具
sudo apt-get -y install db-util
# 以下步骤参考https://help.ubuntu.com/community/vsftpd#The_workshop
# 创建用户名和密码的数据库,以单数行为用户名,双数行为密码记录
cd /tmp
printf "$userName\n$password\n" > vusers.txt
db_load -T -t hash -f vusers.txt vsftpd-virtual-user.db
sudo cp -f vsftpd-virtual-user.db /etc/
cd /etc
chmod 600 vsftpd-virtual-user.db
if [ ! -e vsftpd.conf.old ]; then
sudo cp -f vsftpd.conf vsftpd.conf.old
fi
# 创建PAM file。bash的here-document,直接输出这些内容覆盖原文件
(sudo cat <<EOF
auth       required     pam_userdb.so db=/etc/vsftpd-virtual-user
account    required     pam_userdb.so db=/etc/vsftpd-virtual-user
session    required     pam_loginuid.so
EOF
) > pam.d/vsftpd.virtual
# 获取当前的用户名,不能用whoami或$LOGNAME,否则得到的是root
owner=`who am i| awk '{print $1}'`
# 创建vsftpd的配置文件。
(sudo cat <<EOF
listen=YES
anonymous_enable=NO
local_enable=YES
virtual_use_local_privs=YES
write_enable=YES
local_umask=000
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
hide_ids=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd.virtual
guest_enable=YES
user_sub_token=$USER
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
EOF
) > vsftpd.conf
sudo echo "local_root=$ftp_dir" >> vsftpd.conf
# 虚拟用户需要映射为本地用户,设为自己,避免权限问题,但同时也令自己对ftp根目录不可写
sudo echo "guest_username=$owner" >> vsftpd.conf
# 设置了每个虚拟用户只可以浏览其根及子目录(否则可访问磁盘根目录),
# 这样会被要求根目录不可写,所以创建一个writable的子目录
mkdir "$ftp_dir"
mkdir "$ftp_dir/$writable"
sudo chmod a-w "$ftp_dir"
sudo chown -R $owner:$owner $ftp_dir
sudo /etc/init.d/vsftpd restart
#该脚本出自:blog.csdn.net/hursing

linux ftp 服务器安装及配置视频讲解教程

如果对上面的某些步骤还有不明白的地方,那么可以参考下面的vsftp 视频安装及配置教程。

linux FTP 命令

ls: 显示远端文件列表(ils 显示本地文件列表)。# l 的意思就是local ils比较特殊
cd: 切换远端目录(lcd 切换本地目录)。
get:下载远端文件。
mget:下载远端文件(可以用通配符也就是 *)。
pget:使用多个线程来下载远端文件, 预设为五个。
mirror:下载/上传(mirror -R)/同步 整个目录。
put:上传文件。
mput:上传多个文件(支持通配符)。
mv:移动远端文件(远端文件改名)。
rm:删除远端文件。 参数-r,递归删除文件夹
mrm:删除多个远端文件(支持通配符)。
mkdir:建立远端目录。
rmdir:删除远端目录。
pwd:显示目前远端所在目录(lpwd 显示本地目录)。
du:计算远端目录的大小
set net:limit-rate 10000,10000 限制上传下载各为10KB/s
set ftp:charset gbk 设置远程ftp site用gbk编码
! 执行本地 shell的命令(由于lftp 没有 lls, 故可用 !ls 来替代)
lcd:切换本地目录
lpwd:显示本地目录
alias:定义别名
exit:退出ftp

FTP 命令的实例

1# 登陆linux ftp服务器
命令格式:ftp [hostname| ip-address] 执行下面的命令:

ftp 192.168.1.105

然后输入相应的ftp用户名和密码。
2# 从ftp服务器上下载文件
下载文件通常用get和mget这两条命令。
a) 使用get 命令
格式:get [remote-file] [local-file] 将文件从远端主机中传送至本地主机中.例如要下载ftp服务器上的fio.txt 文件到本地目录上
执行下面的命令:

ftp> get fio.txt  fio.txt

b) 使用mget命令
格式:mget [remote-files] 从远端主机接收一批文件至本地主机.例如要获取服务器上/var/pub/目录下的所有文件
执行下面的命令:

ftp> cd /var/pub/
ftp> mget *.*

3#往linux ftp服务器上传文件
a)使用 put命令
格式:put local-file [remote-file] 将本地一个文件传送至远端主机中.例如要把本地的fio.txt上传到到远程ftp服务器的/var/pub 目录里,执行下面的命令

ftp> put fio.txt  /var/pub

b)使用 mput命令
格式:mput local-files
将本地主机中一批文件传送至远端主机.
例如要把本地当前目录下所有txt文件上传到ftp服务器的/var/pub/ 下

ftp> cd /var/pub/
ftp> mput *.txt

4# 断开ftp连接
bye:中断与服务器的连接。
执行下面的命令:

ftp> bye

更多阅读:LFTP : 一个功能强大的命令行FTP程序 
本文永久地址:https://www.osetc.com/archives/20354.html