FTP服务器
在centos7中搭建FTP服务器
FTP:文件传输协议,工作模式[客户端/服务器],FTP服务的端口号:tcp/21、tcp/20
FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
在企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21端口即可。
一、FTP服务器简介
FTP(File Transfer Protocol):文件传输协议,是一个客户机/服务器系统。使用FTP的用户需要经过验证后才能登录,FTP服务器的用户可分成3类。
系统用户:即系统本机的用户。Linux一般不会针对实体用户进行限制,因此实体用户可以针对整个文件系统进行工作。但通常不希望他们通过FTP方式远程访问系统。
虚拟用户:只能采用FTP方式使用系统的用户,不能直接使用Shell登录系统,即虚拟用户,访问服务器时需要验证。大多数FTP用户是这类用户。
匿名用户:对于公共性质的服务器可以提供匿名用户访问,用户名:anonymous。但在使用匿名用户时,应对其进行尽可能多的限制,权限较低,如:同时连接的用户数量受限,访问的文件数目受限,不能上传文件,允许操作的指令较少,设置匿用户同时登入的最大联机数量等。
二、FTP服务器的安装
1、使用默认yum源安装vsftpd软件包
#yum install vsftpd ftp
2、启动服务并设置开机自启
vsftpd的服务名称:vsftpd.service
#systemctl start vsftpd.service 启动服务
#systemctl enable vsftpd.service 开机自启
3、设置防火墙与selinux机制
#firewall-cmd --permanent --zone=public --add-service=ftp
#firewall-cmd --reload
#systemctl stop firewalld
#setenforce 0
4、访问ftp服务器
Linux系统中使用ftp命令进行访问
在windows客户端访问ftp服务器
三、设置匿名用户访问ftp
1、匿名用户访问FTP相关知识点
(1)默认允许匿名用户与系统用户访问ftp,访问的默认目录是:/var/ftp
访问测试(用户名:anonymous 密码为空)
(2)ftp的配置文件是:/etc/vsftpd/vsftpd.conf
设置匿名用户访问ftp:
anonymous_enable=YES
(3)设置匿名用户登录ftp时不输入密码:
no_anon_password=YES
ftpd_banner= welcome to our home! //设置提示内容
(4)设置匿名用户上传、新建、删除文件:
anon_upload_enable=YES 匿名用户上传权限
anon_mkdir_write_enable=YES 匿名用户新建文件夹的权限
anon_other_write_enable=yes 匿名用户删除和修改文件的权限
(5)设置文件权限
chmod 777 pub 不推荐使用
setfacl -m u:ftp:rwx pub 推荐使用
(6)设置匿名用户上传或新建文件的权限
umask值:决定了新建文件或文件夹时的默认权限
umask值的表示方法:0022
如果使用vsftp的是本地用户,则要修改配置文件中的 local_umask 的值;
如果使用vsftp的是虚拟用户,则要修改配置文件中的 anon_umask 的值。
umask = 022 时,新建的目录 权限是755,文件的权限是 644;
umask = 077 时,新建的目录 权限是700,文件的权限时 600。
(7)设置不允许系统用户登录,只能匿名用户登录:
anonymous_enable=YES
local_enable=no
(8)设置匿名用户访问ftp的默认目录
anon_root=/var/ftp
anon_root=/var/public
注意:要修改vsftp服务器匿名用户默认目录时,不可以将anon_root设置为一个其他账号已有的家目录,否则不能实现匿名用户访问ftp服务器。
四、配置系统用户访问FTP服务器
1、系统用户访问FTP相关知识
(1)系统用户默认访问主目录,具有上传、下载、新建、删除的权限,还可以切换到的系统其他目录。
关闭匿名用户访问,只允许系统用户访问
anonymous_enable=no 关闭匿名用户访问
local_enable=yes 允许系统用户访问
local_umask=022
(2)设置系统用户只能访问自己的主目录并具有所有权限,不允许切换到系统的其他目录。
chroot_local_user=YES 控制用户访问路径访问自己的主目录,不能切换到其他目录
allow_writeable_chroot=YES 允许写入
ftpd_banner= welcome to our home!
max_clients=30 设置最大连接数
idle_session_timeout=600 设置超时时间
(3)设置系统用户访问指定目录,不允许切换到系统的其他目录,并具上传、下载、新建、删除的权限。
local_root=/mnt/public/ 设置系统用户访问ftp的默认目录
write_enable=YES 允许写入
chroot_local_user=YES 控制用户访问路径访问指定目录,不能切换到其他目录
allow_writeable_chroot=YES 允许写入
修改/mnt/public/目录下的文件权限
2、基于本地用户的访问控制
默认情况下,ftp服务器中所有系统用户都可以访问ftp,如何来限定只有指定的系统用户可以访问呢?vsftp中提供了两个与系统用户相关的配置文件:
/etc/vsftpd/ftpusers 提供了一份用于禁止登录的ftp用户列表(黑名单)。 此文件中包含的用户将被禁止登录vsftpd服务器,不管该用户是否在/etc/vfsftpd/user_list中出现。
/etc/vsftpd/user_list 提供了一份用于允许登录的ftp用户列表(白名单),此文件中包含的用户可能被禁止登录,可能被允许登录。
具体在主配置文件vsftpd.conf中决定:
当存在userlist_enable=YES时,user_list文件生效。
当存在userlist_deny=YES时,则仅禁止列表中的帐户登录。
当存在userlist_deny=NO时,则允许列表中用户登录。
其中:ftpusers文件的优先级要高于user_list文件,即如果一个用户同时存在于两个文件中,则被拒绝访问ftp。
举例:只让ftpuser用户访问ftp,那么可以进行如下设置:
#vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES #启用userlist用户列表(系统默认设置)
userlist_deny=NO #只允许列表中的用户登录
#vim/etc/vsftpd/user_list
将服务重启后,在客户端测试,此时只有ftpuser用户可以访问ftp
五、配置虚拟用户访问FTP
1、安装Vsftpd虚拟用户需要用到的软件及认证模块
#yum install pam* libdb-utils libdb* --skip-broken -y
2、创建虚拟用户临时文件/etc/vsftpd/ftpusers.txt,用户名密码格式如下:
Techftp 用户名
123456 密码
netftp
123456
admftp
123456
markftp
123456
3、生成Vsftpd虚拟用户数据库认证文件,设置权限为600
#db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftp_login.db
#chmod 600 /etc/vsftpd/vsftp_login.db
4、配置PAM认证文件:vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vsftp_login
account required pam_userdb.so db=/etc/vsftpd/vsftp_login
5、创建一个系统用户,用于虚拟用户映射
#useradd -s /sbin/nologin ftpuser
6、修改配置文件:#vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
pam_service_name=vsftpd.vu
guest_enable=YES 开启系统虚拟用户访问
guest_username=ftpuser 指定系统虚拟用户
user_config_dir=/etc/vsftpd/vsftpd_user_conf 指定虚拟用户的配置文件目录
virtual_use_local_privs=YES 允许虚拟用户访问
7、分别为虚拟用户创建私有的虚拟目录与独立的配置文件
#mkdir /home/ftpuser/techftp
#mkdir /etc/vsftpd/vsftpd_user_conf
#vim techftp
local_root=/home/ftpuser/techftp 默认访问的目录
write_enable=YES 允许写入
anon_world_readable_only=YES 允许浏览
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#mkdir /home/ftpuser/netftp
#vim netftp
local_root=/home/ftpuser/netftp
write_enable=YES
virtual_use_local_privs=NO #不具有可登录用户的权限
anon_world_readable_only=YES #可浏览目录
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
六、Vsftpd日志管理
1、Vsftp软件搭建的FTP服务器的日志文件的配置,在/etc/vsftpd.conf中找到:
xferlog_enable=YES 开启FTP服务器记录上传下载的情况
xferlog_std_format=YES 日志格式
xferlog_file=路径 指定日志文件
默认为:/var/log/xferlog
2、日志文件输出格式如下:
(1)当前时间(为本地时间),格式为:DDD MMM dd hh:mm:ss YYYY
(2)传输时间:传送文件所用时间,单位为秒
(3)远程主机名称/IP:
(4)文件大小:传输文件的大小,单位为byte
(5)文件名:传输文件名,包括路径
(6)传输类型:a–以ASCII传输;b–以二进制文件传输
(7)特殊处理标志:
_:不做任何特殊处理
c:文件是压缩格式
u:文件是非压缩格式
t:文件时tar格式
(8)传输方向:o 从FTP服务器向客户端传输;i 从客户端向FTP服务器传输
(9)访问模式:a 匿名用户;g 来宾用户;r 系统中的用户
(10)用户名
(11)服务名:一般为FTP
(12)认证方式:0 无; 1 RFC931认证
(13)认证用户id:如果使用*,测表示无法获得该id
(14)完成状态:i 传输未完成;c表示传输已完成。