Linux:vsftp的使用

FTP协议模型:参考《Linux基础及应用教程(基于CentOS7)第2版》

 用户接口(UI):提供了一个用户接口并使用客户端协议解释器的服务

客户端协议解释器(CPI):向远程服务器协议机发送命令并且驱动客户数据传输过程

服务端协议解释器(SPI):响应客户协议机发出的命令并驱动服务器端数据传输过程

客户端数据传输协议(CDTP):负责完成和服务器数据传输过程及客户端本地文件系统的通信

服务端数据传输协议(SDTP):负责完成和客户数据传输过程及服务器端文件系统的通信

FTP会话存在有两个独立的TCP连接

由CPI和SPI使用的,被称作控制连接(control connection)

由CDTP和SDTP使用的,被称作数据连接(data connection)

  • 控制连接主要用来传送在实际通信过程中需要执行的FTP命令以及命令的响应。
  • 控制连接只需要很小的网络带宽。
  • FTP服务器监听端口号21来等待控制连接建立请求。
  • 控制连接建立以后并不立即建立数据连接,而是服务器通过一定的方式来验证客户的身份,以决定是否可以建立数据传输。
  • 数据连接是等到要目录列表、传输文件时才临时建立的, 并且每次客户端使用不同的端口号来建立数据连接。 一旦数据传输完毕,就中断这条临时的数据连接。
  • 在FTP连接期间,控制连接始终保持通畅的连接状态。 在数据连接存在期间内,控制连接肯定是存在的; 一旦控制连接断开,数据连接会自动关闭。

 

 FTP的数据传输模式

主动传输模式 (Active FTP)

  • FTP的数据连接和控制连接的方向是相反的。 也就是说,是服务器向客户端发起一个用于数据传输的连接。 客户端的连接端口是由服务器端和客户端通过协商确定的。
  • FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接, 然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。
  • 服务器接收到命令后,会用其本地的FTP数据端口(通常是20) 来连接客户端指定的端口N+1,进行数据传输。

被动传输模式 (Passive FTP)

  • FTP的数据连接和控制连接的方向是一致的。 也就是说,是客户端向服务器发起一个用于数据传输的连接。 客户端的连接端口是发起这个数据连接请求时使用的端口号。
  • FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接, 同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。
  • 服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P 命令通知客户端,自己的数据端口是P。 客户端收到命令后,会通过N+1号端后连接服务器的端口P, 然后在两个端口之间进行数据传输。
  • 被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTP服务器的情况。

 

 

 

 

 

 

 

 

 

 


安装:yum install vsftpd

因为iptables禁止ftp协议的端口号,清空iptables的默认策略

iptables -F

service iptables save

vsftp的配置文件:/etc/vsftpd/vdftpd.conf

先把配置文件备份一下

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

去掉注释

grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf

vsftpd 服务程序常用的参数以及作用

vsftpd服务程序:

用户可以以三种认证模式登录到FTP服务器上

匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录

到 FTP 服务器。

若FTP服务器提供匿名访问功能,则匿名用户可以通过输入账号(anonmous或ftp) 和口令(用户自己的E-Mail地址)来进行登录。 当匿名用户登录系统后,其登录目录为匿名FTP服务器的根目录(/var/ftp)。

 本地用户模式:是通过 Linux 系统本地的账户密码信息进行认证的模式,相较于匿名

开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可

以畅通无阻地登录 FTP 服务器,从而完全控制整台服务器。

 虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为 FTP 服务单独

建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在

服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。这样,即使

黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。


安装这ftp 客户端工具:yum install ftp

匿名开放模式

可以向匿名用户开放的权限参数以及作用

在生产环境中或者在 RHCSA、RHCE、 RHCA 认证考试中一定要把配置过的服务程序加入到开机启动项中

systemctl restart vsftpd

systemctl enable vsftpd

在 vsftpd 服务程序的匿名开放认证模式下,其账户统一为 anonymous,密码为空。而且在连接到 FTP 服务器后,默
认访问的是/var/ftp 目录。

登入后,不能访问,是权限问题

在 vsftpd 服务程序的匿名开放认证模式下,默认访问的是/var/ftp 目录。查看该目录的权限得知,只有 root 管理员才有写入权限。

