Linux 配置FTP服务器(vsftp)

0 前言

本文记录自己安装配置ftp服务器的全过程
ftp提供3种登录方式,


1 常用命令

# 安装 vsftpd
yum install -y vsftpd

# 检查|启动|停止|重启 vsftpd 服务
service vsftpd status|start|stop|restart

# 设置开机自启动
systemctl enable vsftpd.service

# 让防火墙开启 FTP 服务和 21 端口的使用
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload

#备份配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

2 两种访问模式

2.1 主动模式

客户端向服务器的 ftp 端口(默认是 21)发送连接请求,服务器接受连接,建立一条命令链路;
当需要传送数据时,客户端在命令链路上用 port 命令告诉服务器:”我打开了 xxxx 端口,你过来连接我”;
于是服务器从 20 端口向客户端的 xxxx 端口发送连接请求,建立一条数据链路来传送数据。

2.2 被动模式

客户端向服务器的 ftp 端口(默认是 21)发送连接请求,服务器接受连接,建立一条命令链路;
当需要传送数据时,服务器在命令链路上用 pasv 命令告诉客户端:”我打开了 xxxx 端口,你过来连接我”;
于是客户端向服务器的 xxxx 端口发送连接请求,建立一条数据链路来传送数据。

2.3 优缺点

主动模式很容易受到防火墙的限制,因为大多数客户端都是在 NAT 环境中上网的,因此服务器无法向客户端的 xxx 端口发起连接;
被动模式则不会受到防火墙的限制,因为这就是一个普通的 NAT 操作,这是完全允许的,并且被动模式的安全性相对来说更高一些。

2.4 开启被动模式

编辑配置文件:

#vim /etc/vsftpd/vsftpd.conf

# 启用 pasv 模式
pasv_enable=YES
# pasv 端口起始号
pasv_min_port=60000
# pasv 端口结束号
pasv_max_port=60100

3 三种登录模式

在 vsftpd 服务器中支持匿名用户,本地用户,和虚拟用户3类用户账号,用途及区别如下:

  • 匿名用户: 是名为anonymous或ftp的用户,匿名FTP用户登录后将FTP服务器中的/var/ftp作为FTP根目录。
  • 本地用户: 是 Linux 系统用户账号,使用本地用户账号登录FTP服务器后,登录目录为本地用户的宿主目录。
  • 虚拟用户: 为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户相对安全,因此正逐步替代本地用户账号的使用。

4 相关文件及所在目录

# vsftp配置文件
/etc/vsftpd/vsftpd.conf

# PAM认证文件
/etc/pam.d/vsftpd

# 匿名用户默认目录
/var/ftp

# 匿名用户的下载目录
/var/ftp/pub

# 不能访问 ftp server 的用户列表
/etc/vsftpd/ftpusers

# 允许访问 ftp server 的用户列表
/etc/vsftpd/user_list

# ftp 的上传下载日志
/var/log/xferlog

5 配置文件vsftpd.conf备注

# 是否允许匿名登录FTP服务器。
anonymous_enable=NO

# 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,
# 默认设置为YES允许,本地用户登录后会进入用户主目录;
# 而匿名用户登录后进入匿名用户的下载目录/var/ftp;
# 若只允许匿名用户访问,前面加上#,可阻止本地用户访问FTP服务器。
local_enable=YES

# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许。
write_enable=YES

# 设置本地用户的文件掩码为缺省022,
# 也可根据个人喜好将其设置为其他值。
local_umask=022

# 是否允许匿名用户上传文件,须将上面的write_enable设置为YES允许。
#anon_upload_enable=YES

# 是否允许匿名用户创建新文件夹。
#anon_mkdir_write_enable=YES

# 是否激活目录欢迎信息功能,
# 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息;
# 默认情况下,欢迎信息是通过该目录下的.message文件获得的,
# 此文件保存自定义的欢迎信息,由用户自己建立。
dirmessage_enable=YES

# 如果启用此选项,系统将会维护记录服务器上传和下载情况的日志文件;
# 默认情况该日志文件为/var/log/vsftpd.log,
# 也可以通过下面的xferlog_file选项对其进行设定。
xferlog_enable=YES

# 设定FTP服务器将启用FTP数据端口的连接请求,ftp-data数据传输,21为连接控制端口。
connect_from_port_20=YES

