linux FTP 服务器安装配置及命令使用教程(附:视频讲解)
October 9, 2017
本文将会讲述如何在linux系统下安装并配置最常用的FTP 服务器(VSFTPD),并通过实例来介绍如何利用FTP命令来上次文件和从ftp服务器上下载文件。
Table of Contents
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