设为首页 收藏本站
查看: 1316|回复: 0

[经验分享] 构建FTP服务器(vsftpd)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-8-14 17:16:11 | 显示全部楼层 |阅读模式
根据公司的业务发展要求,需要面向Internet搭建一台FTP文件服务器,以提供公测软件、市场资料的下载,以及员工的一些资源上传分享。同时,需要对用户下载/上传流量进行控制。

1.开放匿名访问,任何人都可以下载服务器/var/ftp/目录下的资料,而且可以向服务器的/var/ftp/pub上传文件。

2.允许服务器的系统用户通过FTP方式访问宿主目录,但禁止访问其他目录。

3.最多允许100个并发用户连接,其中来自相同IP地址的并发连接不超过5个。

4.匿名访问此FTP服务时,最大传输速度限制为100KB/s;系统用户访问此FTP服务时,最大传输速度限制为200KB/s。

方案

使用2台RHEL6虚拟机,其中一台作为vsftpd服务器(192.168.4.5)、另外一台作为测试用的Linux客户机(192.168.4.6)。

实现

1.确认安装vsftpd软件包。

通过YUM方式安装vsfptd软件包,并确认其主要配置文件:

1.  [iyunv@localhost ~]# yum -y install vsftpd

2.  [iyunv@localhost ~]# rpm -qc vsftpd

在配置vsfptd服务的过程中, 可以参考vsftpd.conf的man手册页,也可以充分利用其提供的样本配置文件 —— 具体路径可通过rpm –ql vsftpd找到:

1.  [iyunv@localhost ~]# rpm -ql vsftpd | grep -i example

2.配置可匿名访问的vsftpd服务。

1)实现可匿名下载的vsftpd服务。

安装好vsftpd软件包以后,默认的配置即支持匿名下载、本地用户下载/上传,只需要启动vsftpd服务,就可以测试匿名FTP下载了。确认配置的操作及结果如下所示;

1. [iyunv@localhost ~]# grep -m2 -i _enable /etc/vsftpd/vsftpd.conf

匿名FTP在Linux系统中有一个名为ftp的系统用户,其宿主目录就是匿名FTP访问的根目录。以下操作可以了解匿名FTP目录位置、启动vsftpd服务。

1. [iyunv@localhost ~]# grep ftp /etc/passwd

2. ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

3. [iyunv@localhost ~]# service vsftpd start

4. 为 vsftpd 启动 vsftpd:                       [确定]

5. [iyunv@localhost ~]# chkconfig vsftpd on             //设为开机后自启动

dd工具在/var/ftp/目录下新建一个20MB的测试文件tdd.file:

1.  [iyunv@localhost ~]# dd if=/dev/zeroof=/var/ftp/tdd.filebs=1M count=20

2.  20+0 records in                                      //创建测试文件

3.  20+0 records out

4.  20971520bytes(21 MB) copied,0.020122 seconds,1.0 GB/s

5.  [iyunv@localhost ~]# ls -lh /var/ftp/tdd.file          //确认新建的测试文件

6.  -rw-r--r--1 root root 20M 09-2213:50/var/ftp/tdd.file

在客户机上通过FTP下载、确认下载后文件的权限:

1.  [iyunv@svr6 ~]# wget ftp://192.168.4.5/tdd.file      //从FTP服务器下载文件

2.  --2013-09-2213:57:18--  ftp://192.168.4.5/tdd.file

3.             => `tdd.file'

4.  Connecting to 192.168.4.5:21... 已连接。

5.  正在以 anonymous 登录 ... 登录成功!

6.  ==> SYST ... 完成。    ==> PWD ... 完成。

7.  ==> TYPE I ... 完成。  ==> 不需要 CWD。

8.  ==> SIZE tdd.file ... 20971520

9.  ==> PASV ... 完成。    ==> RETR tdd.file ... 完成。

10.长度:20971520 (20M)

11.

12.100%[================================>] 20,971,520  --.-K/s   in 0.1s

13.

14.2013-09-22 13:57:18 (191 MB/s) - `tdd.file' saved [20971520]

