保姆级讲解 Linux下FTP服务器的搭建、配置与管理

晚妍 2024-06-29 14:37:02 阅读 75

本来目录很长的 因为感觉不太美观 所以小标题都删掉了 本文介绍了

本地用户的FTP服务器搭建实例匿名用户的FTP服务器搭建实例虚拟用户的FTP服务器搭建实例企业常见类型搭建实验

配置与管理FTP服务器

配置与管理FTP服务器一、FTP相关知识二、项目设计与准备三、项目实施四、认识vsftpd的配置文件五、配置匿名用户FTP服务器六、配置本地用户FTP服务器七、配置虚拟用户FTP服务器八、主被动模式配置九、企业实战与应用

配置与管理FTP服务器

一、FTP相关知识

一、 FTP工作原理

FTP大大的简化了文件传输的复杂性,它能够使文件通过网络从一台主机传送到另一个主机,却不受其计算机和操作系统类型的限制。无论是PC、服务器、大型机、还是ISO、Linux、Windows。只要双方都支持FTP,就可以方便可靠的传送文件。

二、 FTP具体的工作原理

客户端向服务器发送请求、同时客户端系统动态的打开一个大于1024的端口等待服务器连接若FTP服务器在端口21侦听到该请求、则会在客户端1031端口和服务器的21端口之间建立一个FTP会话连接当需要传输数据时、FTP客户端再动态的打开一个大于1024的端口(比如1032端口)连接到服务器的20端口,并再这两个端口之间传输数据。当数据传输完毕,这两个端口会自动关闭。数据传输完毕,如果客户端不向服务端发送拆除连接的请求,则继续保持连接当FTP客户端向服务端发送拆除连接的请求并确认后、客户端将端口与FTP服务的连接,客户端上动态分配的端口将自动释放。

三、 FTP工作模式

FTP服务有两种工作模式:主动传输模式和被动传输模式

四、 匿名用户

FTP服务不同于WWW它首先要求登录到服务器上,然后再传输文件,这对于很多公开提供软件下载的服务器来说十分不便,于是匿名用户访问就诞生了。使用一个公共的用户anonymoud,让任何用户都可以很方便的从这些服务器上下载软件。

二、项目设计与准备

2台安装好Centos7的计算机、一台作为服务器、一台作为客户端。

主机名称 操作系统 IP地址 角色
FTP服务器端 Centos7 192.168.10.101 FTP服务器端
FTP客户端 Centos7 192.168.10.102 FTP客户端
Windows客户端 Windows 192.168.10.100 FTP客户端

三、项目实施

一、本地yum源

插一句 如果你不会安装软件或者不会搭建本地yum源 可以先看看我写的教程 点我前往 学习配置大概需要3~5分钟

二、IP网卡配置

如果你不会配置网卡的话 可以看看我写的教程 点我前往 学习一下 大概八分钟

(1) 检查yum源是否配置成功

yum makecache // 清除缓存

yum repolist //查看仓库列表 //

(2) 安装vsftpd服务

[root@ftp-server ~]# yum install -y vsftpd* ftp

(3) 启动vsftpd服务并关闭防火墙

[root@ftp-server ~]# systemctl stop firewalld

[root@ftp-server ~]# systemctl restart vsftpd

[root@ftp-server ~]# setenforce 0

四、认识vsftpd的配置文件

vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf) 下面的命令可以过滤到没有必要的注释

[root@ftp-server ~]# cat /etc/vsftpd/vsftpd.conf |grep -v "#"

# 下面的是文件种的所有参数

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

(1) 主配置文件参数说明

vsftpd服务程序主配置文件种常用的参数及其作用如下表。在后续的实验种将演示重要的参数用法,帮助大家熟悉并掌握。

选项 说明
anonymous_enable 设置是否允许匿名用户登录服务器
local_enable 设置是否允许本地用户登录服务器
write_enable 设置是否允许写操作
local_umask 设置本地用户创建文件的umask值
anon*_upload_enable* 设置是否允许匿名用户上传文件
anon*_mkdir_write_enable* 设置是否允许匿名用户建立目录
xferlog_enable 是否激活日志功能
chown_uploads 修改匿名用户上传文件的所有者
chown_username=whoever 启用chown_uploads=YES时,指定为主用户账户,whoever表示你的ftp用户
chroot*_local_user* 设置是否将所有用户限制在其主目录
chroot*_list_enable* 设置是否启用限制用户的名单
chroot*_list_file* 设置是否限制/排除主目录下的用户名单,限制/排除有chrootlocaluser值决定
allow*_writeable_choot* 设置chroot目录的写权限

