CentOS 7 FTP服务部署

FTP服务

FTP(File Transfer Protocol,文件传输协议)是一种网络协议,用于在计算机系统之间传输文件。它支持在客户端和服务器之间进行文件的上传和下载操作,实现远程文件共享和统一管理。FTP协议工作在TCP/IP协议簇之上,使用TCP协议进行数据传输,以保证传输的可靠性和共享性

FTP连接及传输模式

  • 控制连接:TCP协议21端口,用于发送FTP命令信息
  • 数据连接:TCP协议20端口,用于上传、下载数据
  • 数据连接的建立类型
    • 主动模式:服务端从20端口主动向客户端发起连接
    • 被动模式:服务端在指定范围内的某个端口被动等待客户端连接

FTP传输模式

  • 文本模式:ASCII模式,以文本序列传输数据
  • 二进制模式:Binary模式,以二进制序列传输数据

FTP用户认证

  • 匿名用户:   ftp,anonymous,   对应Linux用户ftp
  • 系统用户:   Linux用户,用户/etc/passwd,密码/etc/shadow
  • 虚拟用户:   特定服务的专用用户,独立的用户/密码文件

 vsftpd配置文件

/etc/vsftpd/vsftpd.conf

常用匿名用户FTP配置项

  • anonymous_enable=YES:启用匿名访问
  • anon_umask=022:匿名用户所上传问价的权限掩码
  • anon_root=/var/ftp:/匿名用户的FTP根目录
  • anon_upload_enable=YES:允许上传文件
  • anon_mkdir_write_enable=YES:允许创建目录
  • anon_other_write_enable=YES:开放其他写入权
  • anon_max_rate=0:限制最大传输速率(字节/秒)

常用的本地用户FTP配置项

  • local_enable=YES:是否启用本地系统用户
  • local_umask=022:本地用户所上传文件的权限掩码
  • local_root=/var/ftp:设置本地用户的FTP根目录
  • chroot_local_user=YES:是否将用户禁锢在主目录
  • allow_writeable_chroot=YES:允许写入根
  • local_max_rate=0:限制最大传输速率(字节/秒)

搭建FTP服务实验

基础设备

设备系统IP
虚拟机CentOS7192.168.78.129
虚拟机//

基础环境(服务端)

静态IP

vi /etc/sysconfig/neteork-scripts/ifcfg-ens33    //ens33网卡的配置文件
 
#内容如下
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"    //将获取IP方式改为静态static获取
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="2ce64331-c359-4e02-8297-4b279599dd47"
DEVICE="ens33"
ONBOOT="yes"
#添加网络信息
IPADDR="192.168.78.129"    //IP地址
NETMASK="255.255.255.0"    //子网掩码
GATEWAY="192.168.78.2"    //网关
DNS1="192.168.78.2"    //dns
DNS2="114.114.114.114"    //dns


#重启服务
systemctl restart network

关闭防火墙

systemctl stop firewalld    //关闭防火墙
systemctl disable firewalld    //禁止开机自启动

关闭selinux

修改配置文件内的SELINUX=disabled
vi /etc/selinux/config    //selinux的配置文件

#内容如下
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled    //将SELINUX改为disabled

下载安装vsftpd服务

yum -y install vsftpd

匿名用户认证

修改配置文件配置

#编辑vsftpd配置文件
vi /etc/vsftpd/vsftpd.conf
#添加以下内容,也可以在配置文件中找到并取消注释修改,配置内容的意思在本文章上面有解释
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES


#启动服务
systemctl start vsftpd
systemctl enable vsftpd

修改共享文件夹权限

#修改文件夹属主,使匿名用户拥有读写权限
chown ftp /var/ftp/pub

[root@localhost ftp]#ls -l
总用量 0
drwxr-xr-x 2 ftp root 22 6月  13 23:22 pub

客户端测试匿名认证

CentOS7客户端

