FTP服务是最经常使用的跨平台文件共享服务之一vim
============= 完美的分割线 ===============安全
1)PORTFTP和PASVFTP,PORTFTP是通常形式的FTP。
2)这两种FTP在创建控制链接时操做是同样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)创建控制连接,并经过此连接进行传输操做指令。它们的区别在于使用数据传输端口(ftp-data)的方式。
3)PORTFTP由FTP服务器指定数据传输所使用的端口,默认值为20。
4)PASVFTP由FTP客户端决定数据传输的端口。PASVFTP这种作法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定二者之间的数据传输端口更为方便一些。服务器
# 检查系统环境,若是系统版本较低,建议升级内核等app
# 在CentOS6.x和7.x版本安装方法基本相同tcp
uname -a cat /etc/redhat-release # yum update -y # 若是是新服务器或者是ftp独占能够升级,其余看状况
# 包括服务端和客户端工具
yum install vsftpd ftp -y
/etc/init.d/vsftpd start netstat -anptl|grep vsftpd chkconfig vsftpd on chkconfig --list vsftpd
# 从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.1.安装好vsftpd服务,默认为匿名访问ui
1)能够直接输入IP端口,能够打开ftp服务器
2)容许匿名用户登陆,宿主目录为/var/ftp,不能离开,下载目录为/var/ftp/pub,且只能下载,不能上传
3)容许本地用户登陆,且可离开主目录,本地用户容许上传/下载
4)写在文件/etc/vsftpd/ftpusers中的本地用户禁止登陆
5)服务器使用独占方式启动,且无限制链接数加密
cd /etc/vsftpd/
vim vsftpd.conf
# 修改配置文件,确认如下选项spa
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)实际的访问权限可由用户独立的配置文件进行单独控制
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
mkdir -p /etc/vsftpd/vuser.d cd /etc/vsftpd/vuser.d touch vuser.list
# 使用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.*
cd /etc/vsftpd/vuser.d vim vuser.list -------------------- admin 123456 --------------------
# 注释掉其余本地用户认证的内容,由于启用了guest_enable后,本地用户将失效,全部非匿名用户变成虚拟用户
# 由于须要受权访问的用户比较少,因此user_list设置为能够访问ftp服务的用户
vim /etc/vsftpd/user_list --------------------- admin ----------------------
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 # 其余写入权限 ---------------------------
# 建立的ftp本地用户及其根目录,用于映射虚拟用户,注意修改目录权限
mkdir -p /data/ftpdata/admin # 虚拟用户的宿主目录须要预先建立 useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser chmod 755 /data/ftpdata/ ll /data/ftpdata/ -d
service vsftpd reload
报错分析:
1)检查发现上传的文件权限为600,是上传文件权限设置问题
解决方法:修改虚拟用户权限配置
local_umask=022 改成 anon_umask=022
2)另外,在建立虚拟用户映射的ftp本地用户的时候,使用useradd建立的宿主目录权限默认为700
这样,虽然上传文件的权限为644可读,文件夹755可读,但因为ftp的上层目录不可读,子目录也会受限
解决方法:修改宿主目录的权限为755便可
chmod 755 /data/ftpdata/
若是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
======== 完毕,呵呵呵呵 ========