# 设定是否允许改变上传文件的属主,与下面一个设定项配合使用;
# 注意,不推荐使用root用户上传文件。
#chown_uploads=YES

# 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名;
# 例如可以把上传的文件都改成root属主。whoever:任何人。
#chown_username=whoever

# 设定系统维护记录FTP服务器上传和下载情况的日志文件,
# /var/log/vsftpd.log是默认的,也可以另设其它
#xferlog_file=/var/log/vsftpd.log

# 如果启用此选项,传输日志文件将以标准xferlog的格式书写;
# 该格式的日志文件默认为/var/log/xferlog,
# 也可以通过xferlog_file选项对其进行设定,默认值为NO
xferlog_std_format=YES

# 如果添加并启用此选项,将生成两个相似的日志文件;
# 默认在/var/log/xferlog和/var/log/vsftpd.log目录下;
# 前者是wu_ftpd类型的传输日志,可以利用标准日志工具对其进行分析,后者是vsftpd类型的日志。
#dual_log_enable

# 如果添加并启用此选项,则原本应该输出到/var/log/vsftpd.log中的日志,将输出到系统日志中。
#syslog_enable

# 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒;
# 即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒,可以根据实际情况对该值进行修改。
idle_session_timeout=600

# 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改。
data_connection_timeout=120

# 运行vsftpd需要的非特权系统用户,缺省是nobody。
#nopriv_user=ftpsecure

# 如果FTPclient会下达“async ABOR”这个指令时,这个设定才需要启用;
# 而一般此设定并不安全,所以通常将其取消。
#async_abor_enable=YES

# 大多数FTP服务器都选择用ASCII方式传输数据,
# 将#去掉就能实现用ASCII方式上传文件。
#ascii_upload_enable=YES

# 将#去掉就能实现用ASCII方式下载文件
#ascii_download_enable=YES

# 将#去掉可设置登录FTP服务器时显示的欢迎信息,
# 可以修改=后的欢迎信息内容。
# 另外如在需要设置更改目录欢迎信息的目录下创建名为.message的文件,
# 并写入欢迎信息保存后,在进入到此目录会显示自定义欢迎信息。
#ftpd_banner=Welcome to blah FTP service. 

# 可将某些特殊的email address抵挡住。
# 如果以anonymous登录服务器时,会要求输入密码,也就是您的email address;
# 如果很讨厌某些email address,就可以使用此设定来取消他的登录权限,但必须与下面的设置项配合。
#deny_email_enable=YES

# 当上面的deny_email_enable=YES时,可以利用这个设定项来规定那个email address不可登录vsftpd服务器。
# 此文件需用户自己创建,一行一个email address即可。
#banned_email_file=/etc/vsftpd/banned_emails

# 是否将所有用户限制在主目录,YES 为启用,NO 禁用。
# 为 YES 时,用户被锁定在自己的home目录中;
# 为 NO 时,用户登录FTP服务器后具有访问自己目录以外的其他文件的权限。
# vsftpd 将寻找 chroot_list 文件作为用户名单,此文件需用户建立。
chroot_local_user=YES

# 如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限。
# 下面这条命令将允许主目录继续保持写权限。
allow_writeable_chroot=YES

# 是否启动限制用户例外的名单,YES 为启用,NO 禁用。
chroot_list_enable=NO

# 此文件需自己建立,每行一个用户,
# 被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录,
# 由FTP服务器自动地chrooted到用户自己的home目录下;
# 使得chroot_list文件中的用户不能随意转到其他用户的FTPhome目录下,
# 从而有利于FTP服务器的安全管理和隐私保护。
# chroot_list_file=/etc/vsftpd/chroot_list

# 举例:
# 所有用户限制在主目录下,chroot_list 中的用户不受限制:
# [chroot_local_user=YES] & [chroot_list_enable=YES]
# 所有用户限制在主目录下,不启用 chroot_list:
# [chroot_local_user=YES] & [chroot_list_enable=NO]
# 所有用户不限制在主目录下,chroot_list 中的用户受限制:
# [chroot_local_user=NO] & [chroot_list_enable=YES]

# 指定用户登录后的ftp主目录。
local_root=/usr/share/nginx/www/

