虚心使人进步

虚心学习,天天向上......
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、安装步骤

LinuxPureFTPd配置(完整版)

⽹上关于pureftp的安装教程很多,但是试了以后发现很多其实都不完善,很容易出错,⾃⼰安装摸索以后总结如下:

换47吧,中文文件名有问题 

https://download.pureftpd.org/pub/pure-ftpd/releases/obsolete/pure-ftpd-1.0.47.tar.gz

2.解压:tar zxvf pure-ftpd-1.0.47.tar.gz

进⼊到解压后⽬录:cd pure-ftpd-1.0.47

3.编译⽅式,推荐使⽤全部安装:

./configure --prefix=/usr/local/pure-ftpd/ --with-puredb --with-everything --with-rfc2640

 

make && make check && make install

 

4.安装:

5.建⽴相应的安装⽬录:mkdir /usr/local/pure-ftpd/etc

6.把配置⽂件和主要执⾏⽂件拷到对应的⽂件夹下⾯:

cp configuration-file/pure-ftpd.conf /usr/local/pure-ftpd/etc/

cp configuration-file/pure-config.pl /usr/local/pure-ftpd/sbin/

chmod 755 /usr/local/pure-ftpd/sbin/pure-config.pl

7.定制⼀下系统的环境变量:

cd /usr/local/bin/

