pureftp
过滤原理:
oneinstack安装包中使用的ftp上传工具是pureftp,本质上,pureftp不参与文件类型验证,所有的传输动作,仅验证文件的读写权限。但是pureftp提供了一个上传监听机制:pure-uploadscript,在文件上传完成后,可以执行外部脚本,并将上传的文件路径传递给外部脚本,我们可以在外部脚本中写我们的命令,自定义过滤文件。
使用pure-uploadscript机制,必须在安装pureftp的时候加入pure-uploadscript的预编译:--with-uploadscript。
过滤原则:
1、文件后缀名验证
上传文件会自动验证文件后缀,例如xxxx.jpg , xxxx.txt , xxxx.css 等,不合法的后缀直接删除
2、文件二进制验证
仅验证文件后缀名,用户可以修改非法文件(如可执行的shell)的后缀名然后上传,这时候就需要对文件的二进制进行验证。Linux提供了file命令,可以对文件的真正类型进行验证。
操作过程:
1、自定义过滤脚本:pure-check-file
#!/bin/bash
uploaded_file=${1};
# 允许的文件头。UNIX下,使用/usr/bin/file -bi "$1" | awk -F";" '{print $1}' | awk -F"/" '{print $2}' 可获取文件类型
# 将允许的文件类型加入下列数组
allowed_extensions=[jpg,png,jpeg,gif,JPG,PNG,JPEG,GIF,css,js,plain,mp4,pdf,html]
# 定义删除标识
flag=1
filetype=`/usr/bin/file -bi "$1" | awk -F";" '{print $1}' | awk -F"/" '{print $2}'`
if [[ "${allowed_extensions[@]}" =~ ${filetype} ]]; then
flag=0
fi
if [ ${flag} == 1 ] ; then
rm "$1"
fi
将这个脚本放在oneinstack的pureftp的bin目录下。参考路径:/usr/local/pureftpd/bin/pure-check-file,并赋予执行权限 :
# mv pure-check-file /usr/local/pureftpd/bin/pure-check-file
# chmod +x /usr/local/pureftpd/bin/pure-check-file
2、开启上传回调配置
# vim /usr/local/pureftpd/etc/pure-ftpd.conf
打开第360行的注释
347
348 # If your pure-ftpd has been compiled with standalone support, you can change
349 # the location of the pid file. The default is /var/run/pure-ftpd.pid
350
351 #PIDFile /var/run/pure-ftpd.pid
352
353
354
355 # If your pure-ftpd has been compiled with pure-uploadscript support,
356 # this will make pure-ftpd write info about new uploads to
357 # /var/run/pure-ftpd.upload.pipe so pure-uploadscript can read it and
358 # spawn a script to handle the upload.
359
360 CallUploadScript yes
361
362
363
364 # This option is useful with servers where anonymous upload is
365 # allowed. As /var/ftp is in /var, it save some space and protect
366 # the log files. When the partition is more that X percent full,
367 # new uploads are disallowed.
368
369 MaxDiskUsage 99
370
371
372
373 # Set to 'yes' if you don't want your users to rename files.
374
375 #NoRename yes
保存并关闭
3、重启pureftpd进程
注意 重启进程之后进程会挂起,等待pure-uploadscript进程的加入。需要新开一个窗口,启动pure-uploadscript进程。(官方建议的操作....)
# service pureftpd restart
新开窗口
# /usr/local/pureftpd/sbin/pure-uploadscript -p /var/run/pure-ftpd.pid -B -r /usr/local/pureftpd/bin/pure-check-file
这时候pureftpd的进程会自动开始
4、上传验证
以上就是本文的全部内容啦,有什么疑问欢迎在下方评论区留言嗷,收到通知会及时回复~
文章浏览总量:763
(非即时 )
Comments