第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,阿里云DNS:223.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.