15.[iyunv@svr6 ~]# ls -lhtdd.file                      //确认下载后的文件

16.-rw-r--r--1 root root 20M 09-2213:57 tdd.file

2)实现可匿名上传的vsftpd服务。

由于vsftpd服务内建的安全机制要求,匿名访问的用户ftp或其他人是不能对FTP根目录/var/ftp/有写入权限的。例如,假如在服务器上将/var/ftp/目录的权限设置为777,则在登录服务时会报OOPS错误:

1.  [iyunv@svr6 ~]# ftp 192.168.4.5              //使用ftp命令访问FTP服务器

2.  Connected to 192.168.4.5.

3.  220(vsFTPd 2.0.5)

4.  530 Please login with USER and PASS.

5.  530 Please login with USER and PASS.

6.  KERBEROS_V4 rejected as an authentication type

7.  Name(192.168.4.5:root): ftp                          //匿名FTP用户

8.  331 Please specify the password.

9.  Password:                                              //密码任意

10.500 OOPS: vsftpd: refusing to run with writable anonymous root

11.Loginfailed.

12.ftp>

因此不能简单调整/var/ftp/的权限来实现匿名上传,但是可以在/var/ftp/下建立一个用户ftp可写入的子目录,匿名访问时可以向这个子目录下上传。默认情况下,已建有一个开放目录pub,只需要适当调整归属以使ftp用户能够写入:

1.  [iyunv@localhost ~]# ls -ld /var/ftp/pub/                      //原有权限

2.  drwxr-xr-x 2 root root 40962012-09-25/var/ftp/pub/

3.  [iyunv@localhost ~]# chown ftp /var/ftp/pub/                  //调整目录归属

4.  [iyunv@localhost ~]# ls -ld /var/ftp/pub/

5.  drwxr-xr-x 2 ftp root 40962012-09-25/var/ftp/pub/          //调整后的权限

接下来修改主配置文件/etc/vsftpd/vsftpd.conf,确认打开“anon_”开头的上传及建目录的配置,并添加anon_mask、anon_other_write_enable配置,以设置上传权限掩码、开放其他写入权限(改名、删除、覆盖等)。配置操作及主要内容如下所示:

1.  [iyunv@localhost ~]# cd /etc/vsftpd/

2.  [iyunv@localhost vsftpd]# cp vsftpd.confvsftpd.conf.origin

3.                                                    //备份配置文件

4.  [iyunv@localhost vsftpd]# grep -vE "#|^$" vsftpd.conf.origin > vsftpd.conf

5.                                                      //提取有效配置行

6.  [iyunv@localhost vsftpd]# vim vsftpd.conf

7.  anonymous_enable=YES                      //启用匿名FTP访问

8.  anon_umask=022                              //匿名上传的权限掩码

9.  anon_upload_enable=YES                     //允许匿名上传

10.anon_mkdir_write_enable=YES              //匿名访问时允许创建子目录

11.anon_other_write_enable=YES              //允许匿名访问时的其他写入权限

12.local_enable=YES

13.write_enable=YES                          //允许本服务器开放写入权限

14.local_umask=022

15.dirmessage_enable=YES

16.xferlog_enable=YES

17.connect_from_port_20=YES

18.xferlog_std_format=YES

19.listen=YES

20.pam_service_name=vsftpd

21.userlist_enable=YES

22.tcp_wrappers=YES

确认配置无误后,再次重启vsftpd服务。

1.  [iyunv@localhost vsftpd]# service vsftpd restart

2.  关闭 vsftpd:                                              [确定]

3.  为 vsftpd 启动 vsftpd:                                    [确定]

在客户机上使用ftp命令访问,验证上传权限:

1.  [iyunv@svr6 ~]# ftp 192.168.4.5

2.  Connected to 192.168.4.5.

3.  220(vsFTPd 2.0.5)