(2) FTP数据库文件说明

/etc/pam.d/vsftpd

vsftpd的PAM配置文件、主要用来加强vsftpd服务的用户认证

(3) FTP用户列表文件说明

/etc/vsftpd/ftpusers

所有位于此文件内的用户都不能访问vsftpd服务。当然为了安全起见,这个文件种默认包括了root、bin和daemon等用户

(4) FTP拒绝访问列表说明

/etc/vsftpd/user_list

这个文件包括的用户可能是备拒绝访问vsftpd服务的,也可能是允许访问的。主要取决于/etc/vsftpd/vsftpd.conf种的userlist_deny参数是设置为yes还是no

userlist_deny=NO时,仅允许文件中的用户访问FTP服务器userlist_deny=YES时,反之

(5) FTP默认目录说明

/var/ftp文件夹

该文件夹是vsftpd提供服务的文件集散地,包括一个pub子目录。在默认配置下,所有的目录都只是只读的。

五、配置匿名用户FTP服务器

vsftpd允许用户以3种认证模式登录到FTP服务器上。

匿名用户:任何人都可以直接登录服务器本地用户:通过本地用户输入密码登录服务器虚拟用户:本身不存在、是一个虚拟出来的用户、就算黑客破解的用户信息也无法登录服务器

匿名用户登录的参数说明

参数 作用
anonymous_enable=YES 允许匿名用户访问
anon_umask=022 匿名用户上传文件的umask值
anon_upload_enable=YES 允许匿名用户上传文件
anon_mkdir_write_enable=YES 允许匿名用户创建文件
anon_other_write_enable=YES 允许匿名用户修改目录名称或删除目录

配置匿名用户登录FTP服务器实例

题目要求:搭建一台FTP服务器,允许匿名用户上传和下载文件,匿名用户的根目录设置为/var/ftp

新建测试文件 编辑主配置文件

[root@ftp-server ~]# touch /var/ftp/pub/sample.tar

[root@ftp-server ~]# vi /etc/vsftpd/vsftpd.conf

在文件后面编辑如下四行 最前面的是行号

12 anonymous_enable=YES

29 anon_upload_enable=YES # 允许上传文件 如果前面有# 删除最前面的 “#”

33 anon_mkdir_write_enable=YES # 允许创建文件

重启FTP服务器

[root@ftp-server ~]# systemctl restart vsftpd

[root@ftp-server ~]# systemctl stop firewalld

在windows客户端上输入ftp://192.168.10.101打开pub目录

Win+R 打开运行 输入ftp://192.168.10.101

image-20240606160639131

进入pub目录

image-20240606161050976

image-20240606161624945

新建文件 发现会出错

出错原因是什么呢?系统本地的权限没有设置

设置本地系统权限,将权限直接拉满

[root@ftp-server ~]# chmod 777 /var/ftp/pub // 给目录所属设置为ftp

[root@ftp-server ~]# systemctl restart vsftpd // 重启ftp服务

在Windows客户端再次测试,在pub目录下创建新文件夹

image-20240606162515641

六、配置本地用户FTP服务器

一、FTP服务器配置要求

公司现在又一台FTP服务器和Web服务器,FTP主要用于维护公司网站内容,包括上传文件、创建目录、更新网页等。公司现在又两个部门负责维护任务。两者分别使用team1和team2账号来管理,仅允许team1和team2登录服务器.

二、要求分析

将FTP服务器和Web服务器在一起时企业经常采用的方法,这样方便维护网站,为了增强安全性,首先需要使用仅允许本地用户访问,并禁用匿名用户登录。其次将team1和team2锁在/web/www/html目录下

三、解决方案

建立维护网站内容的FTP账号 并 禁止本地登录 为其设置密码

[root@ftp-server ~]# mkdir /web/www/html -p # 创建team1和team2的所属目录

[root@ftp-server ~]# useradd team1 -d /web/www/html# 禁止登录本地并指定家录

[root@ftp-server ~]# useradd team2 -d /web/www/html

[root@ftp-server ~]# useradd user1 -d /web/www/html

[root@ftp-server ~]# echo "123" | passwd --stdin user1 # 设置密码

[root@ftp-server ~]# echo "123" | passwd --stdin team1

