Linux搭建FTP服务器

由于最近做一个需求需要通过ftp下载文件进行解析入库,目前ftp服务器还没搭建好,所以,自己尝试使用虚拟机搭建一个ftp服务器来测试功能是否正常。

一、ftp简介

ftp工作是会启动两个通道:

控制通道、数据通道

在ftp协议中,控制连接均是由客户端发起的,而数据连接有两种模式:port模式(主动模式)和pasv(被动模式)

1、PORT模式:

在客户端需要接收数据时,ftp_client(大于1024的随机端口)-PORT命令->ftp_server(21)发送PORT命令,这个PORT命令包含了客户端是用什么端口来接收数据(大于1024的随机端口),在传送数据时,ftp_server将通过自己的TCP 20 端口和PORT中包含的端口建立新的连接来传送数据。

2、PASV模式:

传送数据时,ftp_client--PASV命令-->ftp_server(21) 发送PASV命令时,ftp_server自动打开一个1024--5000之间的随机端口并且通知ftp_client在这个端口上传送数据,然后客户端向指定的端口发出请求连接,建立一条数据链路进行数据传输。

二、安装ftp

1、验证是否已经安装过ftp

rpm -qa vsftpd

rpm -qa | grep vsftpd


2、安装ftp

yum install –yvsftpd

Linux搭建FTP服务器_第1张图片

如图 表示已经安装成功。

卸载ftp

rpm –e vsftpd

3、ftp相关配置文件和目录

/etc/vsftpd:vsftpd的配置文件存放的目录。


1)/etc/vsftpd/ftpusers:禁止使用vsftpd的用户列表文件; 记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。

Linux搭建FTP服务器_第2张图片

2)/etc/vsftpd/user_list:禁止或允许使用vsftpd的用户列表文件;这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅允许user_list中指定的用户访问FTP服务器。

Linux搭建FTP服务器_第3张图片

3)主配置文件:/etc/vsftpd/vsftpd.conf             

4)vsftpd操作的一些变量和设置:/etc/vsftpd/vsftpd_conf_migrate.sh 

vsftpd的主程序:/usr/sbin/vsftpd                   

/var/ftp:匿名用户主目录 ;本地用户主目录为:/home/用户主目录,即登录后进入自己家目录。   

/var/ftp/pub:匿名用户的下载目录;此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除)。                   

/etc/logrotate.d/vsftpd :vsftpd的日志文件

Linux搭建FTP服务器_第4张图片

/etc/pam.d/vsftpd :PAM认证文件;此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户。

Linux搭建FTP服务器_第5张图片

/etc/rc.d/init.d/vsftpd:启动脚本

4、启动ftp服务

设置开机自启动         

查看ftp服务状态:servicevsftpd status

启动ftp服务:service vsftpdstart

停止ftp服务:service vsftpdstop

设置ftp开机自启动:chkconfig –level2345 vsftpd on或者systemctl enablevsftpd.service

5、/etc/vsftpd/vsftpd.conf配置

查看/etc/vsftpd/vsftpd.conf 默认配置:cat /etc/vsftpd/vsftpd.conf |grep -v '^#';

1)匿名用户默认是可以登录的,用户可使用用户名ftp或anonymous进行ftp登录,登录的目录为/var/ftp,如果不想让用户匿名登录设置anonymous_enable=NO。

2)local_enable=YES:是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许。本地用户登录后会进入用户主目录,前面加上#注释掉即可阻止本地用户访问FTP服务器。

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

4)local_umask=022:掩码,本地用户默认掩码为077。

5)#anon_upload_enable=YES:是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES。

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

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

8)xferlog_enable=YES:是否让系统自动维护上传和下载的日志文件,默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定。

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

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

11)#chown_username=whoever:设置想要改变的上传文件的所有者,如果需要,则输入一个系统用户名。以把上传的文件都改成root用户。whoever是任何人。

12)#xferlog_file=/var/log/xferlog:设定系统维护记录FTP服务器上传和下载情况的日志文件,默认是/var/log/xferlog。

13)xferlog_std_format=YES:是否以标准xferlog的格式书写传输日志文件。默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定,默认值为NO。

以下是附加配置,添加相应的选项将启用相应的设置

1)#idle_session_timeout=600:设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒,即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。

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

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

4)#async_abor_enable=YES:是否识别异步ABOR请求。如果FTP client会下达“async ABOR”这个指令时,这个设定才需要启用,而一般此设定并不安全,所以通常将其取消。

5)#ascii_upload_enable=YES

#ascii_download_enable=YES

是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。启用此选项将允许服务器以ASCII方式传输数据。不过,这样可能会导致由"SIZE /big/file"方式引起的DoS攻击。