将目录的所有者身份改成系统账户 ftp 即可(该账户在系统中已经存在)

chown -Rf ftp /var/ftp/pub

改了权限还是不能访问,创建目录,SELinux问题

getsebool -a | grep ftp

发现:ftpd_full_access --> off

setsebool -P ftpd_full_access=on    在设置时使用-P 参数让修改过的策略永久生效,确保在服务器重启后依然能够顺利写入文件。

本地用户模式:

本地用户模式使用的权限参数以及作用

在使用 root 管理员登录后,系统提示错误信息

在我们输入 root 管理员的密码之前,就已经被系统拒绝访问了。这是因为 vsftpd 服务
程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers 和 user_list)

vsftpd 服务程序目录中的这两个文件也有类似的功能—只要里面写有某位用户的名字,就不再允许这位用户登录到 FTP
服务器上。

cat /etc/vsftpd/user_list

cat /etc/vsftpd/ftpusers

只需按照上面的提示删除掉 root 用户名即可。我们也可以选择 ftpusers 和 user_list 文件中没有的一个普通用户尝
试登录 FTP 服务器

在采用本地用户模式登录 FTP 服务器后,默认访问的是该用户的家目录,也就是说,访
问的是/home/linuxprobe 目录。而且该目录的默认所有者、所属组都是该用户自己,因此不存
在写入权限不足的情况。但是当前的操作仍然被拒绝,是因为我们刚才将虚拟机系统还原到
最初的状态了。为此,需要再次开启 SELinux 域中对 FTP 服务的允许策略:

setsebool -P ftpd_full_access=on

虚拟用户模式

1.创建用于进行 FTP 认证的用户数据库文件,其中奇数行为账户名,偶数行为密
码。例如,我们分别创建出 zhangsan 和 lisi 两个用户,密码均为 redhat

cd /etc/vsftpd

vim vuser.list

zhangsan
redhat
lisi
redhat

明文信息既不安全,也不符合让 vsftpd 服务程序直接加载的格式,因此需要使
用 db_load 命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低
数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件
删除。

db_load -T -t hash -f vuser.list vuser.db

2.创建 vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地
用户。 FTP 服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录
到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于
这个系统本地用户,从而避免 Linux 系统无法处理虚拟用户所创建文件的属性权限。

useradd -d /var/ftproot -s /sbin/nologin virtual

chmod -Rf 755 /var/ftproot/

3.建立用于支持虚拟用户的 PAM 文件。

PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的 API 把系统提
供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式

新建一个用于虚拟用户认证的 PAM 文件 vsftpd.vu,其中 PAM 文件内的“ db=”参数为
使用 db_load 命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:

vim /etc/pam.d/vsftpd.vu

auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

4.在 vsftpd 服务程序的主配置文件中通过 pam_service_name 参数将 PAM 认证
文件的名称修改为 vsftpd.vu, PAM 作为应用程序层与鉴别模块层的连接纽带,可以让应用程
序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要 PAM 认证时,则需要在
应用程序中定义负责认证的 PAM 配置文件,实现所需的认证功能。

利用 PAM 文件进行认证时使用的参数以及作用

5.为虚拟用户设置不同的权限。

允许张三上传、创建、修改、查看、删除文件,只允许李四查看文件。这可以通过 vsftpd 服务程序来实现。只需新
建一个目录,在里面分别创建两个以 zhangsan 和 lisi 命名的文件,其中在名为 zhangsan 的文件中写入允许的相关权限(使用匿名用户的参数)

mkdir /etc/vsftpd/vusers_dir/

cd /etc/vsftpd/vusers_dir/

touch lisi

vim zhangsan

anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

然后再次修改 vsftpd 主配置文件,通过添加 user_config_dir 参数来定义这两个虚拟用户
不同权限的配置文件所存放的路径。

vim /etc/vsftpd/vsftpd.conf

加入:user_config_dir=/etc/vsftpd/vusers_dir

systemctl restart vsftpd

systemctl enable vsftpd

6.设置 SELinux 域允许策略,然后使用虚拟用户模式登录 FTP 服务器

getsebool -a | grep ftp

ftpd_full_access –> off

setsebool -P ftpd_full_access=on


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值