ln -s /usr/local/pure-ftpd/bin/* .

ln -s /usr/local/pure-ftpd/sbin/* /usr/local/sbin/

ln -s /usr/local/pure-ftpd/man/man8/* /usr/local/share/man/man8/

  

8.启动pureftp服务器(先跳到第二步骤做好启动脚本):

service pure-ftpd start

  

屏幕上⼀般显⽰如下信息:

此时可以⽤在命令⾏窗⼝下telnet ip地址 21的⽅式探测⼀下这个端⼝是不是通的

 

9.pureftp⼀般需要不⽤默认的root⽤户进⾏操作,⼀般会另外创建⽤户名和组,⽤虚拟⽤户进⾏登录

创建组:

groupadd ftpgroup

  

创建⽤户:

useradd -g ftpgroup -d /dev/null -s /etc ftpuser

  

创建完成以后可以⽤cat /etc/passwd和cat /etc/group来查看组和⽤户是否已经创建好了

10.添加ftp虚拟⽤户

pure-pw useradd test -u ftpuser -d /home/ftpuser/test

 

新建一个新的看看 

pure-pw useradd ftptest2 -u ftpuser -g ftpgroup -d /data/httpd/ecshopx-api/storage/audiogram/notdone  -m

 

12.新建好后,要执行⽣成数据库⽂件

pure-pw mkdb

 

list出所有用户

# pure-pw list
test                /home/ftpuser/test/./                                      
ftptest             /data/httpd/ecshopx-api/storage/audiogram/notdone/./                    
testnew             /home/ftpuser/test/./                                      
ftptest2            /data/httpd/ecshopx-api/storage/audiogram/notdone/./ 

  

 

 

如果添加完成以后想要删除可以使⽤pure-pw userdel test这条指令

想要修改密码可以使⽤pure-pw passwd test这条指令

用filezilla工具登录ftp也是用test这个虚拟用户

 

11.查看⽤户信息

pure-pw show test

  

 

13.⼀定要注意修改配置⽂件,因为很多配置⽂件数据库的默认安装位置并不是实际位置,这样就会造成每次登陆的时候都找不到密码,ftp ⼀直显⽰passwd required,所以安装好以后⼀定要修改配置⽂件,尤其是粉红⾊的部位,注意修改

打开配置⽂件:vi /usr/local/pure-ftpd/etc/pure-ftpd.conf

ChrootEveryone yes # 启⽤chroot
 
BrokenClientsCompatibility yes # 兼容不同客户端
 
Daemonize yes # 后台运⾏
 
MaxClientsPerIP 20 # 每个ip最⼤连接数
 
VerboseLog yes # 记录⽇志
 
DisplayDotFiles no # 显⽰隐藏⽂件
 
AnonymousOnly no # 只允许匿名⽤户访问
 
NoAnonymous yes # 不允许匿名⽤户连接
 
SyslogFacility none # 不将⽇志在syslog⽇志中显⽰
 
DontResolve yes # 不进⾏客户端DNS解析
 
MaxIdleTime 15 # 最⼤空闲时间
 
LimitRecursion 2000 8 # 浏览限制,⽂件2000,⽬录8层
 
AnonymousCanCreateDirs no # 匿名⽤户可以创建⽬录
 
MaxLoad 4 # 超出负载后禁⽌下载
 
PassivePortRange 45000 50000 # 被动模式端⼝范围
 
AnonymousRatio 1 10 # 匿名⽤户上传/下载⽐率
 
UserRatio 1 10 # 所有⽤户上传/下载⽐率
 
AntiWarez yes # 禁⽌下载匿名⽤户上传但未经验证的⽂件
 
AnonymousBandwidth 200 # 匿名⽤户带宽限制(KB)
 
UserBandwidth 8 # 所有⽤户最⼤带宽(KB)
 
Umask 133:022 # 创建⽂件/⽬录默认掩码
 
MinUID 100 # 最⼤UID限制
 
AllowUserFXP no # 仅运⾏⽤户进⾏FXP传输
 
AllowAnonymousFXP no # 对匿名⽤户和⾮匿名⽤户允许进⾏匿名 FXP 传输
 
ProhibitDotFilesWrite no # 不能删除/写⼊隐藏⽂件
 
ProhibitDotFilesRead no # 禁⽌读取隐藏⽂件
 
AutoRename yes # 有同名⽂件时⾃动重新命名
 
AnonymousCantUpload yes # 不允许匿名⽤户上传⽂件
 
AltLog clf:/var/log/pureftpd.log # clf格式⽇志⽂件位置
 
PureDB /usr/local/pure-ftpd/etc/pureftpd.pdb # ⽤户数据库⽂件
 
MaxDiskUsage 99 # 当磁盘使⽤量打到99%时禁⽌上传
 
CreateHomeDir yes # 如果虚拟⽤户的⽬录不存在则⾃动创建
 
CustomerProof yes # 防⽌命令误操作
 
 
 
# UTF-8 support for file names (RFC 2640)
# Set the charset of the server filesystem and optionally the default charset
# for remote clients that don't use UTF-8.
# Works only if pure-ftpd has been compiled with --with-rfc2640
FileSystemCharset UTF-8
ClientCharset GBK

 

 

PureDB /usr/local/pure-ftpd/etc/pureftpd.pdb这个地⽅⼀定要记得修改,不然会⼀直登不上去,修改完成以后可以再次执⾏ 14.重新⽣成数据库⽂件pure-pw mkdb

 

如何解决中文文件名问题,经过多重测试,一个UTF-8,一个GBK,才能确保windows ftp命令上传中文文件名不乱码

FileSystemCharset UTF-8
ClientCharset GBK

 

15.先把之前的pureftp服务kill掉 killall pure-ftpd

16.然后重新启动

 

17.此时⼀般已经可以成功登录,但是有可能还是⽆法上传到服务器上去,此时⼀般是权限问题,

登录到ftp的家⽬录下 cd /home/ftpuser/test

修改test⽂件夹下的⽂件权限 chown ftpuser:ftpgroup wenjian1

再尝试重新连接以后上传。

 

2、pure-ftpd启动脚本

#!/bin/bash
# $0 name:pureftpd
# chkconfig: 3 91 31
# description: pure-ftpd
. /etc/rc.d/init.d/functions
PATH=$PATH:/usr/local/sbin:/usr/local/bin
export PATH
RETVAL=0
pure_home=/usr/local/pure-ftpd
start () {
$pure_home/sbin/pure-ftpd $pure_home/etc/pure-ftpd.conf >/dev/null
RETVAL=$?
if [ "$RETVAL" -eq 0 ];then
action "Starting pure-ftpd:" success
else
action "Starting pure-ftpd:" failure
fi
}
stop () {
killall pure-ftpd 2>/dev/null
RETVAL=$?
if [ "$RETVAL" -eq 0 ];then
action "Stopping pure-ftpd:" success
else
action "Stopping pure-ftpd:" failure
fi
}
restart () {
stop
RETVAL=$?
if [ "$RETVAL" -eq 0 ];then
sleep 1
start
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 3
;;
esac

 

chmod 755 /etc/init.d/pure-ftpd

chkconfig --add  pure-ftpd

 

重启

service pure-ftpd restart 

service pure-ftpd stop

service pure-ftpd start

 

 

3、windows bat 文件自动批量上传目录下的指定类型文件到ftp服务器。

@echo on
schtasks /create /F /tn uploadgnd_tasknew /tr %0 /sc minute /mo 5
rem 版本2022-12-8 20:22uploadFtpFileFun参数都加上引号
rem 放到gnd文件的保存目录
rem 获取系统时间的星期值
rem set "day=%date:~11,2%"
rem 调用VBS程序获取昨日日期
rem ftp服务器IP
rem ftp上传本地路径
set "uploadCilentLocal=E:\"
set "ftpLogsName=ftpUpload-%date:~0,10%.log"
set "ftpLogsName=%ftpLogsName:/=-%"
set "ftpip=111.111.111.111"
rem ftp用户
set "ftpuser=ftpuser"
rem ftp密码
set "ftppasswd=123456"

rem ftp服务器上传路径
set "uploadRemote=/"
rem 是否上传全部与当天2022-12-8
set "DestExt=*.gnd"
set "uploadfile=1.gnd"
set "parentDirArr="
rem cd /d %uploadCilentLocal%
for /f "usebackq delims=" %%i in (`dir /b/a-d/s "%DestExt%"`) do (
call :uploadFtpFileFun %ftpip%,%ftpuser%,%ftppasswd%,%uploadRemote%,"%uploadCilentLocal%","%%i","%%~nxi"
)

::函数名 :uploadFtpFileFun 上传文件
::参数0,%0 就是函数名本身 :uploadFtpFileFun
::参数1,%1 ftp服务器地址 :ftpip
::参数2,%2 ftp服务器用户名 :ftpuser
::参数3,%3 ftp服务器密码 :ftppasswd
::参数4,%4 ftp服务器远程目录 :uploadRemote
::参数5,%5 ftp客户端本地上传目录 :uploadCilentLocal
::参数6,%6 文件所在目录 :uploadDir
::参数7,%7 上传文件 :upfile
:uploadFtpFileFun
echo ===========%date:~0,10% %time:~0,8%============%6 start==========================>>%ftpLogsName%
echo open %1>>ftp.upload
echo %2>>ftp.upload
echo %3>>ftp.upload
rem echo mkdir %4>>ftp.upload
echo cd %4>>ftp.upload
rem echo lcd %5>>ftp.upload
rem echo mkdir %6>>ftp.upload
rem echo cd %6>>ftp.upload
rem 二进制上传否则中文名乱码
echo quote opts utf8 off>>ftp.upload
echo passive>>ftp.upload
echo quote passive>>ftp.upload
rem echo binary>>ftp.upload
echo put %7>>ftp.upload
echo bye>>ftp.upload
FTP -s:ftp.upload>>%ftpLogsName%
del ftp.upload /q
echo ===========%date:~0,10% %time:~0,8%============%6 endsx==========================>>%ftpLogsName%
GOTO:EOF

 添加windows的定时任务

每天0-23:59:59,每5分钟运行一次

 schtasks /create /tn uploadgnd_task /tr D:\test.bat /sc minute /mo 5 /st 00:00:00 /et 23:59:59

(1)每天8:00执行test脚本

schtasks /create /tn test_task /tr D:\test.bat /sc DAILY /st 08:00:00
1
(2)当天8:00到21:00每隔2分钟执行test脚本

schtasks /create /tn test_task /tr D:\test.bat /sc minute /mo 2 /st 08:00:00 /et 21:00:00
1
2、查看已配置定时任务,可以显示下次运行时间
定时任务配置时通过schtasks /query完成,详细语法在cmd下执行schtasks /query /?获取。参考实例如下:

schtasks /query /tn test_task
1
3、结束任务
定时任务配置时通过schtasks /end完成,详细语法在cmd下执行schtasks /end/?获取。参考实例如下:

schtasks /end /tn test_task
1
4、删除任务
定时任务配置时通过schtasks /delete完成,详细语法在cmd下执行schtasks /delete/?获取。参考实例如下:

schtasks /delete /tn test_task /f

 

图形界面:

打开路径:控制面板(可在命令行下输入control打开)-> 管理工具 -> 任务计划程序,打开主界面如下: