FTP是File Transfer Protocal(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
在CentOS或RedHat Linux上有自带的FTP软件vsftp,但pure-ftpd比vsftp更加灵活。
pure-ftpd的官网为:http://www.pureftpd.org/project/pure-ftpd,下载命令如下:
# cd /usr/local/src/
# wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.32.tar.bz2
# tar jxf pure-ftpd-1.0.32.tar.bz2
# cd pure-ftpd-1.0.32
# ./configure \
...
# make && make install
pure-ftpd的编译安装过程很快,而且极少有错误出现,首先配置pure-ftpd,具体过程如下:
# cd configuration-file
# mkdir-p /usr/local/pureftpd/etc/
# cp pure-ftpd.conf /usr/local/pureftpd/etc/pure-ftpd.conf
# cp pure-config.pl /usr/local/pureftpd/sbin/pure-config.pl
# chmod 755 /usr/local/pureftpd/sbin/pure-config.pl
在启动pure-ftpd之前需要先修改配置文件/usr/local/pureftpd/etc/pure-ftpd.conf。
ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 50
Daemonize yes
MaxClientsPerIP 8
VerboseLog no
DisplayDotFiles yes
AnonymousOnly no
NoAnonymous no
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
PureDB /usr/local/pureftpd/etc/pureftpd.pdb
LimitRecursion 3136 8
AnonymousCanCreateDirs no
MaxLoad 4
Antiwarez yes
Umask 133:022
MinUID 100
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload no
PIDFile /usr/local/pureftpd/var/run/pure-ftpd.pid
MaxDiskUsage 99
CustomerProof yes
然后启动pure-ftpd,如下所示:
# cd /usr/local/pureftpd/
# ./sbin/pure-config.pl ./etc/pure-ftpd.conf
如果启动成功,会显示一行以“Running”开头的信息;否则就是错误信息。
为了安全,pure-ftpd使用的账号并非Linux的系统账号,而是虚拟账号。
首先创建一个账号,如下所示:
# mkdir /data/www/
# useradd www
# chown -R www:www /data/www/
# /usr/local/pureftpd/bin/pure-pw useradd ftp_user1 -uwww -d /data/www/
Password:
Enter it again:
其中,-u选项将虚拟用户ftp_user1与系统用户www关联在一起,即使用ftp_user1账号登录FTP后,会以www的身份来读取和下载文件; -d选项后面的目录 为ftp_user1账户的家目录 ,这样可以使ftp_user1只能访问其家目录 /data/www/。
然后创建用户信息数据库文件,这一步最关键,执行如下命令:
# /usr/local/pureftpd/bin/pure-pw mkdb
其中,pure-pw还可以列出当前的FTP账号以及删除某个账号。例如,我们再创建一个账号如下所示:
# /usr/local/pureftpd/bin/pure-pw useradd ftp_user2 -uwww -d /tmp
# /usr/local/pureftpd/bin/pure-pw mkdb
如果想列出当前账号,执行如下命令:
# /usr/local/pureftpd/bin/pure-pw list
如果想删除账号,执行如下命令:
# /usr/local/pureftpd/bin/pure-pw userdel ftp_user2
# touch /data/www/123.txt
# lftp ftp_user1@127.0.0.1
口令:
lftp ftp_user1@127.0.0.1:~> ls
...
登录后,使用ls命令可以查看当前目录的文件。最好的测试方法是:在windows机器上安装一个FTP客户端软件,然后远程连接测试。
vsftpd是系统默认自带的FTP服务软件,比较常用。
# yum install -y vsftpd db4-utils
vsftpd默认可以支持使用系统账号体系登录,但那样不太安全,建议使用虚拟账号体系登录。
首先建立与虚拟账号相关联的系统账号,如下所示:
# useradd virftp -s /sbin/nologin
接着建立与虚拟账户相关的文件,如下所示:
# vim /etc/vsftpd/vsftpd_login //内容如下:
test1
123456
test2
abcdef
然后更改该文件的权限,提升安全级别,如下所示:
# chmod 600 /etc/vsftpd/vsftpd_login
vsfptd使用的密码文件不是明文的,需要生成对应的库文件,如下所示:
# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
最后建立与虚拟账号相关的目录以及配置文件,如下所示:
# mkdir /etc/vsftpd/vsftpd_user_conf
# cd /etc/vsftpd/vsftpd_user_conf
用户的配置文件是单独存在的,每一个用户都有一个自己的配置文件,如下所示:
# vim test1 //内容如下:
local_root=/home/virftp/test
anonymous_enable=no
write_enable=yes
local_umask=022
anon_upload_enable=no
anon_mkdir_write_enable=no
idle_session_timeout=600
data_connection_timeout=120
max_client=10
max_per_ip=5
local_max_rate=50000
# chown -R virftp:virftp /home/virftp
# vim /etc/pam.d/vsftpd //在最开头添加两行
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
32位的库文件路径为/lib/security/pam_userdb.so
64位的库文件路径为/lib64/security/pam_userdb.so
修改用户的配置文件后还不可用,还需要修改vsftpd的一些全局配置文件。
首先编辑vsftpd.conf文件,如下所示:
# vim /etc/vsftpd/vsftpd.conf
修改如下内容:
将anonymous_enable=yes 改为no
将anon_upload_enable=yes 改为no
将anon_mkdir_write_enable=yes 改为no
再增加如下内容:
chroot_local_user=yes
guest_enable=yes
guest_username=virftp
virtual_use_local_privs=yes
user_config_dir=/etc/vsftpd/vsftpd_user_conf
然后启动vsftpd服务,执行如下命令:
# /etc/init.d/vsftpd start