4.  530 Please login with USER and PASS.

5.  530 Please login with USER and PASS.

6.  KERBEROS_V4 rejected as an authentication type

7.  Name(192.168.4.5:root): ftp                         //匿名FTP用户

8.  331 Please specify the password.

9.  Password:                                             //密码任意

10.230 Login successful.

11.Remote system type is UNIX.

12.Using binary mode to transfer files.

13.ftp> cd pub                                          //切换到可上传的子目录

14.250 Directory successfully changed.

15.ftp> put install.log                                  //上传一个文件

16.local: install.logremote: install.log

17.227 Entering Passive Mode(192,168,4,4,166,53)

18.150 Ok to send data.

19.226 File receive OK.

20.1351680 bytes sent in 0.015seconds(8.8e+04 Kbytes/s)

21.ftp> mkdir tdir                                      //创建一个子目录

22.257"/pub/tdir" created

23.ftp> quit                                              //断开FTP连接

24.221 Goodbye.

25.[iyunv@svr6 ~]#

回到FTP服务器192.168.4.5上,可确认刚上传的文件及目录的权限:

1.  [iyunv@localhost vsftpd]# ls -lh /var/ftp/pub/

2.  总计 1.3M

3.  -rw-r--r--1 ftp ftp 1.3M 09-2214:28 install.log

4.  drwxr-xr-x 2 ftp ftp 4.0K 09-2214:28 tdir

3.实现用户验证的vsftpd服务。

这个默认已经打开了(配置项local_enable=YES),但是目录切换未作限制,因此以系统用户登录后,虽然默认位于宿主目录,却可以通过cd命令切换到其他位置,带来安全隐患。以服务器上的用户kdev(若没有请先添加)为例,登录及目录切换的相关操作如下所示:

1.  [iyunv@svr6 ~]# ftp 192.168.4.5

2.  Connected to 192.168.4.5.

3.  220(vsFTPd 2.0.5)

4.  530 Please login with USER and PASS.

5.  530 Please login with USER and PASS.

6.  KERBEROS_V4 rejected as an authentication type

7.  Name(192.168.4.5:root): kdev                      //以用户kdev登录

8.  331 Please specify the password.

9.  Password:                                          //验证用户kdev的密码

10.230 Login successful.

11.Remote system type is UNIX.

12.Using binary mode to transfer files.

13.ftp> pwd                                          //当前位于kdev的宿主目录

14.257"/home/kdev"

15.ftp> cd /usr/src/                                  //可切换到其他目录

16.250 Directory successfully changed.

17.ftp> ls                                          //查看其他目录的资源

18.227 Entering Passive Mode(192,168,4,4,129,159)

19.150 Here comes the directory listing.

20.drwxr-xr-x    20        0            4096 Oct 01  2009 debug

21.drwxr-xr-x    20        0            4096 Oct 01  2009 kernels

22.drwxr-xr-x    70        0            4096 Nov 01  2012 vmware-tools-distrib

23.226 Directory send OK.

根据实验要求,需要限制系统用户访问其他目录,只要修改vsftpd.conf配置文件,添加一行配置chroot_local_user=YES并重启服务即可:

1.  [iyunv@localhost ~]# vim /etc/vsftpd/vsftpd.conf

2.  ....

3.  local_enable=YES

4.  chroot_local_user=YES                                  //禁锢系统用户

5.  write_enable=YES

6.  local_umask=022

7.  [iyunv@localhost ~]# service vsftpd restart      //重启vsftpd服务

8.  关闭 vsftpd:                                  [确定]

9.  为 vsftpd 启动 vsftpd:                       [确定]

再次从客户机以kdev用户登录,会发现宿主目录已经变成FTP根,无法再切换到其他路径下去:

1.  [iyunv@svr6 ~]# ftp 192.168.4.5

2.  Connected to 192.168.4.5.

3.  220(vsFTPd 2.0.5)

4.  530 Please login with USER and PASS.

