ftp服务器之vsftp

时间:2022-08-24 03:42:24


一、简介


文件传输协议(FTP,File Transfer Protocol),即能够让用户在互联网中上传、下载文件的文件协议,而FTP服务器就是支持FTP传输协议的主机,要想完成文件传输则需要FTP服务端和FTP客户端的配合才行。

通常用户使用FTP客户端软件向FTP服务器发起连接并发送FTP指令,服务器收到用户指令后将执行结果返回客户端。

ftp服务器之vsftp        

FTP协议占用两个端口号:

21端口:命令连接,用于接收客户端执行的FTP命令。

20端口:数据连接,用于上传、下载文件数据。

FTP数据传输的类型:

主动模式:FTP服务端主动向FTP客户端发起连接请求。

被动模式:FTP服务端等待FTP客户端的连接请求。


命令连接:传输指令,21/tcp
    客户端发出请求,服务端响应
数据连接:传输数据
    注意:数据连接必然是通过某个命令连接发起;

    主动模式(PORT):服务器向客户端发起数据传输请求;
        服务器端口:固定;
    被动模式(PASV):客户端向服务器端发起数据传输请求;
        服务器端口:半随机  
      



二、Linux下实现方式


Vsftpd即“Very Secure FTP Daemon”是一款运行在类Unix操作系统的FTP服务端程序,Vsftpd主打的是安全性、完全开源及免费、速率高、支持IPv6、虚拟用户功能等等其他FTP服务端软件不具备的功能。


清除iptables规则并关闭selinux

[root@bogon ~]# iptables -F[root@bogon ~]# setenforce 0


安装vsftpd程序包

[root@bogon ~]# yum install vsftpd -y


Vsftpd的程序与配置文件:

主程序 /usr/sbin/vsftpd
用户禁止登陆列表 /etc/vsftpd/ftpusers
/etc/vsftpd/user_list
主配置文件 /etc/vsftpd/vsftpd.conf


先来分析下vsftpd程序的主配置文件:

[root@linuxprobe ~]# cat /etc/vsftpd/vsftpd.conf


主配置文件长达123行,但大部分是以#号开始的,这些都是注释信息,我们可以过滤掉它们。

备份vsftpd的主配置文件:

