wangbin
  • wangbin
  • 2018-09-16
  • IT

centos7搭建ftp服务

一. 简介

公司安卓的测试包下载还是使用的ftp,搭个玩玩。

二. 安装

install_ftp.sh

yum -y install vsftpd

三. 命令

# 启动
systemctl start vsftpd.service

# 开机启动
systemctl enable vsftpd.service

# 重启
systemctl restart vsftpd.service

四. 配置/etc/vsftpd.conf

配置文件是/etc/vsftpd.conf,修改点

# 是否允许匿名FTP访问
anonymous_enable=NO

# 允许本地用户访问,虚拟用户也是本地用户
local_enable=YES

# 允许所有用户都上传文件
write_enable=YES

# vsftpd的默认umask是077,022-其他用户可读
local_umask=022

# 不允许匿名用户上传
anon_upload_enable=NO

# 不允许匿名用户上传
anon_mkdir_write_enable=NO

# 开启目录标语功能
dirmessage_enable=YES

# 开启日志记录功能
xferlog_enable=YES

# 端口20进行数据连接
connect_from_port_20=YES

# 不允许上传文件更改宿主
chown_uploads=NO

# 支持ASCII模式的上传和下载功能
ascii_upload_enable=YES
ascii_download_enable=YES

# 用户连接后看到的欢迎信息
ftpd_banner=Welcome to siyou325 FTP service

# 文件最后添加
# PAM服务下Vsftpd的验证配置文件名
# PAM验证将参考/etc/pam.d/下的vsftpd文件配置
pam_service_name=vsftpd
# userlist_file中的用户将不得使用FTP
userlist_enable=YES
# 支持TCP Wrappers
tcp_wrappers=YES

# 虚拟用户
# 启用虚拟用户功能
guest_enable=YES
# 指定虚拟用户的宿主用户
guest_username=vsftpd
# 设定虚拟用户的权限符合他们的宿主用户
virtual_use_local_privs=YES
# 设定虚拟用户个人Vsftp的配置文件存放路径
user_config_dir=/etc/vsftpd/vconf

# 开启被动模式
pasv_enable=YES 
# 随机最小端口
pasv_min_port=40000
# 随机最大端口
pasv_max_port=40010

# 自定义
use_localtime=YES
listen_port=21
idle_session_timeout=300
data_connection_timeout=1
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES
  1. 真实用户和虚拟用户

    真实用户:

    系统用户,在/etc/passwd中

    虚拟用户:

    是ftp服务器的专有用户,只能登录ftp,而不能登录系统,不是系统的用户,这样比较安全

    所以我们启用虚拟用户

  2. 创建guest_username对应的用户vsftpd,需要有用户的主目录,不能登陆shell

    useradd vsftpd -s /sbin/nologin
  3. 主动模式和被动模式

    主动模式(PORT)

    ftp客户端连接到ftp服务器的21端口,发送用户名和密码登录,登录成功后要list列
    表或者读取数据时,客户端随机开放一个端口(1024以上),发送PORT命令到ftp服
    务器,告诉服务器客户端采用主动模式并开放端口;ftp服务器收到PORT主动模式命令
    和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。

    被动模式(PASV)

     PASV是Passive的缩写
     ftp客户端连接到ftp服务器的21端口,发送用户名和密码登录,登录成功后要list
     列表或者读取数据时,发送PASV命令到ftp服务器,服务器在本地随机开放一个端口
     (1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口
     进行数据传输。

    主动模式和被动模式都需要通过服务端21端口登陆。

    主动模式需要客户端开放1024以上端口给服务器,被动模式则是服务器开放1024以上端口给客户端。

五:配置PAM模块

/etc/pam.d/vsftpd

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
# auth       required   pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
# auth       required   pam_shells.so
# auth       include    password-auth
# account    include    password-auth
session    required     pam_loginuid.so
session    include  password-auth

# 自定义
# 如果系统为32位,lib64改为lib
auth    sufficient  /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
account sufficient  /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 

六:添加用户

这里以添加siyou325为例

  1. /etc/vsftpd/virtusers中添加一行用户名siyou325,添加一行密码pwdxxx

    /etc/vsftpd/virtusers

    siyou325
    pwdxxx

    然后执行

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

    用户就添加好啦

  2. 查看/etc/vsftpd.conf中user_config_dir的配置,此处为/etc/vsftpd/vconf

  3. 在/etc/vsftpd/vconf下新建siyou325的配置文件,文件名称也是siyou325,内容如下

    /etc/vsftpd/vconf/siyou325

    # 指定虚拟用户的具体主路径
    local_root=/vps/hosts/ftp/siyou325/
    # 不允许匿名用户访问
    anonymous_enable=NO
    # 允许写操作
    write_enable=YES
    anon_world_readable_only=NO
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    anon_other_write_enable=NO
  4. 创建该账号对应的文件目录,并设置用户为vsftpd

    mkdir -p /vps/hosts/ftp/siyou325/
    chown -R vsftpd:vsftpd /vps/hosts/ftp/

七. 防火墙设置

firewalld开放ftp端口

# 开放21端口
firewall-cmd --zone=public --add-service=ftp --permanent
# 开放随机端口40000-40010
firewall-cmd --zone=public --add-port=40000-40010/tcp --permanent
# 加载
firewall-cmd --reload 

PS:iptables配合ip_conntrack_ftp和ip_nat_ftp内核模块可以不主动开放随机端口40000-40010,不过我用的是firewalld,不太会操作,后面有空转iptables,感觉比firewalld强大的多。

八. 验证

好了,启动下

systemctl restart vsftpd.service

使用ftp客户端登陆试试,是否可以正常使用。

九. 遇到的问题

  1. vsftpd 500 OOPS: cannot change directory:/home/vsftpd

    之前创建vsftpd使用的命令是
        useradd vsftpd -M -s /sbin/nologin
    没有创建用户的主目录/home/vsftpd,所以报了这个错,去掉-M
        useradd vsftpd -s /sbin/nologin
    就好了
  2. 200 Switching to Binary mode.

    227 Entering Passive Mode (89,208,241,153,156,67).连接超时

    被动模式需要客户端可以访问服务端1024以上的端口,服务端开放配置文件中设置的端口就可以了。

十. 结尾

大家也试试吧

参考:

  1. https://blog.csdn.net/zhangpfly/article/details/73160346

  2. https://blog.csdn.net/longxibendi/article/details/5807010

  3. https://blog.csdn.net/xujin12368/article/details/80915855