[root@ftp-server ~]# echo "123" | passwd --stdin team2

配置vsftpd.conf主配置文件增加或修改相应内容

[root@ftp-server ~]# 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账号

[root@ftp-server vsftpd]# vim /etc/vsftpd/chroot_list

[root@ftp-server vsftpd]# cat chroot_list

team1

team2

创建测试文件 并赋予目录权限值

[root@ftp-server vsftpd]# touch /web/www/html/test.tar

[root@ftp-server vsftpd]# chmod -R 777 /web/www/html/test.tar

重启ftp服务

[root@ftp-server vsftpd]# systemctl restart vsftpd

注意

今天做这个实验的时候 发现了一个特别重要的点

chroot_list的作用是限制文件内的用户固定在目录种

chroot_list=YES的话 仅文件中的用户可以访问所有目录 例如 /etc

chroot_list=No的话 除文件中的用户不可以访问所有目录

四、测试

限制在本地目录的team1

[root@ftp-server ~]# ftp localhost 21

Trying ::1...

Connected to localhost (::1).

220 (vsFTPd 3.0.2)

Name (localhost:root): team1 # 输入登录的用户

331 Please specify the password.

Password: # 输入密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> pwd # 查看当前目录

257 "/"

ftp> cd /etc/ # 尝试进入/etc目录

550 Failed to change directory. # 拒绝

不限制在本地用户的user1

[root@ftp-server ~]# ftp localhost 21

Trying ::1...

Connected to localhost (::1).

220 (vsFTPd 3.0.2)

Name (localhost:root): user1

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> cd /etc # 尝试进入/etc

250 Directory successfully changed. # 成功

七、配置虚拟用户FTP服务器

一、要求:

使用虚拟用户user2、user3登录FTP服务器、访问主目录时/var/ftp/vuser,用户只允许查看文件、不允许上传、修改等操作

二、 创建用户数据库

三、创建用户文本文件

# 进入目录

[root@ftp-server ~]# cd /etc/vsftpd/

# 创建文本文件

[root@ftp-server vsftpd]# vim vuer

user2

123

user3

123

# 文本文件的格式为

用户

密码

用户

密码

四、生成数据库

保存虚拟账号及密码的文本文件无法被系统账号直接调用 需要使用db_load命令生成db数据库文件

[root@ftp-server vsftpd]# db_load -T -t hash -f vuer vuer.db

五、配置PAM文件

为了使服务器能够使用数据库问就按,对客户端进行身份验证,需要调用系统的PAM模块。

下面修改vsftpd对应的PAM配置文件/etc/pam.d/vsftpd、将默认配置使用“#”全部注释

[root@ftp-server vsftpd]# vim /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

六、编辑主配置文件

[root@ftp-server vsftpd]# vim /etc/vsftpd/vsftpd.conf # 在最后添加下面四行

129 guest_enable=YES

130 guest_username=vuser

131 user_config_dir=/etc/vsftpd/vuser_conf

132 allow_writeable_chroot=YES

七、配置虚拟用户权限

[root@ftp-server vsftpd]# cd /etc/vsftpd

[root@ftp-server vsftpd]# mkdir vuser_conf

[root@ftp-server vsftpd]# cd vuser_conf

[root@ftp-server vuser_conf]# vim user2

local_root=/var/ftp/vuser

[root@ftp-server vuser_conf]# vim user3

local_root=/var/ftp/vuser

八、创建测试文件

[root@ftp-server vuser_conf]# touch /var/ftp/vuser/user2.tar

[root@ftp-server vuser_conf]# touch /var/ftp/vuser/user3.tar

九、重启测试

# 重启服务

[root@ftp-server vuser_conf]# systemctl restart vsftpd

# 登录user2

[root@ftp-server vuser_conf]# 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

[root@ftp-server vuser_conf]# 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. # 失败

八、主被动模式配置

(1) 主模式配置

# 开启主动模式

port_enable=YES

(2) 被动模式配置

pasv_enable=YES

# 被动模式最低端口

PASV_min_port=%number%

# 被动模式最高端口

PASV_max_port=%number%#=

九、企业实战与应用

一、 要求

公司计划搭建FTP服务器、为客户提供相关文档下载。对所有互联网用户开放共享目录,允许下载产品信息,禁止上传。公司的合作单位能够**使用FTP服务器进行上传和下载,但不可删除数据,**并且为保证服务器的稳定性,需要进行适当的优化设置。

