ftp服务器的简单搭建流程

搭建ftp服务器时一般使用本地用户来访问ftp,虽然可以限制用户权限,但安全性还是没有使用虚拟用户登录高,下面通过建立虚拟用户来搭建FTP服务器。

FTP用户登陆一般分为三种类型

匿名用户

不需要登陆即可直接使用FTP传输文件,匿名访问模式的FTP根目录为/var/ftp

本地用户

本地用户即服务器端(除root外)的普通用户

虚拟用户

在vsftpd服务器中,使用虚拟用户的主要好处在于,可以将登录的账号与系统登录的账号区分开来,用户名,密码都不相同,从而进一步增强了FTP服务器的安全性。另外虚拟用户都具有独立的配置选项。可以灵活的控制对ftp服务器的访问。可以控制用户读的权限,写权限,下载,上传的权限

0x00 FTP的安装

1).查询vsftpd是否安装

# rpm -qc vsftpd

2).安装vsftpd

# yum -y install vsftpd

3).安装vsftpd虚拟用户配置依赖包

# yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI

4).启动vsftpd

# systemctl start vsftpd

5).设置开机启动

# systemctl enable vsftpd

0x01 新建系统用户

1).添加用户vsuser

设置登录shell为/bin/false,使该用户不能登录
# useradd vsuser -d /home/vsftp -s /bin/false

2).修改目录的所有权

递归将vsftp目录下的所有者修改为vsuser
# chown vsuser:vsuser -R /home/vsftp

0x02 设置vsftpd服务器的配置文件

1).备份文件

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

2).编辑配置内容

# vi cp /etc/vsftpd/vsftpd.conf

    #禁止匿名访问
  anonymous_enable=NO
  anon_upload_enable=NO
  anon_mkdir_write_enable=YES

    chown_uploads=NO     //不允许用户修改上传文件的属主

    async_abor_enable=YES               //允许执行特殊的ftp命令
    ascii_upload_enable=YES              //允许使用ascii码方式上传文件
    ascii_download_enable=YES            //允许使用ascii码方式下载文件
    ftpd_banner=Welcome to FTP service.

输入以下命令添加一些属性到配置文件:

# echo -e "use_localtime=YES\nlisten_port=21\nchroot_local_user=YES\nidle_session_timeout=300

\ndata_connection_timeout=1\nguest_enable=YES\nguest_username=vsuser #此处要和刚刚创建的用户名一致

\nuser_config_dir=/etc/vsftpd/vconf\nvirtual_use_local_privs=YES

\npasv_min_port=10060\npasv_max_port=10090

\naccept_timeout=5\nconnect_timeout=1" >> /etc/vsftpd/vsftpd.conf

下面是一些属性的解释:

chroot_list_enable=NO           // 不允许用户离开自己的主目录
  chroot_list_file=/etc/vsftpd.chroot_list    // 虚拟用户列表,每行一个用户名
  local_enable=YES               // 允许本地用户访问
  write_enable=YES              // 允许本地用户写入
  local_umask=022              // 上传后的文件的默认掩码
  chroot_local_user=YES            // 禁止本地用户离开自己的主目录
  pam_service_name=vsftpd.vu        // 权限验证需要的加密文件
  guest_enable=YES              // 开启虚拟用户功能
  guest_username=vsuser           // 虚拟用户的宿主目录,即虚拟用户映射为本地vsuser用户
  virtual_use_local_privs=YES          // 用户登录后操作目录和本地用户权限一样
  user_config_dir=/etc/vsftpd/vconf     // 虚拟用户主目录设置文件
  allow_writeable_chroot=YES        // 允许写入用户主目录,这条特别重要

0x03 虚拟用户个人vsftp服务器的配置文件

1).创建文件夹

# mkdir /etc/vsftpd/vconf

2).创建虚拟用户配置文件

# touch /etc/vsftpd/vconf/vsuser1
# mkdir -p /home/vsftp/vsuser1/http/mydic

0x04 虚拟用户名单文件

# touch /etc/vsftpd/virtusers

编辑虚拟用户名单内容(奇数行是账号,偶数行是密码):

#vi /etc/vsftpd/virtusers
vsuser1
123456
#保存退出

0x05 设置权限

1).主目录不能有写的权限所以ftp为755,主目录下面的子目录设置为777权限

# chmod -R 755 /home/vsftp/vsuser1/http
# chmod -R 777 /home/vsftp/vsuser1/http/mydic

2).编辑虚拟用户配置文件

#文件名要与虚拟用户名相同
# vi /etc/vsftpd/vconf/vsuser1

local_root=/home/vsftp/vsuser1/http/  #设置FTP账号根目录     
write_enable=YES     
anon_world_readable_only=NO     
anon_upload_enable=YES     
anon_mkdir_write_enable=YES     
anon_other_write_enable=YES         #允许删除和重名名
#保存退出

0x06 生成虚拟用户数据文件

# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

0x07 设定PAM验证文件,并指定对虚拟用户数据库文件进行读取

# chmod 600 /etc/vsftpd/virtusers.db

在/etc/pam.d/vsftpd文件的头部添加一下信息(只能在头部添加)

1).备份文件

# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

2).添加信息

# vi /etc/pam.d/vsftpd

将所有配置都注释掉,加入下面内容

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

0x08 防火墙配置文件

1).关闭firewall

停止firewall

# systemctl stop firewalld.service

