FTP 服务搭建
最近一直偷懒,没有上传博客,最近工作中正好要搭建FTP,来写个博客吧。
同志还需努力啊,天天犯懒以后只能去吃土了。
首先介绍一下我的实验环境:CentOS6.7,内核2.6
[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[[email protected] ~]# 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
[[email protected] ~]# getenforce
Disabled
[[email protected] ~]# 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 命令,轻松又愉快。
养成好习惯,安装完成后检查一下,是否安装成功。
yum -y install vsftpd
rpm -qa | grep vsftpd
vsftpd-2.2.2-24.el6.x86_64
用户在登录 ftp 服务器时用户名和密码都是使用明文传送,尤为的不安全,所以下面实验的要求是
1.禁止匿名用户登录(anonymous)
2.禁止系统用户登录
3.启用虚拟用户登录,并指定虚拟用户登录后的家目录(管理员指定的家目录)
配置 ftp 服务
/etc/vsftpd/vsftpd.conf 是 ftp 的主配置文件
上面已经安装了 ftp 服务,启动 ftp 并查看其 21 端口是否正常工作
[[email protected] ~]# /etc/init.d/vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[[email protected] ~]# netstat -tlunp | grep vsf
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1890/vsftpd
修改主配置文件,禁止匿名用户登录
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
创建虚拟用户口令文件
可以随便自己起个名字,我这里就叫 vuser.txt
这个文件中就是需要登录的虚拟用户名和密码
格式:
用户1
密码
用户2
密码
后面会对这个文件进行加密处理,所以不用担心安全问题
cat /etc/vsftpd/vuser.txt
test1
1234
test2
1234
安装口令认证
yum -y install db4-utils
生成登录验证的二进制文件
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。
原文地址:http://blog.51cto.com/aby028/2071352