下载ftp服务
yum -y install ftp
连接ftp服务器
[root@localhost ~]# ftp 192.168.78.129    #连接服务器端,表示连接ftp服务器,192.168.78.129是ftp服务器地址
Connected to 192.168.78.129 (192.168.78.129).
220 (vsFTPd 3.0.2)
Name (192.168.78.129:root): ftp    #匿名用户使用ftp或anonymous登录
331 Please specify the password.
Password:     #匿名用户没有密码,直接回车
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
#ls可以看到存在一个共享文件夹pub
ftp> ls
227 Entering Passive Mode (192,168,78,129,173,236).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0              22 Jun 13 15:22 pub
226 Directory send OK.
进入共享文件夹下载文件

下载到客户端的文件将会保存在进入连接ftp时的目录下

#get下载文件
ftp> get test.txt
local: test.txt remote: test.txt
227 Entering Passive Mode (192,168,78,129,220,177).
150 Opening BINARY mode data connection for test.txt (7 bytes).
226 Transfer complete.
7 bytes received in 4.8e-05 secs (145.83 Kbytes/sec)
ftp> quit
221 Goodbye.
[root@localhost ~]# ls
anaconda-ks.cfg  test.txt

上传文件,文件会被上传到/var/ftp/pub目录下
#上传文件使用put,当前是客户端root用户家目录下文件anaconda-kc.cfg
ftp> cd pub    #进入pub共享文件夹
ftp> put anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (192,168,78,129,243,187).
150 Ok to send data.
226 Transfer complete.
1257 bytes sent in 0.00629 secs (199.78 Kbytes/sec)

win客户端

在win文件资源管理器路径上输入ftp://ftp服务器ip 便可以访问到ftp共享文件夹,ftp://表示使用ftp协议访问

本地用户认证

本地用户登录也就是使用服务端用户登录

在服务端创建一个测试本地用户认证的用户

useradd zhangsan    #创建用户
passwd zhangsan    #设置密码

 修改vsftpd配置文件

#编辑vsftpd配置文件
vi /etc/vsftpd/vsftpd.conf
#添加以下内容,也可以在配置文件中找到并取消注释修改,配置内容的意思在本文章常见匿名用户配置项有解释
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES


#启动服务
systemctl start vsftpd
systemctl enable vsftpd

 控制用户访问权限

/etc/vsftpd/user_list 和 /etc/vsftpd/ftpusers是 vsftpd FTP 服务器使用的两个重要文件,用于控制用户访问权限

/etc/vsftpd/ftpusers:

        这个文件包含了一个用户列表,列表中的用户将被拒绝通过 FTP 访问服务器。

        默认情况下,这个文件通常包含如 root, bin, daemon, adm, lp, sync, shutdown, halt, mail, news, uucp, operator, games, gopher, ftp, nobody, www-data, backup, list, irc 和 gnats 等系统或服务用户。这些用户由于具有特殊的系统权限或用于特定的服务,因此不应通过 FTP 访问服务器,以避免安全风险

/etc/vsftpd/user_list:

        这个文件的作用取决于 vsftpd 配置文件中的 userlist_deny 和 userlist_enable 设置。

当配置文件中 userlist_enable=YES 时,vsftpd 会检查这个文件,

如果配置文件 userlist_deny=YES(默认值),则 user_list 文件中的用户将被拒绝访问 FTP 服务器。这类似于 ftpusers 文件,但通常用于定义额外的用户限制。

如果配置文件 userlist_deny=NO,则只有列在 user_list 文件中的用户才被允许访问 FTP 服务器,其他所有用户都将被拒绝。这可以用于创建一个只允许特定用户访问的白名单

#编辑服务器端配置文件
vi /etc/vsftpd/vsftpd.conf
#加入如下配置,表示启用user_list白名单
userlist_deny=NO

#编辑白名单文件
vi /etc/vsftpd/user_list
#在里面加入我们测试的用户
zhangsan

#重新启动服务
systemctl restart vsftpd

CentOS7客户端本地用户认证测试

客户端连接ftp服务器