禁止firewall开机启动

# systemctl disable firewalld.service

安装iptables

# yum -y install iptables
# yum -y update iptables

2).添加防火墙规则

# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT
#保存退出

3).重启防火墙

# systemctl restart iptables.service

4).设置开机启动

# systemctl enable iptables.service

0x09 关闭SELINUX

# vi /etc/selinux/config 
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
#保存退出

执行命令使配置生效

# setenforce 0

0X10 重启vsftpd服务器

# systemctl restart vsftpd.service

0x11 安装ftp客户端

# rpm -Uvh http://mirror.centos.org/centos/6/os/x86_64/Packages/ftp-0.17-54.el6.x86_64.rpm

0x12 FTP数字代码的意义

110 重新启动标记应答
120 服务在多久时间内 ready 
125 数据链路端口开启,准备传送 
150 文件状态正常,开启数据连接端口
200 命令执行成功 
202 命令执行失败
211 系统状态或是系统求助响应 
212 目录的状态 
213 文件的状态
214 求助的讯息 
215 名称系统类型 
220 新的联机服务 ready 
221 服务的控制连接端口关闭,可以注销 
225 数据连结开启,但无传输动作
226 关闭数据连接端口,请求的文件操作成功 
227 进入 passive mode 
230 使用者登入
250 请求的文件操作完成
257 显示目前的路径名称
331 用户名称正确,需要密码
332 登入时需要账号信息
350 请求的操作需要进一部的命令
421 无法提供服务,关闭控制连结 
425 无法开启数据链路
426 关闭联机,终止传输
450 请求的操作未执行 
451 命令终止 : 有本地的错误 
452 未执行命令 : 磁盘空间不足 
500 格式错误,无法识别命令 
501 参数语法错误
502 命令执行失败
503 命令顺序错误 
504 命令所接的参数不正确 
530 未登入
532 储存文件需要账户登入
550 未执行请求的操作
551 请求的命令终止,类型未知
552 请求的文件终止,储存位溢出
553 未执行请求的的命令,名称不正确

0x13 测试ftp

本地测试报500错误

500 OOPS: vsftpd:  refusing to run with writable root inside chroot()

解决方法

# vi /etc/vsftpd/vsftpd.conf

添加

allow_writeable_chroot=YES

前面说了这一条特别重要,但是没有添加,所以才出了这样的错

重启vsftpd服务

systemctl restart vsftpd.service

再次登录,成功

出现数字代码229,这是被动模式的问题,登录后输入passive回车,然后再ls

其他主机无法连接ftp

解决方法

关闭防火墙
# systemctl stop iptables.service

0x14 ftp常用命令

ls                                    显示服务器上的目录
ls [remote-dir][local-file]          显示远程目录remote-dir,并存入本地文件local-file 
get remote-file [local-file]           从服务器下载指定文件到客户端
mget remote-files                   下载多个远程文件(mget命令允许用通配符下载多个文件)
put local-file [remote-file]          从客户端上传指定文件到服务器 
mput local-file                      将多个文件上传至远程主机(mput命令允许用通配符上传多个文件) 
open                                   连接FTP服务器 
mput local-file                        将多个文件上传至远程主机(mput命令允许用通配符上传多个文件) 
mdelete [remote-file]                  删除远程主机文件
close                                中断与远程服务器的ftp会话(与open对应)
mkdir dir-name                         在远程主机中创建目录 
open host[port]                        建立指定的ftp服务器连接,可指定连接端口
cd directory                          改变服务器的工作目录 
rename [from][to]                      更改远程主机的文件名
bye|quit|exit                        退出FTP命令状态
reget remote-file [local-file]         类似于get,但若local-file存在,则从上次传输中断处续传   
delete remote-file                     删除远程主机文件
user user-name [password][account]  向远程主机表明自己的身份,需要密码时,必须输入密码 

0x15 添加只有下载权限的新虚拟用户

1.创建虚拟用户的配置文件

#文件名要与虚拟用户名相同
# touch /etc/vsftpd/vconf/vsuser2
# mkdir -p /home/vsftp/vsuser2/http/mydic

2.修改权限

# chmod -R 755 /home/vsftp/vsuser2/http
# chmod -R 777 /home/vsftp/vsuser2/http/mydic

3.添加虚拟用户名单内容(奇数行是账号,偶数行是密码)

# vi /etc/vsftpd/virtusers
vsuser2
123456  #保存退出

4.编辑虚拟用户配置文件

# vi /etc/vsftpd/vconf/vsuser2

local_root=/home/vsftp/vsuser2/http/  #设置FTP账号根目录

5.生成虚拟用户数据文件

# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
# chmod 600 /etc/vsftpd/virtusers.db

6.重启服务器

# systemctl restart vsftpd.service

0x16 总结

应该专门创建一个根目录来作为FTP的文件目录,/home目录作为敏感目录,不应该在这个目录下建立和FTP有关的文件。在进入FTP后,传输文件可能会丢一些东西,因为是传的文本,所以先输入bin命令回车,这时候传的文件就会以二进制的方式传输,就不会找出文件数据丢失的情况了。

-------------本文结束感谢您的阅读-------------

本文标题:ftp服务器的简单搭建流程

文章作者:Peithon

发布时间:2018年05月21日 - 18:05

最后更新:2018年10月13日 - 08:10

原始链接:https://peithon.github.io/2018/05/21/ftp-setup/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。