# 是否允许递归查询,大型站点的FTP服务器启用此项可以方便远程用户查询。
ls_recurse_enable=YES

# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPV4连接请求。
listen=YES

# 设定是否支持IPV6
#listen_ipv6=YES

# 设置PAM外挂模块提供的认证服务所使用的配置文件名;
# 即/etc/pam.d/vsftpd文件;
# 此文件中file=/etc/vsftpd/ftpusers字段,
# 说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中。
pam_service_name=vsftpd

# 若此项设为YES,ftpusers 和 user_list 文件中的用户都允许登录FTP服务器;
# 若此项设为NO,ftpusers 中的用户禁止登录,user_list 中的用户允许登录;
userlist_enable=YES

# 仅当 userlist_enable=YES 时,userlist_deny 设置才有效。
# 若此项为YES,则 user_list 文件中的用户将不允许登录FTP服务器,
# 甚至连输入密码提示信息都没有,直接被FTP服务器拒绝。
#userlist_deny=YES

# 举例:
# ftpusers 中的用户禁止登录,user_list 中的用户无法登录(甚至连输入密码提示信息都没有,直接被FTP服务器拒绝)
# [userlist_enable=YES] & [userlist_deny=YES]
# ftpusers 中的用户禁止登录,user_list 中的用户可以登录
# [userlist_enable=YES] & [userlist_deny=NO]

# 表明服务器使用tcp_wrappers作为主机访问控制方式;
# tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制;
# 在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制;
# 前者设置允许访问记录,后者设置拒绝访问记录。
# 例如想限制某些主机对FTP服务器192.168.57.2的匿名访问,
# 编缉/etc/hosts.allow文件,
# 如在下面增加两行命令:vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY,
# 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器,
# 此时FTP服务器虽可以PING通,但无法连接。
tcp_wrappers=YES

# 启用 pasv 模式
pasv_enable=YES
# pasv 端口起始号
pasv_min_port=12000
# pasv 端口结束号
pasv_max_port=12199

建立ftp账户

# 新建一个名为 ftper 的本地帐号,禁止登陆 shell
useradd -s /sbin/nologin ftper

# 为建好的 ftper 帐号设置密码
passwd ftper

# 因为账号禁止登录shell,所以还要修改pam文件
# auth required pam_shells.so
# 修改为->
# auth required pam_nologin.so
vim /etc/pam.d/vsftpd

# 重启vsftpd
systemctl restart vsftpd.service

3.1 匿名登录

vsftpd默认以匿名用户访问,匿名用户默认访问的FTP服务器端路径为:
/var/ftp/pub
匿名用户只有查看权限,无法创建、删除、修改。如需关闭FTP匿名用户访问,需修改配置文件
/etc/vsftpd/vsftpd.conf

anonymous_enable=YES
修改为
anonymous_enable=NO

重启Vsftpd服务即可。

如果允许匿名用户能够上传、下载、删除文件,需在

/etc/vsftpd/vsftpd.conf

配置文件中加入如下代码:

#允许匿名用户上传文件;
anon_upload_enable=YES
#允许匿名用户创建目录
anon_mkdir_write_enable=YES
#允许匿名用户其他写入权限
anon_other_write_enable=YES

匿名用户完整配置文件代码如下:

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=NO
# 启用 pasv 模式
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100

由于默认Vsftpd匿名用户有两种:anonymous、ftp,所以匿名用户如果需要上传文件、删除及修改等权限,需要ftp用户对/var/ftp/pub目录有写入权限,使用如下chown和chmod任意一种即可,设置命令如下:

chown -R ftp /var/ftp/pub/

如上vsftpd.conf配置文件配置完毕,同时权限设置完,重启vsftpd服务即可,通过Windows客户端访问,能够上传文件、删除文件、创建目录等操作

4 系统用户登录

vsftpd就是使用系统用户去登录ftp服务器。

实现Vsftpd系统用户方式验证,只需在Linux系统中创建多个用户即可,创建用户使用useradd,同时给用户设置密码,即可通过用户和密码登录FTP,进行文件上传、下载、删除等操作。

添加用户

useradd ggftp

设置密码

passwd ggftp

修改配置文件

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=NO
发布了39 篇原创文章 · 获赞 44 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/founderznd/article/details/103462976