FTP服务


FTP file transfer protocol  文件传输协议明文传输


vsftp(相对来说安全性较高)   wu-ftp   proftp


ftp功能

1将使用者划分等级 user  guest  anonymous (可以是普通用户,可以是匿名用户,可以是访客)

2命令记录和登录记录(通过系统日志服务对其进行记录)

3限制使用者活动范围


FTP两种工作模式

1主动模式clientserver发送连接请求(默认21),服务器接受连接,建立控制通道,需要数据传输时,客户端在控制通道用PORT命令告诉服务器:"我打开了XX端口,你过来连我"服务器从20端口向客户端XX端口发送连接请求,建立数据传输通道


2被动模式clientserver发送连接请求(默认21),服务器接受连接,建立控制通道,需要数据传输时,服务器在控制通道用PASV命令告诉客户端:"我打开了XX端口,你过来连我",客户端从yy端口向服务器XX端口发送连接请求,建立数据传输通道。(服务器端的XX端口并不固定)


总结

主动模式里,控制端口21固定, 数据传输端口20固定, 所以有防火墙时,主动模式用的会多一些。(建立数据传输通道时,是服务器主动去连客户端

被动模式里,控制端口21固定,数据传输端口不固定建立数据传输通道时,是客户端主动去连服务端


替代方案sftpSSH提供的一种解决方案)


装包 yum install vsftpd –y

相关文件

/etc/vsftpd/vsftpd.conf          主配置文件   参数=设定值

