文章转载来自:https://www.2cto.com/os/201708/666967.html
参考文章:
玩转vsftpd服务器的四大高级配置
我见过最好的vsftpd配置教程
FTP传输模式
文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。
FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式。主被动模式均是以FTP服务器端为参照。
FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
在企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21端口即可。
以上内容来自:http://www.linuxidc.com/Linux/2017-06/144886.htm
Vsftp安装与配置
安装
在linux环境下,使用最多的FTP服务端软件就是Vsftpd!
安装Vsftpd,运行一下命令需要在root用户下进行!
yum install vsftpd
启动服务
service vsftpd start //或者 systemctl start vsftpd.service
重启服务使用restart
配置
配置文件说明
①/etc/vsftpd/vsftpd.conf这个文件是vsftpd服务的核心配置文件!
我们在修改配置文件的时候,最好先备份一份!
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
我们先来了解一下里边可以配置的大致内容:
useradd 新的用户名 passwd 新的用户名
然后需要修改配置文件:
anonymous_enable=NO #禁止匿名用户登录 chown_uploads=NO #设定禁止上传文件更改宿主 nopriv_user=ftptest #设定支撑Vsftpd服务的宿主用户为新建用户 ascii_upload_enable=YES ascii_download_enable=YES #设定支持ASCII模式的上传和下载功能。 userlist_enable=YES userlist_deny=NO
最后打开/etc/vsftpd/user_list文件,将新建的用户添加到最后一行(一个用户一行)
这种模式下,登录访问的目录就是/home/新建用户/
虚拟用户配置
系统用户模式虽然可以控制访问,但是如果用户过多,就会影响服务器系统的管理,对服务器安全造成威胁!而且我们需要的仅仅是可以使用搭建在服务器的FTP服务而已!
那么就需要我们设置虚拟用户进行登录,这也是推荐的方式!这种方式更加安全!
虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。
一、首先需要我们新建一个虚拟宿主用户,也就是上边说的要映射的真实用户:
useradd virtualhost -s /sbin/nologin
这里设置宿主用户也不允许登录系统!
二、然后修改配置文件,下边我给出我的设置:
anonymous_enable=NO #设定不允许匿名访问 local_enable=YES #设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。 write_enable=YES #设定可以进行写操作。 local_umask=022 #设定上传后文件的权限掩码。 anon_upload_enable=NO #禁止匿名用户上传。 anon_mkdir_write_enable=NO #禁止匿名用户建立目录。 dirmessage_enable=YES #设定开启目录标语功能。 xferlog_enable=YES #设定开启日志记录功能。 connect_from_port_20=YES #设定端口20进行数据连接。(主动模式) chown_uploads=NO #设定禁止上传文件更改宿主。 #chown_username=whoever xferlog_file=/var/log/xferlog #设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。 xferlog_std_format=YES #设定日志使用标准的记录格式。 #idle_session_timeout=600 #设定空闲连接超时时间,单位为秒,这里默认。 #data_connection_timeout=120 #设定空闲连接超时时间,单位为秒,这里默认 #nopriv_user=ftptest async_abor_enable=YES #设定支持异步传输功能。 ascii_upload_enable=YES ascii_download_enable=YES #设定支持ASCII模式的上传和下载功能。 ftpd_banner=Welcome to blah FTP service. #设定Vsftpd的登陆标语。 #deny_email_enable=YES # (default follows) #banned_email_file=/etc/vsftpd/banned_emails chroot_list_enable=NO #禁止用户登出自己的FTP主目录。 # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list ls_recurse_enable=NO #禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁。 listen=YES 设定该Vsftpd服务工作在StandAlone模式下 #listen_ipv6=YES userlist_enable=YES #设定userlist_file中的用户将不得使用FTP。 #userlist_deny=NO tcp_wrappers=YES #设定支持TCP Wrappers #下边是关于虚拟用户的重要配置 guest_enable=YES #设定启用虚拟用户功能。 guest_username=virtualhost #指定虚拟用户的宿主用户。 virtual_use_local_privs=YES #设定虚拟用户的权限符合他们的宿主用户。 pam_service_name=vsftpd #设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。 user_config_dir=/etc/vsftpd/virtualconf #设定虚拟用户个人Vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件,一个需要注意的地方就是这些配置文件名必须和虚拟用户名相同。
需要注意的地方:
①Vsftpd的日志文件不存在,建立Vsftpd的日志文件,并更该属主为Vsftpd的服务宿主用户。
touch /var/log/vsftpd.log chown virtualhost.virtualhost /var/log/vsftpd.log
②建立虚拟用户配置文件存放路径:
mkdir /etc/vsftpd/virtualconf
这里是跟配置文件中的user_config_dir这一项是对应的!
三、接着制作虚拟用户数据库文件,这里需要先安装db4包,用来支持文件数据库。
安装:
yum install db4
然后建立虚拟用户名单文件:touch /etc/vsftpd/virtusers
建立了一个虚拟用户名单文件,这个文件就是来记录vsftpd虚拟用户的用户名和口令的数据文件,我这里给它命名为virtusers。为了避免文件的混乱,我把这个名单文件就放置在/etc/vsftpd/下。
接着编辑这个文件,将虚拟用户信息写入这个文件vi /etc/vsftpd/virtusers
virtual1 123456 virtual2 123456
类似上边的格式,一行用户名,一行密码!
接着生成虚拟用户数据文件:
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
四、设定PAM验证文件,并指定虚拟用户数据库文件进行读取
这里需要我们安装pam服务,一般系统都会有安装:
yum install pam
Vsftp的PAM验证配置文件:/etc/pam.d/vsftpd
这里对应的就是核心配置文件中的pam_service_name,它会去找/etc/pam.d/vsftpd这个文件!
那么我们需要编辑这个文件,同样的编辑前先备份一下:
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
然后编辑文件:vi /etc/pam.d/vsftpd
#%PAM-1.0 auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
以上两条是手动添加的,内容是对虚拟用户的安全和帐户权限进行验证。
这里的auth是指对用户的用户名口令进行验证。
这里的accout是指对用户的帐户有哪些权限哪些限制进行验证。
其后的sufficient表示充分条件,也就是说,一旦在这里通过了验证,那么也就不用经过下面剩下的验证步骤了。相反,如果没有通过的话,也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核。
再后面的/lib/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。
最后的db=/etc/vsftpd/virtusers则指定了验证库函数将到这个指定的数据库中调用数据进行验证。
这里有一个问题需要注意一下:
如果你的系统是64位的,那么这里要改成:
/lib64/security/pam_userdb.so
否则会验证失败!不能登录!
五、配置虚拟用户
1.规划好虚拟用户的主路径:mkdir /opt/vsftp/
2.建立测试用户的FTP用户目录:
mkdir /opt/vsftp/virtual1/ /opt/vsftp/virtual2/
3.建立虚拟用户配置文件模版:
cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/virtualconf/vconf.tmp
4.定制虚拟用户模版配置文件: vi /etc/vsftpd/virtualconf/vconf.tmp
local_root=/opt/vsftp/virtuser 指定虚拟用户的具体主路径。 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_clients=10 设定并发客户端访问个数。 max_per_ip=5 设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件。 local_max_rate=50000 设定该用户的最大传输速率,单位b/s。
这里将原vsftpd.conf配置文件经过简化后保存作为虚拟用户配置文件的模版。这里将并不需要指定太多的配置内容,主要的框架和限制交由 Vsftpd的主配置文件vsftpd.conf来定义,即虚拟用户配置文件当中没有提到的配置项目将参考主配置文件中的设定。而在这里作为虚拟用户的配置文件模版只需要留一些和用户流量控制,访问方式控制的配置项目就可以了。这里的关键项是local_root这个配置,用来指定这个虚拟用户的FTP主路径。
5.更改虚拟用户的主目录的属主为虚拟宿主用户:
chown -R virtualhost.virtualhost/opt/vsftp/
6.配置虚拟用户,从虚拟用户模版配置文件复制:
cp /etc/vsftpd/virtualconf/vconf.tmp /etc/vsftpd/virtualconf/virtual1
7.针对具体用户进行定制:vi /etc/vsftpd/virtualconf/virtual1
local_root=/opt/vsftp/virtual1 anonymous_enable=NO write_enable=YES local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO idle_session_timeout=300 data_connection_timeout=90 max_clients=1 max_per_ip=1 local_max_rate=25000
当然,如果很熟练的话3,4,6步骤都可以省略!不要设置!
这里主要是为了方便!可以在原来的基础的进行修改而已!
最后别忘了,开启或者重启服务!
测试
我们可以先在模板目录新建一个空文件
touch /opt/vsftp/virtual1/test.txt
登录一下,在windows打开cmd:(当然我们使用浏览器,或者使用windows文件浏览窗口都可以!)
ftp 192.168.164.133
使用用户virtual1和密码123456登录!
然后输入ls,展示该目录下文件列表。
看有没有我们刚才新建的test.txt文本?!
然后测试一下上传,使用put命令,然后看一下目录中是否有上传的文件?
接着测试一下建立目录操作:mkdir newdir,看是否有新目录被创建?!
然后测试一下下载:使用get test.txt,将test.txt文件下载到本地!注意默认的下载路径为windows用户目录c:\Users\xxxxx目录下`!