FTP 服务搭建

FTP 服务搭建

最近一直偷懒,没有上传博客,最近工做中正好要搭建FTP,来写个博客吧。
同志还需努力啊,每天犯懒之后只能去吃土了。linux

首先介绍一下个人实验环境:CentOS6.7,内核2.6

[root@CentOS-6 ~]# cat /etc/redhat-release 
CentOS release 6.7 (Final)
[root@CentOS-6 ~]# uname -a
Linux CentOS-6 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

实验中我是关闭了selinux和iptables

[root@CentOS-6 ~]# getenforce
Disabled
[root@CentOS-6 ~]# chkconfig --list iptables
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off
如何关闭selinux,iptables
  • selinux
    编辑 /etc/selinux/config 文件,调整参数 SELINUX=disabled
  • iptables
    执行 chkonfig iptables off,查看命令 chkconfig --list iptables

安装 ftp 服务

安装是很简单的,直接执行 yum 命令,轻松又愉快。
养成好习惯,安装完成后检查一下,是否安装成功。shell

yum -y install vsftpd
rpm -qa | grep vsftpd
vsftpd-2.2.2-24.el6.x86_64

用户在登陆 ftp 服务器时用户名和密码都是使用明文传送,尤其的不安全,因此下面实验的要求是vim

1.禁止匿名用户登陆(anonymous)
2.禁止系统用户登陆
3.启用虚拟用户登陆,并指定虚拟用户登陆后的家目录(管理员指定的家目录)安全

配置 ftp 服务

/etc/vsftpd/vsftpd.conf 是 ftp 的主配置文件bash

上面已经安装了 ftp 服务,启动 ftp 并查看其 21 端口是否正常工做服务器

[root@CentOS-6 ~]# /etc/init.d/vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
[root@CentOS-6 ~]# netstat -tlunp | grep vsf
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1890/vsftpd

修改主配置文件,禁止匿名用户登陆tcp

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO

建立虚拟用户口令文件
能够随便本身起个名字,我这里就叫 vuser.txt
这个文件中就是须要登陆的虚拟用户名和密码
格式:
用户1
密码
用户2
密码
后面会对这个文件进行加密处理,因此不用担忧安全问题ide

cat /etc/vsftpd/vuser.txt 
test1
1234
test2
1234

安装口令认证测试

yum -y install db4-utils

生成登陆验证的二进制文件ui

db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db

开始啰嗦:咳咳
下面要实现的是不容许系统用户登陆 ftp 服务,为何禁止上面已经说了,由于 ftp 的用户名密码都是明文传送,很容易就被截获,非常不安全。
要禁止系统用户登陆须要将 /etc/pam.d/vsftpd 文件中的内容所有注释,为啥?
其实具体我说不明白,只是系统用户登陆 ftp 服务器都要通过这个文件,如今内容都被注释了,天然没法登录了
注意:在主配置文件中(/etc/vsftpd/vsftpd.conf)文件中有一条选项,local_enable=YES(默认就是YES),大不可将其改成NO,由于即便是经过虚拟用户登陆,咱们下面的操做也是要建立一个 nologin 的系统用户,在将写入 vuser.txt 文件中的用户映射到这个系统用户上,从而实现虚拟用户登陆
啰嗦完毕

编辑 /etc/pam.d/vsftpd 文件,注释全部内容,可使用末行模式,开心还简单
末行模式的命令哈

:2,8s/^/#/g

光是注释还不够,还须要在 /etc/pam.d/vsftpd 文件中追加两行内容

auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

创建本地映射用户并设置宿主目录权限(全部虚拟用户映射成为 vuser 用户)
要指定用户的bash shell为 /sbin/nologin
宿主目录的权限定义为 755

useradd -d /home/vftproot -s /sbin/nologin vuser
chmod 755 /home/vftproot/

在 /etc/vsftpd/vsftpd.conf 文件中添加内容

# 开启虚拟用户
guest_enable=YES
# FTP虚拟用户对应的系统用户
guest_username=vuser
# PAM认证文件(默认存在)
pam_service_name=vsftpd

到此为止 ftp 服务器就算是搭建完成了,在宿主上测试一下
介绍一下个人宿主机:win10
ftp 服务器地址:10.1.41.168
cmd 下 ftp 10.1.41.168
test1,test2用户能够登陆,下载文件和目录(目录的下载在cmd命令行中没法实现,可使用filezilla软件)
可是只能下载不能上传

上传报错

ftp> put ftp.txt
200 PORT command successful. Consider using PASV.
550 Permission denied.

下载成功

ftp> get zhao.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for zhao.txt (0 bytes).
226 Transfer complete.

能够经过修改主配置文件 /etc/vsftpd/vsftpd.conf 文件,容许虚拟用户进行上传下载

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

上面在命令是在宿主机上操做,若是执行命令时 cmd 的路径在 C:\Users\Administrator> 那么默认就下载到了这个目录
当要增长虚拟用户时,须要从新修改 /etc/vsftpd/vuser.txt 文件,并从新生成登陆的二进制文件。

---------------------------------------------------------华丽的分割线----------------------------------------------------------

下面来个更帅的配置,指定用户登陆后的家目录,而且不须要修改主配置文件

编辑 /etc/vsftpd/vsftpd.conf 文件,配置和上面同样,可是须要多加一条

user_config_dir=/etc/vsftpd/vusers_dir

建立上面的 vusers_dir 目录,这个目录存放的就是每一个虚拟用户的登陆文件了

mkdir /etc/vsftpd/vusers_dir

为虚拟用户创建配置文件

vim /etc/vsftpd/vusers_dir/test2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/tmp/vtest2

建立用户登陆后的上传下载文件的路径

mkdir /tmp/vtest2

更改 vcanglaoshi 这个目录的属主,vtest2 这个目录要知足 ftp 的上传权限和目录自己的读写执行权限
系统中全部虚拟用户都是 vuser,并非 test2
chown vuser /tmp/vtest2/

最后一个小总:
上面环境中有两个用户,分别是 test1 和 test2 用户,
test1 登陆后的目录是默认的 /home/vftproot/ 目录
test2 登陆后是分割线下面咱们配置的 /tmp/vtest2 目录

环境完成,OK。