二、 分析

对不同用户进行不同的权限限制,FTP服务器需要实现用户的审核。为了考虑安全性,关闭实体用户登录。使用虚拟用户验证机制。

三、 项目实施

四、创建用户数据库

创建用户数据库

添加两个虚拟用户 ftps为公共用户 vip为客户用户

[root@ftp-server vuser_conf]# cd /etc/vsftpd/

[root@ftp-server vsftpd]# vim ftpuser

ftps

123

vip

123

生成数据库

[root@ftp-server vsftpd]# db_load -T -t hash -f ftpuser ftpuser.db

五、 配置PAM文件

修改文件

[root@ftp-server vsftpd]# vim /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 db=/etc/vsftpd/ftpuser # 换成ftpuser

account required pam_userdb.so db=/etc/vsftpd/ftpuser # 换成ftpuser

六、 编辑主配置文件

在最后面添加四行

[root@ftp-server vsftpd]# vim /etc/vsftpd/vsftpd.conf

129 guest_enable=YES

130 guest_username=vsftp

131 allow_writeable_chroot=YES

132 user_config_dir=/etc/vsftpd/ftpuser_conf # 指定虚拟用户的配置文件目录

七、 配置虚拟用户配置文件

[root@ftp-server vsftpd]# mkdir /etc/vsftpd/ftpuser_conf

ftps配置文件

[root@ftp-server vsftpd]# vim /etc/vsftpd/ftpuser_conf/ftps

local_root=/var/ftp/public # 指定根目录

anon_upload_enable=YES # 允许下载

write_enable=NO # 禁止上传创建文件

vip配置文件

[root@ftp-server vsftpd]# vim /etc/vsftpd/ftpuser_conf/vip

local_root=/var/ftp/public

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_umask=022

八、 创建共享目录和测试文件

[root@ftp-server vsftpd]# mkdir /var/ftp/public

[root@ftp-server vsftpd]# chmod 777 /var/ftp/public

[root@ftp-server vsftpd]# touch /var/ftp/public/test.txt

九、 重启测试

ftps测试

下载和查看文件测试

root@ftp-server vsftpd]# systemctl restart vsftpd

[root@ftp-server vsftpd]# ftp localhost 21

Trying ::1...

Connected to localhost (::1).

220 (vsFTPd 3.0.2)

Name (localhost:root): ftps

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 (|||27230|).

150 Here comes the directory listing.

-rw-r--r-- 1 0 0 0 Jun 06 19:29 test.txt

226 Directory send OK.

ftp> get test.txt

local: test.txt remote: test.txt

229 Entering Extended Passive Mode (|||57910|).

150 Opening BINARY mode data connection for test.txt (0 bytes).

226 Transfer complete.

上传文件测试

ftp> put test.txt

local: test.txt remote: test.txt

229 Entering Extended Passive Mode (|||46731|).

550 Permission denied.

创建文件测试

ftp> mkdir toto

550 Permission denied.

vip测试

下载查看文件测试

[root@ftp-server vsftpd]# ftp localhost 21

Trying ::1...

Connected to localhost (::1).

220 (vsFTPd 3.0.2)

Name (localhost:root): vip

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 (|||46926|).

150 Here comes the directory listing.

-rwxrwxrwx 1 0 0 0 Jun 06 19:39 test.txt

226 Directory send OK.

ftp> get test.txt # 下载

local: test.txt remote: test.txt

229 Entering Extended Passive Mode (|||29663|).

150 Opening BINARY mode data connection for test.txt (0 bytes).

226 Transfer complete.

上传文件测试

ftp> put chroot_list

local: chroot_list remote: chroot_list

229 Entering Extended Passive Mode (|||60080|).

150 Ok to send data.

226 Transfer complete.

12 bytes sent in 3.6e-05 secs (333.33 Kbytes/sec)

创建删除文件测试

ftp> mkdir test # 创建目录test

257 "/test" created # 成功

ftp> ls # 查看

229 Entering Extended Passive Mode (|||15449|).

150 Here comes the directory listing.

-rw-r--r-- 1 14 50 12 Jun 06 19:40 chroot_list

drwxr-xr-x 2 14 50 6 Jun 06 19:41 test

-rwxrwxrwx 1 0 0 0 Jun 06 19:39 test.txt

226 Directory send OK.

ftp> rmdir test # 删除

250 Remove directory operation successful. #成功



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。