linux下FTP文件服务器

FTP介绍

FTP (File transfer protocol) 是TCP/IP 协议组中的协议之一。他最主要的功能是在服务器与客户端之间进行文件的传输。FTP就是实现两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为下载(download)文件。将文件从自己计算机中拷贝至远程计算机上,则称之为上传(upload)文件。这个古老的协议使用的是明码传输方式,且过去有相当多的安全危机历史。为了更安全的使用 FTP 协议,我们主要介绍较为安全但功能较少的 vsftpd(very secure File transfer protocol) 这个软件。FTP是一个C/S类型的软件,FTP监听TCP端口号为21,数据端口为20。

FTP的权限

FTP 服务器在默认的情况下,依据使用者登录的情况而分为三种不同的身份,分别是:

  1. 本地用户: 系统中真实存在的用户

  2. 来宾: guest

  3. 匿名登录者: anonymous

这三种身份的用户在系统上面的权限差异很大!例如实体用户取得系统的权限比较完整, 所以可以进行比较多的动作;至于匿名登录者,大概我们就仅提供他下载资源的能力而已,并不许匿名者使用太多主机的资源! 当然,这三种人物因为权限的不同能够使用的在线命令自然也就不相同!

FTP的工作模式

FTP支持两种模式,一种方式叫做Standard (也就是PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 下面介绍一个这两种方式的工作原理:

Port模式:FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

Passive模式:在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。

FTP安装

查看系统版本:

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

 

安装vsftpd:

[root@localhost ~]# yum install vsftpd -y
 

查看版本:

[root@localhost ~]# vsftpd -v
vsftpd: version 3.0.2

启动和开机启动vsftpd服务:

[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
 

验证:

[root@localhost ~]# ps -aux |grep vsftpd
root       2455  0.0  0.0  53204   568 ?        Ss   11:29   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       2483  0.0  0.0 112664   968 pts/0    S+   11:31   0:00 grep --color=auto vsftpd       
[root@localhost ~]# lsof -i:21
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vsftpd  2455 root    4u  IPv6  22574      0t0  TCP *:ftp (LISTEN)

FTP配置文件

相关文件

  • 主配文件: /etc/vsftpd/vsftpd.conf

  • 默认上传目录: /var/ftp/

  • FTP日志: /var/log/xferlog

主配文件详解

vim  /etc/vsftpd/vsftpd.conf
#匿名用户访问,YES是允许,NO是拒绝
anonymous_enable=NO

#本地用户登录,YES是允许,NO是拒绝.默认访问的是本地用户家目录
local_enable=YES

#允许本地用户上传
write_enable=YES

#上传的权限是022,使用的是umask权限。对应的目录是755,文件是644
local_umask=022

#开启匿名用户上传功能,默认是拒绝的
#anon_upload_enable=NO

#开启匿名用户创建文件或文件夹权限
#anon_mkdir_write_enable=NO

#如果设为YES,则允许匿名登入者删除或者重命名目录的权限。
#anon_other_write_enable=NO

#开启目录欢迎消息,一般对命令行登陆有效
dirmessage_enable=YES

#开启上传和下载日志记录功能
xferlog_enable=YES

#使用标准Port传输模式
connect_from_port_20=YES

#pasv传输模式相关参数
#启动pasv传输模式
#pasv_enable=YES

#限制pasv模式下,服务端开启的端口范围
#pasv_min_port=40000
#pasv_max_port=40080 

#是否屏蔽对pasv进行安全检查,当有安全隧道时可禁用。
#pasv_promiscuous=NO

#客户端链接到此IP上进行数据传输
#pasv_address=本机IP

#如果设置为YES,所有匿名上传的文件将所有者在改为chown_username指定的用户。仅上传,新建不受影响。
#chown_uploads=YES

#声明匿名用户上传文件的所有者为whoever
#chown_username=whoever

#日志文件路径
xferlog_file=/var/log/xferlog

#日志文件采用标准格式
xferlog_std_format=YES

#会话超时时间
#idle_session_timeout=600

#数据传输超时时间
#data_connection_timeout=120

#FTP子进程管理用户
#nopriv_user=ftpsecure

#是否允许客户端发起“async ABOR”请求,该操作是不安全的默认禁止。
#async_abor_enable=YES

#该选项用于指定是否允许上传时以ASCII模式传输数据
ascii_upload_enable=YES

#该选项用于指定是否允许下载时以ASCII模式传输数据
ascii_download_enable=YES

#FTP文本界面登陆欢迎词
ftpd_banner=Welcome to blah FTP service.

#是否开启拒绝的Email功能
#deny_email_enable=YES

#指定保存被拒接的Email地址的文件
#banned_email_file=/etc/vsftpd/banned_emails

#是否开启对本地用户chroot的限制,YES为默认所有用户都不能切出家目录,NO代表默认用户都可以切出家目录。设置方法类似于:YES拒绝所有,NO允许所有拒绝个别
chroot_local_user=YES

#开启特例列表
#chroot_list_enable=YES

#如果chroot_local_user的值是YES则该文件中的用户是可以切出家目录,如果是NO,该文件中的用户则不能切出家目录一行一个用户。
#chroot_list_file=/etc/vsftpd/chroot_list

#是否开启ls 递归查询功能 ls -R
#ls_recurse_enable=YES

#是否开启ftp独立模式在IPV4
listen=YES

#是否开启ftp独立模式在ipv6
#listen_ipv6=NO

#启用pam模块验证
pam_service_name=vsftpd

#是否开启userlist功能,定义对列表中的用户做定义
userlist_enable=YES

#为NO时拒绝所有人访问,只允许userlist_file文件中的用户可访问ftp;为时YES允许所有人访问,列表中的用户无法访问。
userlist_deny=NO

#只有文件中定义的用户才可以访问或拒绝访问
userlist_file=/etc/vsftpd/user_list

#从2.3.5之后,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了,如果检查发现还有写权限,就会报该错误。要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限。或者你可以在vsftpd的配置文件中增加此项。
allow_writeable_chroot=YES 

#定义本地用户目录
local_root=/home/test

#是否开启tcp_wrappers管理,TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制
tcp_wrappers=YES

本地用户登录

修改配置文件:

[root@baism ~]# vim  /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
pam_service_name=vsftpd
listen=YES
userlist_enable=YES
tcp_wrappers=YES

 

创建本地用户

#创建用户并禁止用户登录

[root@localhost ~]# useradd test -s /sbin/nologin 
[root@localhost ~]# echo "testadmin" | passwd test --stdin
更改用户 test 的密码 。
passwd:所有的身份验证令牌已经成功更新。

#创建ftp目录

[root@localhost ~]# mkdir -p /data/ftp/pub

#创建测试文件

touch test.txt /data/ftp/pub/

#写入内容

echo "Welcome to user FTP service." >> /data/ftp/pub/test.txt 

#设置权限
[root@localhost ~]# chmod a-w /data/ftp/&&chmod 777 -R /data/ftp/pub/

#修改登入目录
[root@localhost ~]# usermod -d /data/ftp/ test
 

#重启服务
[root@localhost ~]# systemctl restart vsftpd
 

FTP客户端访问

FTP是一个C/S类型的软件,连接服务端需要FTP客户端才能完成,常见的FTP客户端有以下几种:

  • 浏览器: 可以通过浏览器中输入 ftp://ip或者ftp://域名的方式来访问FTP

  • 自带客户端: 命令行下可以使用ftp命令去连接

  • 三方客户端: FileZilla 8uftp 图形软件或者文本界面的lftp等

使用windows客户端验证:

 

 

 linux客户端登陆

#安装ftp命令

[root@client ~]# yum install ftp -y

#使用ls查看有哪些目录

ftp> ls
227 Entering Passive Mode (192,168,1,10,88,171).
150 Here comes the directory listing.
drwxrwxrwx    3 0        0              42 May 17 06:30 pub
226 Directory send OK.

#输入help查看可以使用的命令

ftp> help
Commands may be abbreviated.  Commands are:

!        debug        mdir        sendport    site
$        dir        mget        put        size
account        disconnect    mkdir        pwd        status
append        exit        mls        quit        struct
ascii        form        mode        quote        system
bell        get        modtime        recv        sunique
binary        glob        mput        reget        tenex
bye        hash        newer        rstatus        tick
case        help        nmap        rhelp        trace
cd        idle        nlist        rename        type
cdup        image        ntrans        reset        user
chmod        lcd        open        restart        umask
close        ls        prompt        rmdir        verbose
cr        macdef        passive        runique        ?
delete        mdelete        proxy        send
 

#切换目录到pub下

ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,1,10,217,155).
150 Here comes the directory listing.
-rwxrwxrwx    1 0        0              29 May 17 05:40 test.txt
drwxr-xr-x    2 1000     1000            6 May 17 06:30 新文件夹
226 Directory send OK.
 

#切换客户端的当前目录

ftp> lcd /home/test/
Local directory now /home/test

#put上传文件,mput批量上传
ftp> put test.py 
local: test.py remote: test.py
227 Entering Passive Mode (192,168,1,10,204,177).
150 Ok to send data.
226 Transfer complete.
451 bytes sent in 0.00835 secs (54.03 Kbytes/sec)

#验证结果
ftp> ls
227 Entering Passive Mode (192,168,1,10,40,205).
150 Here comes the directory listing.
-rw-r--r--    1 1000     1000          451 May 17 07:12 test.py
-rwxrwxrwx    1 0        0              29 May 17 05:40 test.txt
drwxr-xr-x    2 1000     1000            6 May 17 06:30 新文件夹
226 Directory send OK.
 

#切换客户端目录到tmp下

ftp> lcd /tmp/
Local directory now /tmp

#使用get下载test.txt文件,mget批量下载
ftp> get test.txt
local: test.txt remote: test.txt
227 Entering Passive Mode (192,168,1,10,140,199).
150 Opening BINARY mode data connection for test.txt (29 bytes).
226 Transfer complete.
29 bytes received in 2.1e-05 secs (1380.95 Kbytes/sec)
 

#delete删除文件

ftp> delete test.py
250 Delete operation successful.
ftp> ls
227 Entering Passive Mode (192,168,1,10,134,127).
150 Here comes the directory listing.
-rwxrwxrwx    1 0        0              29 May 17 05:40 test.txt
drwxr-xr-x    2 1000     1000            6 May 17 06:30 新文件夹
226 Directory send OK.
 

#验证上面的get下载

ftp> exit
221 Goodbye.
[root@client ~]# cd /tmp/
[root@client tmp]# ls
test.txt
[root@client tmp]# cat test.txt 
Welcome to user FTP service.

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值