/etc/pam.d/vsftpd                pam相关的验证文件(pam是一种验证机制

/etc/vsftpd/ftpusers       指定哪些用户无法登录,是一个访问控制文件

/etc/vsftpd/user_list      这个文件是否生效取决于主配置文件中的两个参数

                          userlist_enable   userlist_deny

/etc/vsftpd/chroot_list    需要手动建立将使用者限制在家目录若要生效需添加两个条目                                   chroot_list_enable  chroot_list_file

/usr/sbin/vsftpd           启动文件

/var/ftp/                  匿名用户登录时的根目录


与服务器环境相关的设置

connect_from_port_20=YES/NO    控制.服务器是否使用20端口进行数据传输

listen_port=21定义vsftp        服务器监听端口(命令通道的端口)若出现该条目,则必须是                                    独立的服务(不是由xinetd管理的),改端口就改这儿。

dirmessage_enable=YES/NO       用户进入某个目录时,需要显示的该目录要注意的内容

message_file=.message          使用该条目指定从哪儿读取要显示的信息

listen=YES/NO                  定义vsftp是否以独立的方式启动

pasv_enable=YES/NO             定义是否开启被动模式

use_localtime=YES/NO           定义是否使用本地时间

write_enable=YES/NO            定义是否允许上传

connect_timeout=60             主动模式数据传输连接超时时间(单位秒)

accept_timeout=60              PASV模式数据传输连接超时时间

data_connection_timeout=300    数据传输的超时时间

idle_session_timeout=300       空闲等待超时时间

max_clients=0                  FTP是以独立方式启动的,同一时间能连多少客户端,0是无限制

max_per_ip=0                   定义同一ip的连接数,0是无限制

pasv_min_port=2046,pasv_max_port=2056  定义被动模式数据传输的最小端口和最大端口(因为被动                                        模式的端口是不固定的)

ftpd_banner=fdafdsa            定义登录时显示的说明

banner_file=/path/file                        定义欢迎信息


与真实用户的相关设置

guest_enable=YES/NO        定义将真实帐号登录后映射成指定的用户名(相当于所有用户都会被                              贬

guest_username=ftp         指定访客身份(当上面是YES的时候,下面才生效,相当于贬成了ftp用                            户

local_enable=YES/NO        是否允许本地用户登录

local_max_rate=0           定义真实用户的传输速度 byte/s 0是不限制

chroot_local_user=YES/NO    是否将真实用户的活动范围限制在家目录

chroot_list_enable=YES/NO      是否启用限制活动范围,即是否启用chroot列表功能

chroot_list_file=/etc/vsftpd/chroot_list指定用户列表文件

userlist_enable=YES/NO                 是否启用用户列表功能

userlist_deny=YES/NO                   设置用户是否可以登录YES:不能登录   NO:可以登录

userlist_file=/PATH/FILE                                指定存放用户名的文件


匿名用户相关设置

anonymous_enable=YES/NO            是否允许匿名用户登录,默认YES

anon_world_readable_only=YES/NO    是否允许匿名用户下载

anon_other_write_enable=YES/NO     是否允许匿名用户具有写以外的权限(

anon_mkdir_write_enable=YES/NO     匿名用户是否可以建立目录

anon_upload_enable=YES/NO          是否允许上传

deny_email_enable=YES/NO           是否通过邮件拒绝

banned_email_file=/path/file       定义存放邮件内容的文件

no_anon_password=YES/NO            匿名用户登录是否需要密码

anon_max_rate=0                    匿名用户传输速率,0是无限制

anon_umask=077                                   匿名用户上传文件的权限777077


安全相关

ascii_download_enable=YES/NO    下载时使用ASCII模式进行数据传输(数据传输相对安全)默认NO

ascii_upload_enable=YES/NO      上传时使用ASCII模式,默认NOone_process_model=YES/NO                       是否为每一个连接开启一个独立的进程,此模式消耗资源高,安全性差,性能好

tcp_wrappers=YES/NO             是否支持tcp wrappers(一种安全机制

xferlog_enable=YES/NO           是否记录使用者上传下载信息

xferlog_file=/var/log/xferlog   定义记录文件位置

dual_log_enable=YES,vsftpd_log_file=/var/log/vsftpd.log   两种方式

nopriv_user=nobody              定义启动者的身份

pam_service_name=vsftpd                  定义pam验证模块的名称


注意权限的冲突,权限取交集

注意,能读就能下载

       能写就能上传,建立目录,修改文件

/etc/vsftpd/下并没有chroot_list文件需要手工建立


chown_uploads=YES,匿名用户上传的文件属主转换为别的用户,一般建议为root

chown_username=whoever,改此处的whoever为要转换的属主,建议root

nopriv_user=ftpsecure,指定一个安全账户,让ftp完全隔离和没有特权的账户


local_root=/var/ftp  可以指定共享目录  已实验


常见问题:


1为什么会显示没有FTP命令呢?如下图所示:

wKioL1LGcHKTRrUvAAATxBLNTHA279.jpg

这是因为没有安装ftp客户端引起的。安装ftp客户端即可。可从这个地址去下载相关的软件包。http://rpmfind.net/

wKioL1LGcMiSK_68AABKkzZKvVw574.jpg

安装上之后,就可以使用ftp这个命令了。

似乎 yum install  ftp –y 就可以了。  未试验


2vsftpd.conf配置文件中设置了匿名用户上传,修改,删除权限,登录之后为什么没有权限上传,修改呢最后终于找到问题的原因了。配置文件的设置的确没有问题,但权限是取交集的,如果共享目录没有写权限,那你依然无法上传,修。匿名用户默认的共享目录是/var/ftp,修改其下pub目录的权限,chmod 777 pub  这样,匿名用户登录后在pub目录下就有上传,修改的权限了。


3/var/ftp下创建一个目录aaa(默认权限是755,并在里面创建一个文件111.txt(默认权限是644),然后以匿名用户身份登录(ftp://192.168.1.250,你会发现,你可以下载aaa目录,可以下载111.txt,也可以打开111.txt但无法上传,无法重命名,无法修改,无法删除,虽然你在vsftpd.conf配置文件里面给予了相应的权限,如下图所示,这是什么原因呢?

vsftp服务详解_第1张图片

Chmod 757 aaa -R 这时候就可以上传,重命名,删除了(因为“其它人”有了写权限)。


4ftp://192.168.1.250匿名登上FTP服务器后,假设你在aaa目录下新建了一个目录ddd,在ddd目录里上传了一张图片1.png,并在aaa目录下上传了一个文件333.txt 。这时问题又出现了,你会发现你无法打开上传的333.txt文件,你没有权限。而且当你再次登录FTP服务器的时候,你会发现在ddd目录为空,但以管理员身份登录FTP服务器你确实会发现在ddd目录下有一张图片1.png。那这到底是什么原因呢?

原因很简单,原因是这样的,你上传的图片以及文件的权限为600,也就是说,你只要告诉管理员登录FTP服务器将权限改为607,那么,你再次登录服务器就可以看到你上传的图片和打开你上传的文了


5若想将本地用户禁锢在宿主目录中,开启chroot_local_user=YES 即可。

以下这两项不必开启,这是实验得出的结果。

#chroot_list_enable=YES

# (default follows)

#chroot_list_file=/etc/vsftpd/chroot_list


6可不可以指定共享目录呢?

可以local_root=/var/ftp  可以指定共享目录


7 linux能否为不同的用户指定不同的共享目录呢

这个是可以的。chroot_local_user=YES该命令将用户的共享目录限定为用户家目录,即/home/$user .那么,我们只要将用户的家目录修改,那么就相当于是为不同的用户指定了不同的共享目录。Eg: usermod  –d  /opt/nginx/html lixun ,那么用户lixun的共享目录就是/opt/nginx/html


8那如何给不同的用户设置不同的权限呢?比如,A只可以下载, B可以上传,修改,删除。应用到生产环境下就是,普通用户用B账号登录下载,上传文件的用户用A账号登录


在配置文件中,禁用匿名用户登录anonymous_enable=NO

在配置文件中添加guest_enable=YES

                User_config_dir=/etc/vsftpd_user_conf/

Mkdir /etc/vsftpd_user_conf

Cd /etc/vsftpd_user_conf

Vi aaa

guest_username=aaa

write_enable=YES        //允许上传

chroot_local_user=YES    //限定共享目录为家目录(可以在创建用户时指定启始目录 useradd –                               d /var/tmp/aaa aaa

anon_mkdir_write_enable=YES  //允许建立

anon_upload_enable=YES/NO   //允午上传

anon_other_write_enable=YES  //拥有写以外的权限(重命名,删除)


vi bbb

guest_username=bbb

write_enable=NO

chroot_local_user=YES

anon_world_readable_only=YES


最后的实验结果为aaa账号登录FTP服务器可以上传,新建目录,修改,删除

bbb用户登录,但是却不能下载,这是为什么呢?

这很正常,因为aaa用户传上去的文件只有所有者才有权限,需要管理员把权限改动一下才行。例 chmod 645 111.txt 098 –R  .因为文件夹需要执行权限(098是文件夹)。这样,bbb账号登录后就可以下载了。

有时会遇到这样的情况,aaa自已建的文件夹却删除不了。原因很可能是所有者没有了执行权限。


上的方法是通过建立虚拟用户来实现的不同用户不同权限的。适用于对计算机操作系统不是很了解的客服,销售,人力,行政。

那么还有一种方法就是建立上传账号。适用于开发等IT部门。

具体操作如下

创建用户aaa

查看/var/ftp下的pub文件夹的权限。执行如下操作chmod 757 pub –R 因为“其它人”有写的权限才可以。否则aaa用户登录后没有权限往pub文件夹里写东西,即无法上传

Su – aaa

Cd /var/ftp/pub

Rz 上传东西就可以了。

这时,当其它用户以匿名方式登录后就可以下载aaa上传的文件了。


FTP日志 以及 FTP命令 是遗留问题