5.  530 Please login with USER and PASS.

6.  KERBEROS_V4 rejected as an authentication type

7.  Name(192.168.4.5:root): kdev                      //以用户kdev登录

8.  331 Please specify the password.

9.  Password:                                          //验证用户kdev的密码

10.230 Login successful.

11.Remote system type is UNIX.

12.Using binary mode to transfer files.

13.ftp> pwd

14.257"/"                                          //登入位置已变为“/”,

15.                                                  //实际是kdev的宿主目录

16.ftp> ls

17.227 Entering Passive Mode(192,168,4,4,120,249)

18.150 Here comes the directory listing.

19.226 Directory send OK.

4.限制并发访问数、传输速度。

1)修改vsftpd服务配置,添加并发访问限制、传输速度限制。

限制最大连接数的配置项为max_clients,限制每IP地址最大并发数的配置项为max_per_ip;限制FTP传输速度的配置项为anon_max_rate、local_max_rate,分别对应匿名访问、系统用户访问,单位为字节/秒。

相关配置操作及内容如下所示:

1.  [iyunv@localhost ~]# vim /etc/vsftpd/vsftpd.conf

2.  ....

3.  max_clients=100                                  //最大并发连接数

4.  max_per_ip=5                                      //每IP最大并发连接数

5.  anon_max_rate=100000                          //匿名访问限制为100KB/s

6.  local_max_rate=200000                      //系统用户访问时限速为200KB/s

7.  [iyunv@localhost ~]# service vsftpd restart

8.  关闭 vsftpd:                          [确定]

9.  为 vsftpd 启动 vsftpd:               [确定]

将前面创建的下载测试文件/var/ftp/tdd.file复制到用户kdev的宿主目录,以便在下一步测试下载速度:

1.  [iyunv@localhost ~]# cp /var/ftp/tdd.file /home/kdev/

2.  [iyunv@localhost ~]# ls -lh /home/kdev/tdd.file

3.  -rw-r--r--1 root root 20M 09-2214:58/home/kdev/tdd.file

2)验证FTP下载速度。


1.  [iyunv@svr6 ~]# wget ftp://192.168.4.5/tdd.file

2.  --2013-09-2215:02:17--  ftp://192.168.4.5/tdd.file

3.             => `tdd.file.1'

4.  Connecting to 192.168.4.5:21... 已连接。

5.  正在以 anonymous 登录 ... 登录成功!

6.  ==> SYST ... 完成。    ==> PWD ... 完成。

7.  ==> TYPE I ... 完成。  ==> 不需要 CWD。

8.  ==> SIZE tdd.file ... 20971520

9.  ==> PASV ... 完成。    ==> RETR tdd.file ... 完成。

10.长度:20971520 (20M)

11.

12.10% [===>                                   ] 2,244,608   98.5K/s  eta 3m 8s

按组合键Ctrl+c终止下载,继续下一项测试——指定以系统用户名kdev和密码1234567访问,并下载文件(/home/kdev/tdd.file),速度稳定后保持在200KB左右:

1.  [iyunv@svr6 ~]# wget ftp://kdev:1234567@192.168.4.5/tdd.file

2.  --2013-09-2215:05:38--  ftp://kdev:*password*@192.168.4.5/tdd.file

3.             => `tdd.file.2'

4.  Connecting to 192.168.4.5:21... 已连接。

5.  正在以 kdev 登录 ... 登录成功!

6.  ==> SYST ... 完成。    ==> PWD ... 完成。

7.  ==> TYPE I ... 完成。  ==> 不需要 CWD。

8.  ==> SIZE tdd.file ... 20971520

9.  ==> PASV ... 完成。    ==> RETR tdd.file ... 完成。

10.长度:20971520 (20M)

11.

12. 5% [=>                                     ] 1,186,888    197K/s  eta 98s

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23801-1-1.html 上篇帖子: ubuntu12.04安装vsftp 下篇帖子: linux下搭建FTP服务器 服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表