Centos体系下FTP服务器的搭建、设置与管理
一、FTP基础解释FTP(File Transfer Protocol,文件传输协议)是一种用于通过网络在不同计算机之间传输文件的尺度协议。它基于客户端-服务器架构,允许用户通过网络将文件上传到服务器或从服务器下载文件。
二、FTP工作原理
2.1 客户端-服务器模子
FTP接纳客户端-服务器架构(c/s)。用户使用FTP客户端软件(如FileZilla、WinSCP等)来与FTP服务器进行交互。客户端可以通过FTP命令访问和操作服务器上的文件。
2.2 两种通信通道
FTP使用两个不同的通道进行通信:
[*]控制通道(Command Channel):用于传输控制命令,如用户身份验证、命令哀求等。这个通道通常使用21端口。
[*]数据通道(Data Channel):用于传输现实的数据(文件传输)。该通道的端口是动态的,通常由FTP服务器在控制毗连中与客户端协商确定。
2.3 工作模式
FTP有两种主要的工作模式:
[*]自动模式(Active Mode):客户端向服务器的21端口发送命令,服务器再通过客户端指定的端口(通常为20端口)回传数据。该模式下,客户端需要对外网开放端口。
[*]被动模式(Passive Mode):客户端向服务器的21端口发送命令,服务器向客户端提供一个数据端口,客户端通过该端口进行数据传输。在防火墙环境下,被动模式更为常用。
2.4 数据传输方式
FTP支持不同的传输模式:
[*]ASCII模式:用于传输文本文件,文件内容颠末转换以顺应不同操作体系之间的换行符差异。
[*]二进制模式:用于传输二进制文件,如图像、压缩文件等,文件不会被修改。
2.5 身份验证
在使用FTP时,通常需要提供用户名和暗码进行身份验证。部分FTP服务器也支持匿名登录,使用户能够无需身份验证即可下载文件,但无法上传文件。
2.6 常见命令
FTP提供了多种命令来进行文件操作。
常用的命令包括:
命令备注USER发送用户名PASS发送暗码LIST列出目次内容GET或RETR下载文件PUT或STOR上传文件QUIT退出FTP会话https://i-blog.csdnimg.cn/direct/14731ec8b71d4fae8618a6717f9efbbf.png 2.7 使用场景
简单的过程如下:
[*]启动FTP客户端,输入服务器的IP地址和端口(默认是21端口)。
[*]输入用户名和暗码进行身份验证。
[*]客户端与服务器创建控制通道,获取服务器上的文件列表。
[*]选择你想要下载的文件,客户端通过数据通道与服务器传输文件。
[*]下载完成后,客户端发送退出命令(QUIT),关闭会话。
三、项目准备
主机名称操作体系IP地址脚色FTP服务端Centos810.0.0.8FTP服务器端FTP客户端Centos810.0.0.18FTP客户端Windows客户端Windows192.168.10.100FTP客户端 四、项目执行
4.1 IP网卡设置
见centos8之网卡设置详解
4.2 开始设置
[*]查抄yum源是否设置成功
# yum makecache // 清除缓存
Rocky Linux 8 - AppStream 14 kB/s | 4.8 kB 00:00
Rocky Linux 8 - BaseOS 8.5 kB/s | 4.3 kB 00:00
Rocky Linux 8 - Extras 8.8 kB/s | 3.1 kB 00:00
Extra Packages for Enterprise Linux 8 - x86_64 13 kB/s | 4.4 kB 00:00
Metadata cache created.
# yum repolist //查看仓库列表
repo id repo name
appstream Rocky Linux 8 - AppStream
baseos Rocky Linux 8 - BaseOS
epel Extra Packages for Enterprise Linux 8 - x86_64
extras Rocky Linux 8 - Extras
[*]安装vsftpd服务
# yum install -y vsftpd* ftp
Last metadata expiration check: 0:01:09 ago on Sun 01 Dec 2024 11:14:05 PM CST.
Dependencies resolved.
=====================================================================================
Package Architecture Version Repository Size
=====================================================================================
Installing:
ftp x86_64 0.17-78.el8 appstream 69 k
vsftpd x86_64 3.0.3-36.el8 appstream 180 k
Transaction Summary
=====================================================================================
Install2 Packages
Total download size: 249 k
Installed size: 457 k
Downloading Packages:
(1/2): ftp-0.17-78.el8.x86_64.rpm 91 kB/s |69 kB 00:00
(2/2): vsftpd-3.0.3-36.el8.x86_64.rpm 118 kB/s | 180 kB 00:01
-------------------------------------------------------------------------------------
Total 162 kB/s | 249 kB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : vsftpd-3.0.3-36.el8.x86_64 1/2
Running scriptlet: vsftpd-3.0.3-36.el8.x86_64 1/2
Installing : ftp-0.17-78.el8.x86_64 2/2
Running scriptlet: ftp-0.17-78.el8.x86_64 2/2
Verifying : ftp-0.17-78.el8.x86_64 1/2
Verifying : vsftpd-3.0.3-36.el8.x86_64 2/2
Installed:
ftp-0.17-78.el8.x86_64 vsftpd-3.0.3-36.el8.x86_64
Complete!
[*]启动vsftpd服务并关闭防火墙
# systemctl stop firewalld
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor prese>
Active: inactive (dead)
Docs: man:firewalld(1)
# systemctl start vsftpd
# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: >
Active: active (running) since Sun 2024-12-01 23:17:42 CST; 5s ago
Process: 1779 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, sta>
Main PID: 1780 (vsftpd)
Tasks: 1 (limit: 12166)
Memory: 584.0K
CGroup: /system.slice/vsftpd.service
└─1780 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Dec 01 23:17:42 localhost.localdomain systemd: Starting Vsftpd ftp daemon...
Dec 01 23:17:42 localhost.localdomain systemd: Started Vsftpd ftp daemon.
五、vsftpd的设置文件解释
5.1 vsftpd服务程序的主设置文件(/etc/vsftpd/vsftpd.conf)
# cat /etc/vsftpd/vsftpd.conf | grep -v "#" // grep -v "#" 过滤掉包含注释的行(含有“#”的行)
anonymous_enable=NO // 禁止匿名用户登录FTP服务器
local_enable=YES // 允许本地用户(即系统用户)登录FTP服务器
write_enable=YES // 允许用户在FTP服务器上进行写操作(如上传文件)
local_umask=022 // 设置本地用户上传文件的默认权限掩码,022 表示上传的文件对其他用户可读,但不可写
dirmessage_enable=YES // 启用目录消息功能,登录时显示目录的欢迎信息
xferlog_enable=YES // 启用FTP传输日志记录,记录文件传输的详细信息
connect_from_port_20=YES// 启用使用端口20进行数据传输的模式
xferlog_std_format=YES // 使用标准格式记录传输日志
listen=NO // 禁止vsftpd监听IPv4地址(改为使用IPv6)
listen_ipv6=YES // 启用vsftpd监听IPv6地址
pam_service_name=vsftpd // 配置PAM(Pluggable Authentication Module)服务名称,用于身份验证
userlist_enable=YES // 启用用户列表功能,只允许在用户列表中的用户登录FTP服务器
5.2 FTP数据库文件说明
/etc/pam.d/vsftpd
这是 vsftpd 服务的PAM(可插拔认证模块)设置文件,主要用于加强用户认证。当用户登录时,PAM会查抄用户的身份是否有效。这个设置文件可以用来设置额外的安全措施,比如强暗码计谋、多因素认证等。
5.2 FTP用户列表文件说明
/etc/vsftpd/ftpusers
这个文件包含了不允许登录 vsftpd 服务的用户。默认情况下,这个文件中会列出一些体系用户,如 root、bin、daemon 等,防止这些体系账户通过FTP进行访问。
5.2 FTP拒绝访问列表说明
/etc/vsftpd/user_list
这个文件包含了一个用户列表,根据 vsftpd.conf 设置文件中的 userlist_deny 设置,用户列表中的用户大概被拒绝访问FTP服务,也大概被允许访问。
如果 userlist_deny=NO,则只有文件中的用户可以访问FTP服务。
如果 userlist_deny=YES,则文件中的用户被拒绝访问FTP服务,其他用户可以访问。
5.2 FTP默认目次说明
/var/ftp
这个目次是 vsftpd 服务的默认文件存放位置,里面通常包含一个名为 pub 的子目次,供用户上传或下载文件。默认情况下,全部目次内容都是只读的,用户只能下载文件,不能进行修改或上传。
六、设置匿名用户FTP服务器
6.1 认证方式
vsftpd允许用户通过三种认证方式登录到FTP服务器,分别是匿名用户、当地用户和虚拟用户。每种方式的登录方式不同
[*] 匿名用户:
匿名用户是指任何人都可以不输入用户名和暗码,直接登录FTP服务器。这种方式通常用于公共FTP服务器,允许任何人访问服务器上的公开资源。
[*] 当地用户:
当地用户是指服务器上已经存在的用户账户,通过输入用户名和暗码进行登录。这种方式实用于需要更高安全性和权限控制的情况。
[*] 虚拟用户:
虚拟用户是指并不直接对应体系中的用户账户,而是通过一个虚拟的认证体系进行登录。纵然黑客破解了虚拟用户的登录信息,也无法直接访问体系中的真实账户,进步了安全性。
6.2 匿名用户登录
参数作用anonymous_enable=YES允许匿名用户访问FTP服务器anon_umask=022设置匿名用户上传文件时的默认权限掩码,022 表示上传的文件对其他用户可读,但不可写anon_upload_enable=YES允许匿名用户上传文件到FTP服务器anon_mkdir_write_enable=YES允许匿名用户在FTP服务器上创建新目次anon_other_write_enable=YES允许匿名用户修改目次名称或删除目次 6.3 匿名用户登录FTP服务器设置示例
要求:搭建FTP服务器,允许匿名用户上传和下载文件,设置匿名用户根目次为/var/ftp
[*]新建测试文件 编辑主设置文件
# touch /var/ftp/pub/sample.tar
# ll /var/ftp/pub
total 0
-rw-r--r--. 1 root root 0 Dec1 23:41 sample.tar
[*]在 /etc/vsftpd/vsftpd.conf 修改以下四行(数字表示行号)
12 anonymous_enable=YES
28 anon_upload_enable=YES# 允许上传文件 如果前面有# 删除最前面的 “#”
32 anon_mkdir_write_enable=YES# 允许创建文件
[*]重启FTP服务器
# chmod 777 /var/ftp/pub// 给目录所属设置为ftp
# systemctl restart vsftpd
# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: >
Active: active (running) since Sun 2024-12-01 23:49:27 CST; 11s ago
Process: 1872 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, sta>
Main PID: 1873 (vsftpd)
Tasks: 1 (limit: 12166)
Memory: 572.0K
CGroup: /system.slice/vsftpd.service
lines 1-8
[*]在windows客户端上输入ftp://10.0.0.8打开pub目次
七、企业级设置当地用户FTP服务器
7.1 FTP服务器设置要求
公司新增了一台FTP服务器和Web服务器,主要用于维护公司网站的内容,例如上传文件、创建目次和更新网页等。公司有两个部门负责这些任务,分别使用 team1 和 team2 账号来管理。这两个部门将只允许 team1 和 team2 账号登录FTP服务器。
7.2 要求
将FTP服务器和Web服务器放在一起是常见的做法,因为这样有助于网站的维护。为了进步安全性,服务器设置需要满意以下要求:
[*]仅允许当地用户访问:禁止匿名用户登录FTP服务器。
[*]限制 team1 和 team2 的访问目次:这两个账号只能访问并管理 /web/www/html 目次,确保他们无法访问服务器上的其他文件和目次。
7.3 解决方案
[*]创建维护网站内容的FTP账号 并 禁止当地登录 为其设置暗码
# mkdir -p /web/www/html // 创建team1和team2的所属目录
# useradd team1 -d /web/www/html // 禁止登录本地并指定家录
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
# useradd team2 -d /web/www/html
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
# useradd user1 -d /web/www/html
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
# eacho "12345" | passwd --stdin user1 // 设置密码
-bash: eacho: command not found
Changing password for user user1.
passwd: Authentication token manipulation error
# echo "12345" | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
# echo "12345" | passwd --stdin team1
Changing password for user team1.
passwd: all authentication tokens updated successfully.
# echo "12345" | passwd --stdin team2
Changing password for user team2.
passwd: all authentication tokens updated successfully.
[*]设置vsftpd.conf主设置文件增加或修改相应内容
# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=NO # 不允许匿名用户访问
13 local_root=/web/www/html# 添加这一行
102 chroot_list_enable=YES# 取消注释激活chroot功能
104 chroot_list_file=/etc/vsftpd/chroot_list # 取消注释 锁定用户在根目录种的列表文件
105 allow_writeable_chroot=YES # 启用chroot就一定加入这条:允许chroot限制
106 write_enable=yes
[*]创建/etc/vsftpd/chroot_list文件、添加team1、team2账号
# vim /etc/vsftpd/vsftpd.conf
# vim /etc/vsftpd/chroot_list
team1
team2
[*]创建测试文件 并赋予目次权限值
# touch /web/www/html/test.tar
# chmod -R 777 /web/www/html/test.tar
# ll /web/www/html/test.tar
-rwxrwxrwx. 1 root root 0 Dec2 00:15 /web/www/html/test.tar
[*]重启ftp服务
# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: >
Active: active (running) since Mon 2024-12-02 00:16:35 CST; 15s ago
Process: 1948 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, sta>
Main PID: 1949 (vsftpd)
Tasks: 1 (limit: 12166)
chroot_list=YES 时:
如果设置 chroot_list=YES,表示在 /etc/vsftpd/chroot_list 文件中列出的用户可以访问服务器的全部目次。换句话说,只有这些用户不会被限制在他们的主目次或指定目次内,他们可以自由浏览和访问服务器的其他文件体系目次。
chroot_list=NO 时:
如果设置 chroot_list=NO,则 /etc/vsftpd/chroot_list 文件中列出的用户会被锁定在特定的目次中,无法访问服务器上的其他目次。其他没有列出的用户则不受限制,可以访问整个文件体系。
[*]测试
[*]限制在当地目次的team1
# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.3)
Name (localhost:root): team1 // 输入需要登录的用户team1或者team2
331 Please specify the password.
Password: // 输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd // 查看当前目录
257 "/" is the current directory
ftp> cd /etc // 进入etc目录,失败 权限不足
550 Failed to change directory.
ftp> exit
[*]不限制在当地用户的user1
# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.3)
Name (localhost:root): user1 // 输入需要登录的用户user1
331 Please specify the password.
Password: // 输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd // 查看当前目录
257 "/web/www/html" is the current directory
ftp> cd /etc // 进入etc目录,成功
250 Directory successfully changed.
ftp> exit
八、设置虚拟用户FTP服务器
[*]要求
需要设置 FTP 服务器,允许虚拟用户 user2 和 user3 登录,并将他们的主目次设置为 /var/ftp/vuser。同时,这些用户只能查察文件,不能进行上传、修改或删除操作。
具体要求:
[*]虚拟用户登录:使用 user2 和 user3 虚拟用户账号登录FTP服务器。
[*]设置主目次:他们的主目次都被设置为 /var/ftp/vuser,即他们登录后只能访问该目次。
[*]只读权限:这两个用户只能查察目次和文件内容,无法上传、修改或删除文件。
[*]创建用户文本文件
# cd /etc/vsftpd // 进入目录
# vim vuser // 创建文本文件
https://i-blog.csdnimg.cn/direct/39b55438aabb4212bc7933380c6f56de.png
[*]天生数据库
为了让体系能够使用虚拟用户的账号和暗码,需要将这些信息存储在一个数据库文件中,而不是简单的文本文件。因为体系不能直接读取文本文件中的虚拟账号和暗码。为了转换,起首需要使用 db_load 命令将文本文件转换成数据库格式,这样 vsftpd 才气通过数据库文件来验证虚拟用户的登录信息。
# db_load -T -t hash -f vuser vuser.db
[*]设置PAM文件
为了让FTP服务器能够使用数据库中的虚拟用户账号进行身份验证,我们需要设置PAM(可插拔认证模块)。PAM 是一种身份验证框架,它允许体系通过不同的方式验证用户身份,包括使用数据库文件来验证虚拟用户。
修改vsftpd的PAM设置
打开 vsftpd 的PAM设置文件 /etc/pam.d/vsftpd,然后解释掉文件中的默认设置行。在这些行前加上 # 来禁用它们,这样体系就不会使用默认的身份验证方式,而是改为使用数据库文件中的虚拟用户信息进行验证。
##%PAM-1.0
session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required pam_userdb.so dn=/etc/vsftpd/vuser
account required pam_userdb.so dn=/etc/vsftpd/vuser
[*]编辑主设置文件 【/etc/vsftpd/vsftpd.conf】
# vim /etc/vsftpd/vsftpd.conf # 在最后添加下面四行
131 guest_enable=YES
132 guest_username=vuser
133 user_config_dir=/etc/vsftpd/vuser_conf
134 allow_writeable_chroot=YES
[*]设置虚拟用户权限
# cd /etc/vsftpd
# mkdir vuser_conf
# cd vuser_conf/
# vim user2
# vim user3
# cat user2
local_root=/var/ftp/vuser
# cat user3
local_root=/var/ftp/vsuer
[*]创建测试文件
# cd /var/ftp/
# ll
total 0
drwxr-xr-x. 2 root root 24 Dec1 23:41 pub
# mkdir vuser
# cd
# touch /var/ftp/vuser/user2.tar
# touch /var/ftp/vuser/user2.ta3
[*]重启测试
# 重启服务
# systemctl restart vsftpd
# 登录user2
# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||60168|).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Jun 06 18:46 user2.tar
-rw-r--r-- 1 0 0 0 Jun 06 18:46 user3.tar
# user2其他权限测试
ftp> cd /etc/# 进入其它目录权限
550 Failed to change directory.# 失败
ftp> mkdir user2# 创建文件权限
550 Permission denied. # 失败
# 登录user3
# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user3
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||28511|).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Jun 06 19:03 user2.tar
-rw-r--r-- 1 0 0 0 Jun 06 19:03 user3.tar
# user3其他权限测试
ftp> cd /etc/# 进入其它目录权限
550 Failed to change directory.# 失败
ftp> mkdir user3# 创建文件权限
550 Permission denied. # 失败
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]