第1章 centos 6.8搭建FTP服务详解

1.1搭建环境:

[root@oldboy ~]# cat /etc/redhat-release

CentOS release 6.8 (Final)

[root@oldboy ~]# uname -r

2.6.32-642.el6.x86_64

[root@oldboy ~]# uname -m

x86_64

[root@oldboy ~]#

1.2yum 安装FTP软件:

[root@oldboy ~]# rpm -qa vsftpd    #查看系统是否已经安装了该软件

[root@oldboy ~]# yum install -y vsftpd  #安装FTP软件命令

Installed:

  vsftpd.x86_640:2.2.2-21.el6     #结尾有这个提示说明安装成功。  

 

Complete!

[root@oldboy ~]#

1.3设置开机自启动:

[root@oldboy ~]# chkconfig --list vsftpd    #默认服务是关闭的,需要手动设置下次开机自启动

vsftpd         0:off   1:off   2:off  3:off   4:off   5:off  6:off

[root@oldboy ~]#

[root@oldboy ~]# chkconfig vsftpd on    #设置下次开机自启动

[root@oldboy ~]# chkconfig --list vsftpd    #查看是否设置成功

vsftpd         0:off   1:off   2:on   3:on    4:on    5:on   6:off

[root@oldboy ~]#

注意!安装时发现这个错误:

Loaded plugins:fastestmirror, refresh-packagekit, security

Loading mirror speedsfrom cached hostfile

Could not retrievemirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=oserror was

14: PYCURL ERROR 6 -"Couldn't resolve host 'mirrorlist.centos.org'"

Error: Cannot find avalid baseurl for repo: base

是因为缺少DNS解析,解决如下:到/etc目录下配置resolv.conf加入nameserver IP(添加DNS服务器的IP,阿里云DNS223.5.5.5

也可以在nat模式的DNS指向网关就行了


1.4先关闭防火墙

/etc/init.d/iptables stop

chkconfig iptables off

也可以不关防火墙,配置以下设置

打开/etc/sysconfig/iptables文件

vi /etc/sysconfig/iptables

在REJECT行之前添加如下代码

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

保存和关闭文件,重启防火墙

service iptables start

1.5配置FTP的主配置文件,默认的主配置文件是/etc/vsftpd/vsftpd.conf,(先备份!!!!)

 97#chroot_list_enable=YES     #如果希望用户登录后不能切换到自己目录以外的其它目录,需要设置该项

 98 #(default follows)

 99#chroot_list_file=/etc/vsftpd/chroot_list   #设置指定登录的用户

将97和99的#去掉

可以使用sed替换的方法:

[root@oldboy vsftpd]# sed  -i 's@#chroot_list_enable=YES@chroot_list_enable=YES@g' vsftpd.conf

[root@oldboy vsftpd]# grep enable vsftpd.conf

chroot_list_enable=YES

[root@oldboy vsftpd]#sed -i 's@#chroot_list_file=/etc/vsftpd/chroot_list@chroot_list_file=/etc/vsftpd/chroot_list@g'vsftpd.conf

[root@oldboy vsftpd]# grep  list_file vsftpd.conf

chroot_list_file=/etc/vsftpd/chroot_list

1.6添加用户

增加用户ftp001,指向目录/home/ftp001,禁止登录SSH权限

[root@oldboy vsftpd]# useradd -d /home/ftp001 -gftp  -s /sbin/nologin ftp001   #该用户是vftp的程序运行的用户。

[root@oldboy vsftpd]# id ftp001

uid=810(ftp001) gid=50(ftp) groups=50(ftp)

[root@oldboy vsftpd]#

 

设置密码:

 passwdftp001  123456

 

创建文件chroot_list:

[root@oldboy vsftpd]# vi /etc/vsftpd/chroot_list

 

oldboy

test    #添加用户

 

[root@oldboy vsftpd]# /etc/init.d/vsftpd start  #重新启动FTP服务

Starting vsftpd for vsftpd:                                [  OK  ]

测试

windows中输入:ftp://10.0.0.130 进行测试

有结果但是不能创建和添加?

解决办法:

1、改文件/var/ftp/pub/ 目录其他用户加权限w。

[root@oldboy ftp]# chmod o+w pub/

2、编辑配置文件vsftpd.conf:

修改以下几项:(有注释的去掉注释)

local_enable=yes    #是否允许本地用户登录FTP服务器,默认是允许

write_enable=yes    #是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许

local_umask=022     #设置本地用户的文件生成掩码为022,默认是077

修改配置文件即可vsftpd.conf,确定有以下几行,没有自己添加进去就可以了.

anonymous_enable=yes    #是否允许anonymous登录FTP服务器,默认是允许的.

anon_upload_enable=yes  #是否允许匿名用户上传文件。只有在write_enable设置为

YES时,该配置项才有效。

anon_mkdir_write_enable=yes     #是否允许匿名用户创建目录。只有在write_enable设置为    YES时有效。且匿名用户对上层目录有写入的权限。默认为NO。

anon_umask=022 

 

此时匿名用户能够上传文件了。

 

1.7其他服务器测试(linux中):

[root@oldboy ~]# ftp 10.0.0.130

Connected to 10.0.0.130 (10.0.0.130).

220 (vsFTPd 2.2.2)

Name (10.0.0.130:root): oldboy

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 (10,0,0,130,177,153).

150 Here comes the directory listing.

-rw-r--r--   1 500      501             0 Sep 06 08:15

 

下载:

mget  文件    #从远程服务器上下载文件到当前系统的目录    

格式:mget [remote-files]

切换到要下载的目录,

ftp> mget person.txt

mget person.txt? y

227 Entering Passive Mode (10,0,0,130,103,230).

150 Opening BINARY mode data connection forperson.txt (71 bytes).

226 Transfer complete.

71 bytes received in 5.1e-05 secs (1392.16Kbytes/sec)

ftp>

[root@oldboy test]# ls

person.txt

 

上传:

mput    #上传文件到FTP服务器

格式:mput local-files

将本地主机中一批文件传送至远端主机.

注意!将要上传的文件拷贝到一个目录中,并且在该目录中连接FTP服务(ftp:10.0.0.130)

然后使用命令

ftp> mput *.* ./

mput num.txt? y

227 Entering Passive Mode (10,0,0,130,118,152).

150 Ok to send data.

226 Transfer complete.

40 bytes sent in 0.000267 secs (149.81 Kbytes/sec)

mput pass.txt? y

227 Entering Passive Mode (10,0,0,130,82,252).

150 Ok to send data.

226 Transfer complete.

126 bytes sent in 0.000177 secs (711.86 Kbytes/sec)

mput ./? y

./: not a plain file.

ftp>

ftp> ls

-rw-r--r--   1 500      501           53 Sep 10 02:14 G.bak

-rw-r--r--   1 500      501            40 Sep 10 02:17 num.txt

--wx------   1 500      501            18 Sep 07 07:45 oldboy.sh

d-wx------   2 500      501          4096 Sep 07 07:44 oldboydir

-rw-r--r--   1 500      501          126 Sep 10 02:17 pass.txt

-rw-r--r--   1 500      501            71 Sep 10 02:14 person.txt

226 Directory send OK.