FTP服务器(vsftpd和pure-ftpd)

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。
FTP方便传输数据,所以个人用户很多,但在企业里用的越来越少,因为FTP是有一定的安全隐患的。
本次使用的是vsftpd、pure-ftpd这两款软件。

安装环境:CentOS 7

一、vsftpd

在CentOS或者Red Hat Linux系统上,自带vsftpd软件,默认没有安装。

yum install -y vsftpd db4-utils

其中,db4-utils包用来生成密码库文件。

vsftpd默认可以使用系统账号登录,但为了安全起见,建议配置虚拟账号。

useradd vsftpd -s /sbin/nologin

该系统账户不用登录,如果没有其它需求的话。

然后在 /etc/vsftpd/目录下,建立虚拟账户的文件,记录虚拟账户的账号和密码:

vim /etc/vsftpd/vsftpd_login

# 大致如下
test1
123456
test2
abcdef

每个账户两行,奇数行是账户名,偶数行是该账户的密码。
修改权限:

chmod 600 /etc/vsftpd/vsftpd_login

然后使用刚才安装的db4-utils包软件,把账户文件加密生成对应的库文件:

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.conf

配置参数如下

local_root=/home/vsftpd/test1
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
write_enable=YES
local_umask=022
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
  • local_root为该虚拟账户的根目录;

配置完成后,test2账户的配置文件与test1相同。
然后创建虚拟账户的根目录:

mkdir /home/vsftpd/test1
chown -R vsftpd:vsftpd /home/vsftpd

配置验证方式,在/etc/pam.d/目录下vsftpd文件:

vim /etc/pam.d/vsftpd
# 在开头添加如下信息
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

接下来修改 vsftpd的配置文件,使相关配置全局生效:

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
vim /etc/vsftpd/vsftpd.conf

全局配置如下:

# 是否匿名FTP登录(默认情况允许)
anonymous_enable=NO
# 是否允许匿名账户上传
anon_upload_enable=NO 
# 是否允许匿名账户可写
anon_mkdir_write_enable=NO
# 取消注释以允许本地用户登录。
local_enable=YES
# 是否可写
write_enable=YES
# 指定umask值
local_umask=022
# 激活目录消息 - 在远程用户进入某个目录时发给他们的消息。
dirmessage_enable=YES
xferlog_enable=YES
# 启用FTP数据端口的数据连接
connect_from_port_20=YES
xferlog_std_format=YES
# 当“监听”指令被启用时,vsftpd以独立模式运行并监听IPv4套接字。 该指令不能与listen_ipv6指令一起使用。
listen=YES
pam_service_name=vsftpd
# 是否启用vsftpd.user_list文件
userlist_enable=YES
tcp_wrappers=YES
# 是否禁止用户切换到上级目录
chroot_local_user=YES
# 是否启用虚拟用户
guest_enable=YES
# 系统用户映射的虚拟用户
guest_username=virftpd
# 虚拟用户是否使用与本地用户相同的权限
virtual_use_local_privs=YES
# 用户配置文件
user_config_dir=/etc/vsftpd/vsftpd_user_conf
# chroot 环境是否可写
allow_writeable_chroot=YES

最后启动服务

systemctl start vsftpd

二、pure-ftpd

CentOS系统的yum源中不包含pure-ftpd,所以如果使用 yum安装的话,需要安装epel扩展源:

yum install -y epel-releae
yum install -y pure-ftpd

安装完毕之后,对pure-ftpd的配置文件pure-ftpd.conf进行一些配置:

vim /etc/pure-ftpd/pure-ftpd.conf

配置文件内容大致如下,其中需要把PureDB的注释取消,其它的配置保持默认即可。

# 限制所有用户在其主目录中
ChrootEveryone              yes
# 如果前一个指令被设置为了 "no",下面组的成员(GID)就不受主目录的限制了。
# 而其他的用户还是会被限制在自己的主目录里。
# 如果你不想把任何用户限制在自己的主目录里,只要注释掉ChrootEveryone和TrustedGID就可以了。
# TrustedGID                    100
# 兼容ie等比较非正规化的ftp客户端
BrokenClientsCompatibility  no
# 服务器总共允许同时连接的最大用户数 
MaxClientsNumber            50
# 做为守护(doemon)进程运行(Fork in background)
Daemonize                   yes
# 同一IP允许同时连接的用户数
MaxClientsPerIP             8
VerboseLog                  no
# 即使客户端没有发送 '-a' 选项也列出隐藏文件( dot-files 。
DisplayDotFiles             yes
# 不允许认证用户 - 仅作为一个公共的匿名FTP。
AnonymousOnly               no
# 不允许匿名连接,仅允许认证用户使用。
NoAnonymous                 no
SyslogFacility              ftp
DontResolve                 yes
# 客户端允许的最大的空闲时间
MaxIdleTime                 15
PureDB                        /etc/pure-ftpd/pureftpd.pdb
LimitRecursion              10000 8
# 允许匿名用户创建新目录? 
AnonymousCanCreateDirs      no
# 如果系统被 loaded 超过下面的值,匿名用户会被禁止下载。
MaxLoad                     4
AntiWarez                   yes
Umask                       133:022
MinUID                      1000
UseFtpUsers                    no
# 仅允许认证用户进行 FXP 传输。 
AllowUserFXP                no
# 对匿名用户和非匿名用户允许进行匿名 FXP 传输。 
AllowAnonymousFXP           no
ProhibitDotFilesWrite       no
# 禁止读点文件(文件名以 '.' 开头的文件) (.history, .ssh...)
ProhibitDotFilesRead        no
# 永不覆盖文件。当上传的文件,其文件名已经存在时,自动重命名
AutoRename                  no
# 不接受匿名用户上传新文件( no = 允许上传)
AnonymousCantUpload         yes
AltLog                     clf:/var/log/pureftpd.log
MaxDiskUsage               99
CustomerProof              yes

在启动pure-ftpd之前,先关闭前面开启的vsftpd服务:

systemctl stop vsftpd
systemctl start pure-ftpd

建立与虚拟账号关联的系统账号,这样当虚拟账号登录的时候,使用的就是这个系统账号的身份进行操作。

useradd pure-ftpd
mkdir /data/ftp
chown -R pure-ftpd:pure-ftpd /data/ftp
pure-pw useradd ftp_user1 -u pure-ftpd -d /data/ftp/

-u表示将ftp_user1虚拟用户与系统用户pure-ftpd相关联,-d指定它的根目录。

然后创建用户信息数据库文件:

pure-pw mkdb

pure-pw还可以列出当前的FTP账号以及删除某个账号:

pure-pw list
pure-pw userdel ftp_user1

标签: 文件服务

添加新评论