Linux vsftp文件服务

 ftp文件服务


vsftpd 是“very secure FTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件。特点是:非常高的安全性需求、带宽限制、良好的可伸缩性等。(FTP和NFS不同的地方在于文件的管理上是不同的,NFS是以块的形式读取文件,FTP是以副本的形式来存取文件,即读的是整个文件)

 

工作原理


vsftpd使用ftp协议,该协议属于应用层协议。它是典型的c/s架构,ftp服务端用来存储文件,ftp客户端可以通过ftp协议连接服务端实现上传和下载资源。

ftp使用tcp的21端口进行命令传输,然后用tcp 的20端口进行数据传输(主动模式端口固定20)。默认是被动模式(端口随机分配)。

 

安装部署(selinux 防火墙关闭


服务端192.168.179.100   客户端 192.168.179.99

[root@localhost ~]# yum install vsftpd -y   --服务端安装

vsftpd: 为服务端软件

ftp、lftp: 为客户端工具,推荐使用lftp

[root@localhost ~]# yum install  ftp lftp -y   --客户端安装ftp lftp这些都是客户端的工具

 

服务端启动服务

[root@localhost ~]# systemctl enable  vsftpd

[root@localhost ~]# systemctl start vsftpd

[root@localhost ~]# netstat -tpln | grep vsftpd  --可以看到多了21端口

tcp6       0      0 :::21                   :::*                    LISTEN      4962/vsftpd

 

客户端测试  匿名用户访问


用ftp客户端匿名登录需要输入用户名及密码验证,匿名用户名为:ftp或者anonymous,密码为空。用lftp客户端匿名登录则不需要输入以上信息。

 

匿名用户去访问ftp服务器

[root@localhost ]# ftp 192.168.179.100  --客户端访问服务端

Connected to 192.168.179.100 (192.168.179.100).

220 (vsFTPd 3.0.2)

Name (192.168.179.100:root): ftp  --使用匿名登入

331 Please specify the password.

Password:   --密码直接回车

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

 

ftp> ls     --登入成功后查看目录,当前位置

227 Entering Passive Mode (192,168,179,100,113,193).

150 Here comes the directory listing.

drwxr-xr-x    2 0        0               6 Oct 30  2018 pub

226 Directory send OK.

 

匿名用户默认登入的目录是位于ftp服务端的pub目录,这个目录位于服务端的/var/ftp下面

[root@localhost ~]# cd /var/ftp/

[root@localhost ftp]# ls

pub

 

[root@localhost ftp]# cp /etc/fstab /var/ftp/pub/  --服务端将/etc/fstab文件拷贝到pub目录下,服务端pub下有了fstab文件了

ftp> pwd  --服务端查看pub下是否存在ftp文件

257 "/pub"

ftp> ls

227 Entering Passive Mode (192,168,179,100,156,253).

150 Here comes the directory listing.

-rw-r--r--    1 0        0             501 Mar 04 12:25 fstab

226 Directory send OK.

 

匿名用户get单个下载文件

ftp> get fstab  --对该文件进行下载

local: fstab remote: fstab

227 Entering Passive Mode (192,168,179,100,111,116).

150 Opening BINARY mode data connection for fstab (501 bytes).

226 Transfer complete.

501 bytes received in 0.00225 secs (222.17 Kbytes/sec)

 

ftp> exit  --退出看看文件有没有下载到本地

221 Goodbye.

[root@localhost ~]# ls

anaconda-ks.cfg  fstab

 

 

[root@localhost pub]# touch file1{1..9}  --在服务端再创建一些文件

[root@localhost pub]# ls

file11  file12  file13  file14  file15  file16  file17  file18  file19  fstab

ftp> ls  --客户端要批量下载这些文件

227 Entering Passive Mode (192,168,179,100,206,50).

150 Here comes the directory listing.

-rw-r--r--    1 0        0               0 Mar 04 12:44 file11

-rw-r--r--    1 0        0               0 Mar 04 12:44 file12

-rw-r--r--    1 0        0               0 Mar 04 12:44 file13

-rw-r--r--    1 0        0               0 Mar 04 12:44 file14

-rw-r--r--    1 0        0               0 Mar 04 12:44 file15

-rw-r--r--    1 0        0               0 Mar 04 12:44 file16

-rw-r--r--    1 0        0               0 Mar 04 12:44 file17

-rw-r--r--    1 0        0               0 Mar 04 12:44 file18

-rw-r--r--    1 0        0               0 Mar 04 12:44 file19

-rw-r--r--    1 0        0             501 Mar 04 12:25 fstab

 

匿名用户mget批量下载文件(不管是mget还是get命令下载的内容都在服务端当前目录下)

ftp> mget file*   --ftp客户端批量下载服务端文件,可以看出交互式的,每次下载都得询问,,要查看ftp更多命令使用ftp>help来查看

mget file11?

227 Entering Passive Mode (192,168,179,100,63,59).

150 Opening BINARY mode data connection for file11 (0 bytes).

226 Transfer complete.

mget file12? y

 

ftp> prompt off  --关闭询问这种交互模式

Interactive mode off.

ftp> prompt off  --再去下载就不会有询问是否要下载文件

Interactive mode off.

ftp> mget file*

local: file11 remote: file11

227 Entering Passive Mode (192,168,179,100,30,126).

150 Opening BINARY mode data connection for file11 (0 bytes).

226 Transfer complete.

local: file12 remote: file12

227 Entering Passive Mode (192,168,179,100,175,245).

.................................................................................................

 

ftp> put fstab  --可以看到匿名用户不能上传,因为没有权限

local: fstab remote: fstab

227 Entering Passive Mode (192,168,179,100,208,220).

550 Permission denied.

ftp> mkdir abc  --匿名用户也不能创建目录

550 Create directory operation failed.

 

总结就是:使用匿名用户登入,默认配置只能进行文件的读取和下载,不能进行写入和上传文件

修改ftp的配置文件,开启匿名用户创建文件,重命名,删除,上传权限(注意selinux要关闭和防火墙关闭)

[root@localhost pub]# vi /etc/vsftpd/vsftpd.conf  --开启下面三个权限差不多开启了匿名用户大部分功能

 anon_upload_enable=YES  --开启上传权限

 anon_mkdir_write_enable=YES  --开启创建文件权限

 anon_other_write_enable=YES  --开启重命名,删除权限

[root@localhost pub]# systemctl restart vsftpd  --修改配置文件之后重启服务

 

来到客户端

ftp> cd pub
250 Directory successfully changed.

ftp> lcd /etc  --lcd是切换到本地客户端的目录

Local directory now /etc

ftp> put fstab  --可以看到还是上传不了,这个是因为上一级目录权限的问题

local: fstab remote: fstab

421 Timeout.

Passive mode refused.

 

[root@localhost pub]# ls -ld /var/ftp/pub  --当服务端的配置都已经修改好,那么就应该考虑目录的权限问题了

drwxr-xr-x. 2 root root 145 Mar  4 20:44 /var/ftp/pub

[root@localhost pub]# chmod o+w /var/ftp/pub/  --修改目录权限

[root@localhost pub]# ls -ld /var/ftp/pub

drwxr-xrwx. 2 root root 145 Mar  4 20:44 /var/ftp/pub

 

再次来到客户端

ftp> cd pub
250 Directory successfully changed.

ftp> mkdir abc  --可以创建目录

257 "/pub/abc" created

[root@localhost pub]# ll

total 8

drwx------ 2 ftp  ftp    6 Mar  5 20:05 abc

ftp> lcd /etc

Local directory now /etc

ftp> put fstab  --可以上传文件(如果是实用得ftp客户端,不能直接实用绝对路径上传,需要先切换到本地文件路径,直接上传文件)

local: fstab remote: fstab

227 Entering Passive Mode (192,168,179,100,98,80).

150 Ok to send data.

226 Transfer complete.

501 bytes sent in 7.6e-05 secs (6592.11 Kbytes/sec)

 

lftp 192.168.179.100:/pub> put /etc/fstab -o fs  --使用lftp上传文件想改名就要带-o refile了

501 bytes transferred

[root@localhost pub]# ll fs

-rw------- 1 ftp ftp 501 Mar  5 20:20 fs

我们将本地文件fstab上传到了匿名用户的pub目录并修改了文件名

 

lftp上传多个文件,可以使用put和mput命令上传,多个文件之间用空格分隔,如果想使用通配符,只有mput命令支持:

lftp 192.168.179.100:/> cd pub

lftp 192.168.179.100:/pub> put /etc/fstab /etc/favicon.png

1580 bytes transferred         

Total 2 files transferred

lftp 192.168.179.100:/pub> mput /etc/f*

1688 bytes transferred                                

Total 4 files transferred

 

lftp下载目录

[root@localhost pub]# mkdir -p test  --服务端创建目录

[root@localhost pub]# ls

test

lftp 192.168.179.100:/pub> mirror test  --客户端下载该目录

Total: 1 directory, 0 files, 0 symlinks

lftp 192.168.179.100:/pub> rmdir test  --删除目录

rmdir ok, `test' removed

lftp 192.168.179.100:/pub> rm file1  --删除文件

rm ok, `file1' removed

 

 

本地用户访问ftp服务器


修改配置文件,可以设置不让匿名用户登录,只能本地用户登录:

重启服务。然后再次访问:

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

local_enable=YES

[root@localhost pub]# systemctl restart vsftpd

 

 

[root@localhost ~]# lftp 192.168.179.100  --这个登录,表示匿名用户已经无法登录了。

lftp 192.168.179.100:~> ls

`ls' at 0 [Sending commands...]

 

 

如果使用本地用户访问,需要服务端有对应的用户存在才行。

[root@localhost ~]# id jerry  --服务端的jerry用户

uid=1000(jerry) gid=1000(jerry) groups=1000(jerry)

[root@localhost ~]# lftp [email protected] --这样登入到的是服务端jerry的家目录

Password:

lftp [email protected]:~> pwd   --并不是在服务端的匿名用户的pub目录,是在服务端jerry的家目录 (上传和下载和匿名用户一样的使用方法)

ftp://[email protected]/%2Fhome/jerry

lftp [email protected]:/var/ftp/pub> cd /  --可以看到jerry用户可以随意切换到服务端的任何目录下面,这是不安全的,最好是限制只能在家目录活动,限制系统用户越狱:在安装vsftpd后不做配置的话,系统用户是可以向上切换到其他目录的

cd ok, cwd=/

lftp [email protected]:/> ls

lrwxrwxrwx    1 0        0               7 Mar 01 19:43 bin -> usr/bin

dr-xr-xr-x    5 0        0            4096 Mar 01 19:52 boot

drwxr-xr-x   19 0        0            3200 Mar 05 10:05 dev

drwxr-xr-x   81 0        0            8192 Mar 05 12:39 etc

drwxr-xr-x    3 0        0              19 Mar 05 12:39 home

lftp [email protected]:/> put /etc/fstab /etc/favicon.png   --同时可以看到本地用户对家目录是没有写权限的
put: Access failed: 553 Could not create file. (fstab)
put: Access failed: 553 Could not create file. (favicon.png)

 

限制系统用户越狱:在安装vsftpd后不做配置的话,系统用户是可以向上切换到其他目录的。(限制在家目录,不让其看其他目录信息)

vim /etc/vsftpd/vsftpd.conf

chroot_local_user=YES    --是否将所有用户限制在主目录,YES为启用,NO禁用.(该项默认值是NO)

chroot_list_enable=NO   --chroot_list_enable: 是否启动限制用户(特例)的名单 YES为启用,NO禁用(包括注释掉也为禁用)

allow_writeable_chroot=YES  --允许用户具有主目录写权限

[root@localhost pub]# systemctl restart vsftpd   

[root@localhost ~]# lftp [email protected]   --在客户端这边可以看到限制了用户的越狱,只能在家目录活动

lftp [email protected]:/> cd /
lftp [email protected]:/> pwd
ftp://[email protected]/

lftp [email protected]:/> put /etc/fstab  --可以正常上传文件,对家目录有写权限
501 bytes transferred

 

如果不加allow_writeable_chroot=YES这个参数重启服务客户端会报错,允许对家目录的写,即可以上传

[root@localhost ~]# lftp [email protected]

Password:

lftp [email protected]:~> ls        

ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

 

 

(1)如果想全部限制,所有用户都不能切换家目录

chroot_local_user=YES

chroot_list_enable=NO

allow_writeable_chroot=YES

 

(2)如果想让部分用户有切换的家目录的权限,则需要开启限制:

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

chroot_list中写上要放行用户

发布了289 篇原创文章 · 获赞 323 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/104685731