ftp 192.168.78.129
Connected to 192.168.78.129 (192.168.78.129).
220 (vsFTPd 3.0.2)
Name (192.168.78.129:root): zhangsan    #这里使用服务端创建的测试用户登录
331 Please specify the password.
Password:    #输入密码
230 Login successful.    #连接成功
Remote system type is UNIX.
Using binary mode to transfer files.

上传文件

本地用户认证上传的文件将会保存在服务器端用户的家目录下

ftp> put anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (192,168,78,129,111,27).
150 Ok to send data.
226 Transfer complete.
1257 bytes sent in 4.5e-05 secs (27933.33 Kbytes/sec)

#服务器端查看
ls /home/zhangsan/
anaconda-ks.cfg

 下载文件

本地用户认证下载是从服务器端用户的家目录下载,下载到客户端的文件将会保存在进入连接ftp时的目录下

ftp> ls
227 Entering Passive Mode (192,168,78,129,252,64).
150 Here comes the directory listing.
-rw-r--r--    1 1000     1000         1257 Jun 13 15:52 anaconda-ks.cfg
-rw-r--r--    1 0        0               6 Jun 13 15:53 dd.txt
226 Directory send OK.
ftp> get dd.txt
local: dd.txt remote: dd.txt
227 Entering Passive Mode (192,168,78,129,98,255).
150 Opening BINARY mode data connection for dd.txt (6 bytes).
226 Transfer complete.
6 bytes received in 2.3e-05 secs (260.87 Kbytes/sec)

 虚拟用户认证

  • 虚拟用户
    • 所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
    • 各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定
  • 虚拟用户账号的存储方式
    • 文件:编辑文本文件,此文件需要被编码为 hash 格式奇数行为用户名,偶数行为密码 

创建虚拟映射的宿主用户、ftp根目录

#创建用户virtual_user 家目录为/var/ftproot,不允许登录系统
useradd -d /var/ftproot -s /sbin/nologin virtual_user

#权限设置为用户可读写,其他的只读
chmod 755 /var/ftproot

 建立虚拟用户账号数据库

创建文件
vi /etc/vsftpd/vusers.list
#内容如下
lisi
123
zhaoliu
123

#进入csftpd目录
cd /etc/vsftpd/
#使用db_load工具生成数据库文件
db_load -T -t hash -f vusers.list vusers.db

#设置数据库文件权限,用户读写(所有vusers.开头的文件都设置为用户读写权限)
chmod 600 /etc/vsftpd/vusers.*

为虚拟用户创建PAM认证文件

vi /etc/pam.d/vsftpd.vu
#内容如下
#在进行身份验证时,vsftpd服务将使用pam_userdb.so模块来验证用户凭据。db=/etc/vsftpd/vusers指定了用户数据库文件的路径,这个文件包含了用户的用户名和密码信息
auth    required pam_userdb.so db=/etc/vsftpd/vusers
#在进行账户检查时,vsftpd服务将再次使用pam_userdb.so模块来检查用户的账户状态,例如是否被禁用或过期。同样,db=/etc/vsftpd/vusers指定了用户数据库文件的路径
account required pam_userdb.so db=/etc/vsftpd/vusers

修改vsftpd配置文件

vi /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
chroot_local_user=yes
allow_writeable_chroot=yes

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES

pam_service_name=vsftpd.vu    //指定虚拟用户使用的pam文件(虚拟用户,在文件中添加这三行便可以及本地用户便可)
guest_enable=yes
guest_username=virtual_user    //虚拟用户的宿主用户

userlist_enable=YES
#userlist_deny=no
tcp_wrappers=YES

为每个虚拟账户建立独立的权限

#为每个用户创建独立的配置文件
#编辑vsftpd配置文件
vi /etc/vsftpd/vsftpd.conf
#添加以下配置
user_config_dir=/etc/vsftpd/vusers_dir    //虚拟用户配置文件目录

#创建目录
mkdir /etc/vsftpd/vusers_dir
#创建与虚拟用户名称对应的配置文件
vi /etc/vsftpd/vusers_dir/lisi
#内容如下
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes

虚拟用户上传下载的文件会在映射宿主用户家目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值