6)#ftpd_banner=Welcome to blah FTP service.:登录FTP服务器时显示的欢迎信息,如有需要,可在更改目录欢迎信息的目录下创建名为.message的文件,并写入欢迎信息保存后。

7)#deny_email_enable=YES:黑名单设置。如果很讨厌某些email address,就可以使用此设定来取消他的登录权限,可以将某些特殊的email address抵挡住。

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

9)#chroot_local_user=YES

#chroot_list_enable=YES

用户登录FTP服务器后是否具有访问自己目录以外的其他文件的权限,设置为YES时,用户被锁定在自己的home目录中,vsftpd将在下面chroot_list_file选项值的位置寻找chroot_list文件,必须与下面的设置项配合。

10)#chroot_list_file=/etc/vsftpd/chroot_list:被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录,从而有利于FTP服务器的安全管理和隐私保护。此文件需自己建立。

11)#ls_recurse_enable=YES:是否允许递归查询。默认为关闭,以防止远程用户造成过量的I/O。

12)listen=NO:是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求。

13)listen_ipv6=YES:设定是否支持IPV6。如要同时监听IPv4和IPv6端口,则必须运行两套vsftpd,采用两套配置文件,同时确保其中有一个监听选项是被注释掉的。

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

15)userlist_enable=YES:是否允许ftpusers文件中的用户登录FTP服务器,默认为NO。若此项设为YES,则user_list文件中的用户允许登录FTP服务器。而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有。

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

5、修改FTP服务器端口号,修改/etc/vsftpd/vsftpd.conf,添加如下语句:

listen_port=4888

6、查看ftp状态

sestatus -b | grep ftp

7、在Windows机器上通过ftp登录Linux虚拟机


显示无法登录,本地ping 192.168.1.112网络是通的,考虑是Linux虚拟机对请求做了拦截,登录Linux机器,打开防火墙(vim /etc/sysconfig/iptables)添加21端口的白名单,如果修改过访问端口就添加对应端口的白名单。

Linux搭建FTP服务器_第6张图片

重启防火墙service iptables restart

Linux搭建FTP服务器_第7张图片

Linux搭建FTP服务器_第8张图片

登录成功。

为了安全起见,一般不允许匿名登录,设置anonymous_enable=NO。

添加新用户:useradd -s /sbin/nologin test1

设置密码:passwd test1

如果想使用简单密码可以使用如下命令:echo test1|passwd --stdin test1

在/etc/vsftpd/vsftpd.conf文件中添加如下配置

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

listen_port=2001

pasv_min_port=8888

pasv_max_port=9999

allow_writeable_chroot=YES

如果修改了监听端口,比如这里的2001需要在防火墙中添加白名单

Linux搭建FTP服务器_第9张图片

Linux搭建FTP服务器_第10张图片

在/etc/vsftpd/目录下创建chroot_list文件:touch chroot_list

编辑文件添加创建的ftp用户名

查看SELniux设置

getsebool –a|grep ftp

Linux搭建FTP服务器_第11张图片

可以设置ftpd_full_access、ftpd_use_passive_mode、httpd_can_connect_ftp、tftp_home_dir属性打开状态

setsebool ftpd_full_access1

setsebool ftpd_use_passive_mode1

setsebool httpd_can_connect_ftp1

setsebool tftp_home_dir1

设置SELniux模式

出现问题1)如果cmd出现”226 Transferdone (but failed to open directory).”

Linux搭建FTP服务器_第12张图片

需要设置Linux服务器为Permissive模式

getenforce

setenforce 0

Linux搭建FTP服务器_第13张图片

需要注意的是如果重启Linux系统,需要再次设置setenforce 0。

出现问题2)在本地通过put命令上传文件报” 553 Could not create file.”。


这是因为ftp用户的主目录没有可执行权限,需要执行chmod-R 777 /home/test/命令给目录赋权。


然后尝试put 111.txt成功


在Windows机器中通过cmd输入ftp ip地址 (端口号)连接,然后输入用户名密码。

Linux搭建FTP服务器_第14张图片

上图中pwd列出的”/”根目录不是Linux机器上的根目录,而是test1用户的主目录。

问题3)在使用Windows资源管理器打开ftp时会报”打开FTP服务器上的文件夹时发生错误…”。

Linux搭建FTP服务器_第15张图片

这时需要对IE浏览器进行设置:点击”工具->Internet选项->高级”,找到使用被动FTP(用于防火墙和DSL调制解调器的兼容),去掉勾选。

Linux搭建FTP服务器_第16张图片

再次通过资源管理器连接FTP服务器

Linux搭建FTP服务器_第17张图片

现在就可以看到服务器上用户文件夹下的文件了。

Linux搭建FTP服务器_第18张图片

你可能感兴趣的:(Linux)