FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数。
1.安装服务
[root@linux Desktop]# yum install vsftpd -y
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-9.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
vsftpd x86_64 3.0.2-9.el7 rhel 166 k
事务概要
================================================================================
安装 1 软件包
总下载量:166 k
安装大小:343 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : vsftpd-3.0.2-9.el7.x86_64 1/1
验证中 : vsftpd-3.0.2-9.el7.x86_64 1/1
已安装:
vsftpd.x86_64 0:3.0.2-9.el7
完毕!
2.编辑配置文件
将配置文件中开头没有#号的注释重定向到配置文件中,这样配置文件中的参数只有短短几行了。
[root@linux Desktop]# grep -v '#' /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf
[root@linux Desktop]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
2.1配置匿名访问模式
匿名访问模式是最不安全的一种认证模式,任何人都可以无需密码验证而直接登录到FTP服务器,一般用来访问不重要的公开文件。在配置文件中匿名访问时默认开启的。我们需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。默认共享的/var/ftp/pub目录。
参数 作用
anonymous_enable=YES 允许匿名访问模式
anon_umask=022 匿名用户上传文件的umask值
anon_upload_enable=YES 允许匿名用户上传文件
anon_mkdir_write_enable=YES 允许匿名用户创建目录
anon_other_write_enable=YES 允许匿名用户修改目录名称或删除目录
2.2将这几个参数加入到配置文件中。
[root@linux Desktop]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
2.3重启服务
[root@linux Desktop]# systemctl restart vsftpd
2.4清空防火墙策略和关闭selinux
[root@linux ftp]# iptables -F
[root@linux ftp]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
[root@linux ftp]# vim /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
2.5windows客户端访问
访问在资源管理器中输入ftp://192.168.10.10
在FTP服务器上新建文件错误,查看服务器/var/ftp/pub的权限,发现只有root用户才能写入,将此目录所有者改成ftp用户。
[root@linux ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 2 root root 6 5月 19 17:14 /var/ftp/pub
[root@linux ~]# chown -Rf ftp /var/ftp/pub
[root@linux ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 2 ftp root 6 5月 19 17:14 /var/ftp/pub
客户端可以正常创建文件了
2.6linux客户端访问
首先安装ftp服务
[root@localhost ~]# yum install vsftpd
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:3.0.2-9.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vsftpd x86_64 3.0.2-9.el7 rhel 166 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 166 k
Installed size: 343 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : vsftpd-3.0.2-9.el7.x86_64 1/1
Verifying : vsftpd-3.0.2-9.el7.x86_64 1/1
Installed:
vsftpd.x86_64 0:3.0.2-9.el7
Complete!
在终端中输入ftp 192.168.10.10,输入用户名anonymous,密码为空。
[root@localhost ~]# ftp 192.168.10.10
Connected to 192.168.10.10 (192.168.10.10).
220 (vsFTPd 3.0.2)
Name (192.168.10.10:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir 123
257 "/pub/123" created
ftp> ls
227 Entering Passive Mode (192,168,10,10,79,24).
150 Here comes the directory listing.
drwxr-xr-x 2 14 50 6 May 19 09:52 123
drwxr-xr-x 2 14 50 6 May 19 09:24 新文件夹
226 Directory send OK.
3.配置本地用户访问模式
相较于匿名开放模式,本地用户模式要更安全,使用Linux中用户的账户登录,默认共享所登录用户的家目录。
3.1将这几个参数加入到配置文件中。
[root@linux Desktop]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
3.2重启服务
[root@linux ~]# systemctl restart vsftpd
3.3清空防火墙策略和关闭selinux
[root@linux ftp]# iptables -F
[root@linux ftp]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
[root@linux ftp]# vim /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
3.4删除“黑名单”
若用户名存在ftpusers和user_list两个文件中,是不允许使用用户账号登录FTP的,所以登陆之前先查看有没有用户。
[root@linux ~]# vim /etc/vsftpd/user_list
删除需要登录的用户...
[root@linux ~]# vim /etc/vsftpd/ftpusers
删除需要登录的用户...
3.5客户端访问
登录方法和匿名用户登录一样,只是需要输入用户名和密码,使用服务器本地用户登录就可以访问登录用户的家目录了。
4.虚拟用户模式
4.1创建FTP用户
在/etc/vsftpd/下创建一个文件,在文件中奇数行写入FTP用户名,偶数行写入上一行用户名的密码。使用db_load命令用hash算法将原始的明文信息文件转换成数据库文件,降低数据库文件的权限只让root用户可以读写,最后再把原始的明文信息文件删除。
[root@linux Desktop]# vim /etc/vsftpd/user
shijie2
shijie2
shijie3
shijie3
[root@linux Desktop]# db_load -T -t hash -f /etc/vsftpd/user /etc/vsftpd/user.db
[root@linux Desktop]# file /etc/vsftpd/user.db
/etc/vsftpd/user.db: Berkeley DB (Hash, version 9, native byte-order)
[root@linux Desktop]# chmod 600 user.db
[root@linux Desktop]# rm -f /etc/vsftpd/user
4.2创建访问目录
创建一个可以映射到虚拟用户的系统本地用户,让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限。
[root@linux Desktop]# useradd -d /var/ftpfile -s /sbin/nologin virtual
[root@linux Desktop]# ls -ld /var/ftpfile/
drwx------. 3 virtual virtual 74 5月 19 20:37 /var/ftpfile/
[root@linux Desktop]# chmod -Rf 755 /var/ftpfile/
4.3虚拟用户认证
新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀。
[root@linux Desktop]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user
4.4编辑配置文件
anonymous_enable=NO 禁止匿名开放模式
local_enable=YES 允许本地用户模式
guest_enable=YES 开启虚拟用户模式
guest_username=virtual 指定虚拟用户账户
pam_service_name=vsftpd.vu 指定PAM文件
allow_writeable_chroot=YES 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
[root@linux Desktop]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES
4.5修改虚拟用户权限
新建一个目录,在里面分别创建以用户名命名的文件,使用匿名用户的参数在名为shijie2的文件中写入允许的相关权限。并使用参数user_config_dir将这个目录添加进配置文件。
[root@linux Desktop]# vim /etc/vsftpd/userdir/shijie2
anonymous_enable=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@linux Desktop]# echo 'user_config_dir=/etc/vsftpd/userdir'>> /etc/vsftpd/vsftpd.conf
4.6重启服务
[root@linux ~]# systemctl restart vsftpd
[root@linux ~]# systemctl enable vsftpd
[root@linux ftp]# iptables -F
[root@linux ftp]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
[root@linux ftp]# vim /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
4.7客户端访问
使用虚拟用户shijie2和shijie3访问服务器。
shijie2用户可以新建、修改文件。
而shijie3用户只有访问权限。