FTP服务是最常用的跨平台文件共享服务之一
============= 完美的分割线 ===============
0.FTP两种模式的区分
1)PORTFTP和PASVFTP,PORTFTP是一般形式的FTP。
2)这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp-data)的方式。
3)PORTFTP由FTP服务器指定数据传输所使用的端口,默认值为20。
4)PASVFTP由FTP客户端决定数据传输的端口。PASVFTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数据传输端口更为方便一些。
1.安装FTP服务端
1.1.环境准备
# 检查系统环境,如果系统版本较低,建议升级内核等
# 在CentOS6.x和7.x版本安装方法基本相同
uname -a cat /etc/redhat-release # yum update -y # 如果是新服务器或者是ftp独占可以升级,其他看情况
1.2.安装vsftpd
# 包括服务端和客户端
yum install vsftpd ftp -y
1.3.启动vsftpd服务并配置开机自启动
/etc/init.d/vsftpd start netstat -anptl|grep vsftpd chkconfig vsftpd on chkconfig --list vsftpd
1.4.配置查看ftp相关日志
# 从xferlog可以查看到用户上传下载等的操作记录,删除不会显示
vim /etc/logrotate.d/vsftpd
/var/log/vsftpd.log { # ftpd doesn't handle SIGHUP properly nocompress missingok } /var/log/xferlog { # ftpd doesn't handle SIGHUP properly nocompress missingok }
tail -f /var/log/xferlog
2.配置匿名方式访问FTP服务端
2.1.安装好vsftpd服务,默认为匿名访问
1)可以直接输入IP端口,可以打开ftp服务器
2)允许匿名用户登录,宿主目录为/var/ftp,不能离开,下载目录为/var/ftp/pub,且只能下载,不能上传
3)允许本地用户登录,且可离开主目录,本地用户允许上传/下载
4)写在文件/etc/vsftpd/ftpusers中的本地用户禁止登录
5)服务器使用独占方式启动,且无限制连接数
3.配置虚拟用户认证的FTP服务端
3.1.修改vsftpd.conf 文件
cd /etc/vsftpd/
vim vsftpd.conf
# 修改配置文件,确认以下选项
anonymous_enable=NO # 修改,禁止匿名用户登录 local_enable=YES # 默认启用,允许本地用户登录,虚拟用户需要映射到本地用户才可以使用 write_enable=YES # 默认启用,本地用户开放写权限 #local_umask=022 # 注释掉,本地用户创建的文件的权限反码022,创建的文件为644 userlist_enable=YES # 默认启用,默认为允许user_list中的用户进行访问 # userlist_deny=yes # 也可以用这个,默认拒绝user_list中的用户访问FTP服务器,保留一种即可 userlist_file=/etc/vsftpd/user_list chroot_local_user=YES # 默认启用,将本地用户锁定在自家目录中 # made for virtual user guest_enable=YES # 增加,启用虚拟用户模式 guest_username=ftpvuser # 增加,配置虚拟用户映射到的本地用户名 pam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虚拟用户的认证方式 user_config_dir=/etc/vsftpd/vuser.d # 增加,虚拟用户的配置文件目录 anon_umask=022 # 增加,匿名用户新增文件的umask数值。默认值为077,需要修改为022,否则上传后的文件为600
# 其他配置选项,根据实际需求修改
dirmessage_enable=YES # 设置切换到目录时显示message 隐含文件的内容 xferlog_enable= YES # 激活上传和下载日志 connect_from_port_20= YES # 启用FTP数据端口连接 pam_service_name=vsftpd # 设置PAM认证服务的配置文件名称, 该文件存放在/etc/pam.d目录下 userlist_enable= YES # 允许vsftpd.user_list文件中的用户访问服务器 userlist_deny= YES # 拒绝vsftpd.user_list文件中的用户访问服务器 listen= YES # 是否使用独占启动方式 tcp_wrappers= YES # 使用防火墙 #file_open_mode=0755
# vsftpd配置文件
/etc/vsftpd/vsftpd.conf # 主配置文件 /etc/vsftpd/ftpusers # FTP限制访问的用户,里面是一些系统用户,默认不允许访问,防止被入侵 /etc/vsftpd/user_list # 授权用户列表,可以控制哪些用户可以访问或者禁止访问
# 注意:
1)vsftpd.conf 文件中每个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符
2)除了主配置文件外,还可以给特定用户设定个人配置文件
3)虚拟用户默认可以读写,访问时映射为本地用户,所以需要启用对本地用户的控制
4)实际的访问权限可由用户独立的配置文件进行单独控制
3.2.创建虚拟用户相关文件
1)创建授权认证文件
cd /etc/pam.d/ mv vsftpd vsftpd.ori # 备份原有的ftp的pam认证文件 vim ftpvuser.pam # 创建新的ftp虚拟用户认证文件
写入以下内容:
#%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser # 不可以加.db的扩展名,否则认证不成功 account required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
2)创建虚拟用户的秘钥文件
mkdir -p /etc/vsftpd/vuser.d cd /etc/vsftpd/vuser.d touch vuser.list
3)加密虚拟用户的秘钥文件
# 使用db_load工具生成加密
yum install db4-utils -y db_load -T -t hash -f vuser.list vuser.db file vuser.list file vuser.db
# 为了安全,修改虚拟用户文件的访问权限
chmod 600 /etc/vsftpd/vuser.*
ll /etc/vsftpd/vuser.*
3.3.配置一个虚拟用户访问权限的实例
1)创建或修改虚拟用户秘钥信息
cd /etc/vsftpd/vuser.d vim vuser.list -------------------- admin 123456 --------------------
2)设置可以访问ftp的虚拟用户列表user_list
# 注释掉其他本地用户认证的内容,因为启用了guest_enable后,本地用户将失效,所有非匿名用户变成虚拟用户
# 因为需要授权访问的用户比较少,所以user_list设置为可以访问ftp服务的用户
vim /etc/vsftpd/user_list --------------------- admin ----------------------
3)每个用户单独创建授权文件
cd /etc/vsftpd/vuser.d vim admin --------------------------- # 指定宿主目录,配置访问权限 write_enable=YES local_root=/data/ftpdata/admin # 宿主目录 anon_upload_enable=YES # 上传 anon_mkdir_write_enable=YES # 创建目录写权限 anon_other_write_enable=YES # 其他写入权限 ---------------------------
4)创建ftp虚拟用户的宿主目录
# 创建的ftp本地用户及其根目录,用于映射虚拟用户,注意修改目录权限
mkdir -p /data/ftpdata/admin # 虚拟用户的宿主目录需要预先创建 useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser chmod 755 /data/ftpdata/ ll /data/ftpdata/ -d
5)配置完成刷新配置信息,进行测试
service vsftpd reload
4.常见报错处理
错误现象1:文件显示上传成功,刷新就是不显示。
报错分析:
1)检查发现上传的文件权限为600,是上传文件权限设置问题
解决方法:修改虚拟用户权限配置
local_umask=022 改为 anon_umask=022
2)另外,在创建虚拟用户映射的ftp本地用户的时候,使用useradd创建的宿主目录权限默认为700
这样,虽然上传文件的权限为644可读,文件夹755可读,但由于ftp的上层目录不可读,子目录也会受限
解决方法:修改宿主目录的权限为755即可
chmod 755 /data/ftpdata/
5.附:防火墙配置
如果ftp被动模式用到防火墙,可以参考以下配置
iptables -I INPUT -p tcp --dport 21 -j ACCEPT #FTP连接端口 iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT #pasv模式下的随机端口 iptables-save >/etc/sysconfig/iptables #保存防火墙配置 systemctl restart iptables.service systemctl restart vsftpd.service
======== 完毕,呵呵呵呵 ========