Linux配置FTP服务

刘和昶
2023-12-01

FTP是File Transfer Protocal(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。

安装pure-ftpd

在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
  • 安装pure-ftpd
# tar jxf pure-ftpd-1.0.32.tar.bz2

# cd pure-ftpd-1.0.32

# ./configure \

...

# make && make install
  • 配置pure-ftpd

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
  • 测试pure-ftpd
# 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服务

vsftpd是系统默认自带的FTP服务软件,比较常用。

  • 安装vsftpd
# 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

  • 修改全局配置文件/etc/vsftpd.conf

修改用户的配置文件后还不可用,还需要修改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

 类似资料: