通过Windows客户端上传文件到CentOS出现乱码,在网上搜索一些资料之后,发现pure-ftp支持编码转换功能,所以研究了一下进行部署,在此记录一下安装过程,进行整理,也防止其他人踩坑。
准备安装包libiconv-1.17.tar.gz和pure-ftpd-1.0.50.tar.gz
- 安装libiconv
1、将包拷贝到/usr/local/src目录,并解压
$tar -xzvf libiconv-1.17.tar.gz
2、进入解压目录
$cd libiconv-1.17
3、进入解压目录,进行安装
$ ./configure --prefix=/usr/local
$ make
$ make install
4、完成之后进行确认
$iconv –help
看到如下内容,代表安装成功
Usage: iconv [OPTION...] [FILE...]
Convert encoding of given files from one encoding to another.
Input/Output format specification:
-f, --from-code=NAME encoding of original text
-t, --to-code=NAME encoding for output
Information:
-l, --list list all known coded character sets
5、将.so库链接到系统库目录
ln -s /usr/local/lib/libiconv.so.2 /usr/lib64/libiconv.so.2
ln -s /usr/local/lib/libiconv.so /usr/lib64/libiconv.so
ln -s /usr/local/lib/libiconv.so.2.6.1 /usr/lib64/libiconv.so.2.6.1
- 安装pure-ftpd
1、安装编译工具包
yum install make gcc* gcc-c++ openssl openssl-devel bzip2 wget tar
2、下载pure-ftpd
cd /usr/local/src/
wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.50.tar.gz
3、安装pure-ftpd
mkdir -p /usr/local/pureftpd #创建安装目录
cd /usr/local/src/
tar zxvf pure-ftpd-1.0.50.tar.gz
cd pure-ftpd-1.0.50
./configure --prefix=/usr/local/pureftpd --with-everything CFLAGS=-O2 --with-puredb --with-quotas --with-cookie --with-virtualhosts --with-diraliases --with-sysquotas --with-ratios --with-altlog --with-paranoidmsg --with-shadow --with-welcomemsg --with-throttling --with-uploadscript --with-language=english --with-ftpwho --with-tls --with-rfc2640
make
make install
vi /etc/profile #把pure-ftpd服务加入系统环境变量:在最后添加下面这一行
export PATH=$PATH:/usr/local/pureftpd/bin
4、配置pure-ftpd
4.1新建系统用户和组www,用户登录终端设为/sbin/nologin(即不能登录系统)
groupadd www
useradd -s /sbin/nologin -g www www
#此系统用户作为ftp虚拟用户的宿主用户
4.2创建FTP服务器虚拟用户访问目录
mkdir -p /data/ftp #ftp虚拟用户主目录
mkdir -p /data/ftp/ftpuser #ftp虚拟用户LgFtp的目录
chown www.www ftpuser02 -R #设置ftp虚拟用户目录权限为宿主用户www所有
4.3创建虚拟用户
/usr/local/pureftpd/bin/pure-pw useradd LgFtp -u www -d /data/ftp/ftpuser
提示输入ftp虚拟用户密码:
Password:123123
Enter it again:123123
同样可以添加第二个用户
/usr/local/pureftpd/bin/pure-pw useradd ftpuser02 -u www -d /data/ftp/ftpuser
-u选项将ftp虚拟用户和宿主用户www关联,虚拟用户登录后,会以宿主用户权限进行上传下载操作
-d选项后面是ftp虚拟用户的目录,每个ftp虚拟用户只能访问自己的目录
/usr/local/pureftpd/bin/pure-pw mkdb #生成虚拟用户数据文件
#虚拟用户数据存放文件
/usr/local/pureftpd/etc/pureftpd.passwd #虚拟用户文件
/usr/local/pureftpd/etc/pureftpd.pdb #虚拟用户数据文件
4.4修改pure-ftpd配置文件
mkdir -p /usr/local/pureftpd/var/run/ #创建进程文件存放目录
mkdir -p /usr/local/pureftpd/var/log/ #创建日志文件存放目录
vi /usr/local/pureftpd/etc/welcome #添加Pure-FTPd登录欢迎信息文件,内容可以自定义
Welcome to Pure-FTPd
:wq! #保存退出
mv /usr/local/pureftpd/etc/pure-ftpd.conf /usr/local/pureftpd/etc/pure-ftpd.conf-bak #备份配置文
件
可以用自己备的配置文件替换掉原来的配置文件。
或者vi /usr/local/pureftpd/etc/pure-ftpd.conf #编辑配置文件
加入如下内容:
ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 50
MaxClientsPerIP 8
VerboseLog no
DisplayDotFiles yes
AnonymousOnly no
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
LimitRecursion 10000 8
AnonymousCanCreateDirs no
MaxLoad 4
AntiWarez yes
Umask 133:022
MinUID 100
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
MaxDiskUsage 99
CustomerProof yes
#设置ftp端口,默认为21,0.0.0.0表示本机所有ip地址
Bind 0.0.0.0,21
#设置PureFTP被动端口
PassivePortRange 40000 40010
#禁止匿名用户上传文件( no表示允许上传)
AnonymousCantUpload yes
#禁止匿名连接,仅允许认证用户连接
NoAnonymous yes
#禁止系统用户认证
UnixAuthentication no
#允许后台运行
Daemonize yes
#虚拟用户数据文件
PureDB /usr/local/pureftpd/etc/pureftpd.pdb
#进程文件
PIDFile /usr/local/pureftpd/var/run/pure-ftpd.pid
#日志文件
AltLog clf:/usr/local/pureftpd/var/log/pureftpd.log
#Pure-FTPd登录欢迎信息
FortunesFile /usr/local/pureftpd/etc/welcome
#支持加密传输
#TLS 2
#加密证书路径
#CertFile /usr/local/pureftpd/ssl/pure-ftpd.pem
:wq! #保存退出
5、设置开机启动
vi /usr/lib/systemd/system/pure-ftpd.service #设置pureftpd开机启动
将如下内容加入文件:
[Unit]
Description=Pure-FTPd FTP server
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/usr/local/pureftpd/sbin/pure-ftpd --fscharset=utf-8 --clientcharset=gb2312 /usr/local/pureftpd/etc/pure-ftpd.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
输入如下命令:
:wq! #保存退出
systemctl enable pure-ftpd #添加开机启动
systemctl start pure-ftpd.service #启动
systemctl stop pure-ftpd.service #停止
systemctl restart pure-ftpd.service #重启
6、防火墙设置
IPtables 的设置方式: vi /etc/sysconfig/iptables
#编辑iptables文件,添加如下内容,开启21端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4000:40010 -j ACCEPT
firewall 的设置方式:
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=40000-40010/tcp –permanent
7、关闭SELINUX
#打开SELINUX配置文件
vim /etc/selinux/config
#修改配置参数
#注释
#SELINUX=enforcing
#增加
SELINUX=disabled
#修改完成后,需要重启!
8、使用ftp客户端进行连接
在Windows下使用ftp客户端软件(FileZilla、FlashFXP)连接ftp服务器