FTP服务

柳三千

温馨提示:这篇文章已超过781天没有更新,请注意相关的内容是否还可用!

FTP简介与原理

FTP(File Transfer Protocol)中文称为“文件传输协议”。
 主动模式:服务端从20端口向客户端发起连接

 被动模式:服务端在指定范围内某个端口  被动等待客户端连接


FTP端口
 控制连接:TCP21,用于发送FTP命令信息

 数据连接:TCP20,用于上传、下载的数据


FTP相关文件
主配置文件
  /etc/vsftpd/vsftpd.conf
用户控制列表文件
  /etc/vsftpd/ftpusers     黑名单
  /etc/vsftpd/user_list    黑名单,通过配置可以转为白名单

FTP相关用户
匿名用户:
  anonymous或ftp     非常不安全,建议禁止匿名登录
  本地用户  使用linux系统用户和密码;ftp是明文传输,如果被抓包了,你的Linux用户密码就会泄露,慎重!
  虚拟用户        管理员自定义的模拟用户建议使用

配置文件详解

默认配置文件

anonymous_enable=YES      允许匿名用户登录
local_enable=YES        允许本地用户登录
write_enable=YES        允许本地用户上传
local_umask=022        本地用户上传umask值
dirmessage_enable=YES     用户进入目录时,显示.message文件信息
message_file =.message     指定信息文件
xferlog_enable=YES       激活记录日志
connect_from_port_20=YES    主动模式数据传输接口
xferlog_std_format=YES     使用标准的FTP日志格式
ftpd_banner          登录欢迎信息
listen=YES           允许被监听
pam_service_name=vsftpd    设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
userlist_enable=YES      用户登录限制
tcp_wrappers=YES       是否使用tcp_wrappers作为主机访问控制方式


常用全局配置

listen_address=0.0.0.0    设置监听的ip地址
listen_port=21        设置监听FTP服务端口号
download_enable =YES      是否允许下载文件
max_clients=0        限制并发连接数
max_per_ip=0         限制同一IP地址的并发连接数


被动模式

pasv_enable=YES     开启被动模式
pasv_min_port=24500   被动模式最小端口
pasv_max_port=24600   被动模式最大端口


常用安全配置

accept_timeout=60          被动模式,连接超时时间
connect_timeout=60          主动模式,连接超时时间
idle_session_timeout=600       600秒没有任何操作就断开连接
data_connection_timeout=500   资料传输时,超过500秒没有完成,就断开传输


windows客户端访问方式

1、用DOS窗口访问并且使用put上传MP4文件,get下载1文件,不支持目录下载

1648129783220.png


2、使用windows对话框访问,支持目录下载

1648129874327.png


匿名用户访问

anon_upload_enable=YES           允许匿名用户上传
anon_mkdir_write_enable=YES         允许匿名用户新建
anonymous_enable=YES            允许匿名用户访问
anon_umask=022               设置umask值,默认600

注意事项:
   默认上传目录:/var/ftp/pub
   如果允许上传,需要服务权限和系统目录权限同时允许
   Vsftp服务的伪用户是ftp

本地用户访问

支持文件上传下载写入,但是缺点在家目录下,并且可以切换到 / 根目录下,我把passwd 密码本拷贝下来,并打开,极其危险。


配置文件:

anonymous_enable=NO
local_enable=YES
local_umask=022
#针对以上恐怖漏洞,在配置文件写入限制,将其限制死家目录上。
chroot_local_user=YES  开启用户目录限制(只有此行,把所有用户都限制在用户主目录中)


配置完之后登录报错:
  500 OOPS: vsftpd: refusing to run with writable root inside chroot()
  从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
  要修复这个错误,可以用命令chmod a-w /home/user去除用户家目录的写权限,注意把目录替换成你自己的。

或者你可以在vsftpd的配置文件中增加下列两项中的一项:

allow_writeable_chroot=YES 
local_root=/var/ftp /pub  设置本地用户的FTP根目录(注意目录权限)
local_max_rate=0     限制传输速率(字节/秒)

访问控制:

1648214392876.png


默认开启的配置:

chroot_local_user=YES  把用户禁锢在主目录中
userlist_enabled=YES   用户访问控制


以下三行写入报错,默认开启的,没必要设置

userlist_enable=YES           开启用户访问控制
userlist_deny=YES
Userlist_file=/etc/vsftpd/user_list   此文件内用户不能访问ftp服务器,默认如此

虚拟用户访问

环境配置:

#确保以下内容已经注释掉
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#userlist_deny=YES


1、添加虚拟用户口令文件

1648215464358.png


2、生成虚拟用户口令认证文件

yum install db4-utils -y
db_load -T -t hash -f /etc/vsftpd/vuser.txt  /etc/vsftpd/vuser.db #把文本转变为认证数据库


3、编辑vsftpd的PAM认证文件
vim /etc/pam.d/vsftpd

1648215753159.png

注释掉原本所有行,可以禁止本地用户登录,因为本地用户登录依靠这个文件验证

加入此两行

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser


4、建立本地映射用户并设置宿主目录权限

[root@ldx pam.d]# useradd -d /home/vsftproot -s /sbin/nologin vuser
[root@ldx pam.d]# chmod 755 /home/vsftproot/


5、修改配置文件

guset_enable=YES          开启虚拟用户
guest_username=vuser        ftp虚拟用户对应的系统用户
pam_service_name=vsftpd          pam认证文件,默认存在

#之前guset_enable=YES 一直报错,后面直接注释掉,删除,重新换一行重写成功了,注意空格,不要出现空格。


6、重启服务

systemctl restart vsftpd

此时虚拟用户可以登录查看下载,但不能上传
默认上传的文件是宿主用户的家目录
权限使用的是匿名用户权限进行管理


7、调整虚拟用户权限,允许所有虚拟用户上传

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES


8、可以给每个虚拟用户单独建立目录,并建立自己的配置文件。这样方便单独配置权限,并可以单独指定上传的目录。

user_config_dir=/etc/vsftpd/vuser_dir
mkdir /etc/vsftpd/vuser_dir

为每个虚拟用户建立配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

local_root=/tmp/cang   知道cang独立的上传目录

[root@ldx vuser_dir]# mkdir /tmp/cang
[root@ldx vuser_dir]# chown vuser:vuser /tmp/cang/
#如果其他用户没有单独配置文件,则遵守主配置文件权限


被动模式验证:

1648222161902.png

1648222205198.png


通过端口号可以知道是被动模式,我把端口改成30000-30010再次验证

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010

1648222426788.png


配置文件最后的内容:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
local_max_rate=0
allow_writeable_chroot=YES
guest_username=vuser
guest_enable=YES
listen=NO
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
listen_ipv6=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
user_config_dir=/etc/vsftpd/vuser_dir
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
local_max_rate=0
allow_writeable_chroot=YES
guest_username=vuser
guest_enable=YES
listen=NO
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
listen_ipv6=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
user_config_dir=/etc/vsftpd/vuser_dir
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


异常:

打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹
  1、首先打开一个IE浏览器(如果打开了多个浏览器,请关闭)。
  2、点击打开“工具”---“internet选项”---“高级”
  3、找到使用被动FTP(为防火墙和DSL调制解调器兼容性),并把前面的勾去掉。
  4、 然后点击确定并且关闭IE浏览器。

500 OOPS: cannot change directory:/home/nginx
500 OOPS: priv_sock_get_cmd

因为我映射的是nginx账户,nginx本身不具有家目录,所以报错,自己手动建立一个就好了

C:\Users\Administrator>ftp 159.75.255.125
连接到 159.75.255.125。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(159.75.255.125:(none)): www_ftp
331 Please specify the password.
密码:
500 OOPS: cannot change directory:/home/nginx
500 OOPS: priv_sock_get_cmd
远程主机关闭连接。
C:\Users\Administrator>ftp 159.75.255.125
连接到 159.75.255.125。
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用户(159.75.255.125:(none)): www_ftp
331 Please specify the password.
密码:
230 Login successful.
ftp>
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码