[root@bogon ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak


去除以#号开头的注释行

[root@bogon vsftpd]# grep -v "#" vsftpd.conf.bak > vsftpd.conf[root@bogon vsftpd]# cat vsftpd.confanonymous_enable=YESlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=YESpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES


Vsftpd的验证方式

vsftpd程序提供的FTP服务可选认证方式,分别为匿名访问、本地用户和虚拟用户:

匿名访问:任何人无需验证口令即可登入FTP服务端。

本地用户:使用FTP服务器中的用户、密码信息。

虚拟用户:创建独立的FTP帐号资料。

顾名思义匿名访问就是所有人均可随意登入FTP服务,这样自然会产生安全问题,一般用于存放公开的数据。

而本地用户与虚拟用户则需要用户提供帐号及口令后才能登入FTP服务,更加的安全,而虚拟用户则是最安全的。


匿名访问模式

               

FTP匿名访问模式是比较不安全的服务模式,尤其在真实的工作环境中千万不要存放敏感的数据,以免泄露。

vsftpd程序默认已经允许匿名访问模式,我们要做的就是开启匿名用户的上传和写入权限,添加下面的参数:

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
参数 作用
anonymous_enable=YES 允许匿名访问模式。
anon_umask=022 匿名用户上传文件的umask值。
anon_upload_enable=YES 允许匿名用户上传文件,生效要依赖于write_enable=YES;
anon_mkdir_write_enable=YES 允许匿名用户创建目录
anon_other_write_enable=YES 允许匿名用户的删除及重命名操作权限;

确认填写正确后保存并退出vsftpd.conf文件,然后重启vsftpd服务程序并设置为开机自启动。

用另一台机器来访问此ftp

需要用到ftp服务

[root@bogon ~]# yum install ftp -y[root@bogon ~]# ftp 172.18.1.102Connected to 172.18.1.102 (172.18.1.102).220 (vsFTPd 2.2.2)Name (172.18.1.102:root): anonymous331 Please specify the password.Password:敲击回车230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> ls227 Entering Passive Mode (172,18,1,102,210,123).150 Here comes the directory listing.drwxr-xr-x    2 0        0            4096 Jul 24  2015 pub226 Directory send OK.ftp>cd pub250 Directory successfully changed.ftp> mkdir files550 Permission denied.


这里提示拒绝是因为匿名访问模式的FTP根目录为/var/ftp/pub

匿名用户的FTP根目录所有者/组都是root,所以匿名用户没有写入权限,那我们将所有者修改为ftp就可以了。

[root@bogon ~]# chown ftp /var/ftp/pub


本地用户模式

既然要使用本地用户模式,而本地用户模式确实要比匿名访问模式更加的安全,所以本实验中会关闭匿名访问模式。

vsftpd服务程序默认已经允许本地用户模式,我们要做的是添加设置本地用户模式权限的参数:

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
参数 作用
anonymous_enable=NO 禁止匿名访问模式。
local_enable=YES 允许本地用户模式。
write_enable=YES 设置可写入权限。
local_umask=022 本地用户模式创建文件的umask值。
userlist_deny=YES 参数值为YES即禁止名单中的用户,参数值为NO则代表仅允许名单中的用户。
userlist_enable=YES 允许“禁止登陆名单”,名单文件为ftpusers与user_list。

确认填写正确后保存并退出vsftpd.conf文件,然后重启vsftpd服务程序并设置为开机自启动。

查看ftpusers或user_list文件中禁止登陆用户名单

[root@bogon vsftpd]# cat ftpusers # Users that are not allowed to login via ftprootbindaemonadmlpsyncshutdownhaltmailnewsuucpoperatorgamesnobody

vsftpd服务为了让FTP服务更加的安全,默认禁止以root身份登入,那么创建个普通用户吧:

[root@bogon vsftpd]# useradd linuxtest[root@bogon vsftpd]# echo linuxtest | passwd --stdin linuxtestChanging password for user linuxtest.passwd: all authentication tokens updated successfully.


在客户端尝试登入FTP服务即可。这里跳过。


虚拟用户模式

虚拟用户:
    基于db文件:
        /etc/vsftpd/vusers.txt文件
            奇数行:用户名
             偶数行:密码
    基于mysql服务:


因为虚拟用户模式的帐号口令都不是真实系统中存在的,所以只要配置妥当虚拟用户模式会比本地用户模式更加安全,但是Vsftpd服务配置虚拟用户模式的操作步骤相对复杂一些,具体流程如下:

第1步:建立虚拟FTP用户数据库文件。

第2步:创建FTP根目录及虚拟用户映射的系统用户。

第3步:建立支持虚拟用户的PAM认证文件。

第4步:在vsftpd.conf文件中添加支持配置。

第5步:为虚拟用户设置不同的权限。

第6步:重启vsftpd服务,验证实验效果。


第1步:建立虚拟FTP用户数据库文件。

切换至vsftpd程序目录:

[root@bogon vsftpd]# cd /etc/vsftpd/

创建用于生成FTP用户数据库的原始帐号和密码文件:

[root@bogon vsftpd]# vim vuser.list//单数帐号,双数密码。linuxtestlinuxtestblack123456

使用db_load命令用HASH算法生成FTP用户数据库文件vuser.db:

[root@linuxprobe vsftpd]# db_load -T -t hash -f vuser.list vuser.db

查看数据库文件的类型:

[root@bogon vsftpd]# file vuser.db vuser.db: Berkeley DB (Hash, version 9, native byte-order)

FTP用户数据库内容很敏感,所以权限给小一些:

[root@bogon vsftpd]# chmod 600 vuser.db

删除原始的帐号和密码文件:

[root@bogon vsftpd]# rm -f vuser.list

第2步:创建FTP根目录及虚拟用户映射的系统用户

创建用户virtual并设置为不允许登陆系统并定义该用户的家目录:

[root@bogon vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual

查看该用户的家目录权限:

[root@bogon vsftpd]# ls -ld /var/ftproot/drwx------. 3 virtual virtual 74 May  7 14:52 /var/ftproot/

为保证其他用户可以访问,给予rwxr-xr-x权限:

[root@bogon vsftpd]# chmod -Rf 755 /var/ftproot/

第3步:建立支持虚拟用户的PAM认证文件:

[root@bogon vsftpd]# vim /etc/pam.d/vsftpd.vu//参数db用于指向刚刚生成的vuser.db文件,但不要写后缀。auth       required     pam_userdb.so db=/etc/vsftpd/vuseraccount    required     pam_userdb.so db=/etc/vsftpd/vuser

第4步:在vsftpd.conf文件中添加支持配置。
既然要使用虚拟用户模式,而虚拟用户模式确实要比匿名访问模式更加的安全,配置的同时也关闭匿名开放模式。

[root@bogon ~]# vim /etc/vsftpd/vsftpd.conf
参数 作用
anonymous_enable=NO 禁止匿名开放模式。
local_enable=YES 允许本地用户模式。
guest_enable=YES 开启虚拟用户模式。
guest_username=virtual 指定虚拟用户帐号。
pam_service_name=vsftpd.vu 指定pam文件。
allow_writeable_chroot=YES 允许禁锢的FTP根目录可写而不拒绝用户登入请求。

第5步:为虚拟用户设置不同的权限
现在不论是linuxprobe还是blackshield帐户,他们的权限都是相同的――默认不能上传、创建、修改文件,如果希望用户blackshield能够完全的管理FTP内的资料,就需要让FTP程序支持独立的用户权限配置文件了:
指定用户独立的权限配置文件存放的目录:

[root@bogon ~]# vim /etc/vsftpd/vsftpd.confuser_config_dir=/etc/vsftpd/vusers_dir

创建用户独立的权限配置文件存放的目录:

[root@bogon ~]# mkdir /etc/vsftpd/vusers_dir/

切换进入到该目录中:

[root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/

创建空白的linuxprobe的配置文件:

[root@linuxprobe vusers_dir]# touch linuxprobe

指定blackshield用户的具体权限:

[root@bogon vusers_dir]# vim blackshieldanon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YES

第6步:重启vsftpd服务,验证实验效果。
确认填写正确后保存并退出vsftpd.conf文件,重启vsftpd程序并设置为开机后自动启动。



当然,用户数据库也可以基于MySQL

下面给出大致实现方式


基于mysql服务:        

 yum -y  groupinstall  "Development Tools" "Server Platform Development" yum -y install pam-devel openssl-devel mariadb-devel             ./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security make && make install

            
pam配置文件:

auth required pam_mysql.so user=vsftpd passwd=mageedu host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2account required pam_mysql.so user=vsftpd passwd=mageedu host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2





本文出自 “我的学习笔记” 博客,请务必保留此出处http://zhaoyongtao.blog.51cto.com/10955972/1771004