当前位置: 首页 > news >正文

Linux(8.5)FTP

文章目录

    • FTP(网络传输)
      • 1)概念
      • 2)作用
      • 3)工作模式
      • 4)工作原理
      • 5)配置文件
      • 6)禁锢目录
      • 7)限制单目录实验
      • 8)不同用户限制不同目录
      • 9)部署FTP
      • 10)创建FTP虚拟用户
      • 11)YUM远程仓库部署(FTP源)(CentOS-7)

FTP(网络传输)

1)概念

FTP(File Transfer Protocol)即文件传输协议,是用于在网络上进行文件传输的标准协议。它采用客户端 / 服务器架构,(即C/S架构)允许用户从 FTP 服务器(服务端)上传或下载文件到本地计算机(客户端)。

端口号:21

2)作用

  • 文件传输
  • 文件管理
  • 远程访问
  • 匿名访问

3)工作模式

  • 主动模式
    • 客户端(FTP客户端)通过控制连接向服务器(FTP服务器)发送PORT命令,指定客户端用于传输的IP地址和端口号
    • 服务器通过服务器到客户端的数据连接,并使用客户端指定的IP地址和端口号发送数据
    • 在主动模式下,客户端主动打开数据连接,服务器被动接受连接。
  • 被动模式
    • 客户端(FTP客户端)通过控制连接向服务器(FTP服务器)发送PSAV命令,请求服务器进入被动模式
    • 服务器在收到PASV命令后,打开一个随机的端口(被动端口)并通知客户端该端口号
    • 客户端使用被动端口向服务器建立数据连接,并通过该连接发送数据
    • 在被动模式下,服务器主动打开数据连接,客户端被动接受连接。

4)工作原理

在这里插入图片描述

5)配置文件

1、相关配置文件

/etc/logrotate.d/vsftpd		#轮转日志
/etc/vsftpd					#配置文件存放目录
/etc/vsftpd/vsftpd.conf		#主配置文件
/usr/sbin/vsftpd
/var/ftp					#共享目录
/var/ftp/pub				#公共的共享目录

2、黑名单/白名单(黑名单权限>白名单权限)

[root@localhost vsftpd]# ll
总用量 36
-rw-------. 1 root root   125  820 16:52 ftpusers		#黑名单
-rw-------. 1 root root   361  820 16:52 user_list	#白名单

3、主配置文件

路径:/etc/vsftpd/vsftpd.conf

[root@localhost ftp]# grep -v  "#" /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=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
userlist_enable=YES
tcp_wrappers=YES
anonymous_enable=YES
这表示允许匿名用户访问 FTP 服务。匿名用户可以使用 “anonymous” 或 “ftp” 作为用户名,并且通常密码可以是任意的电子邮件地址格式(不过有些服务器可能不检查密码)。
local_enable=YES
允许本地用户(系统中真实存在的用户)访问 FTP 服务。这些用户可以使用自己在系统中的用户名和密码来登录 FTP 服务器。
write_enable=YES
启用写操作。这意味着无论是本地用户还是满足条件的匿名用户(由后面的anon_upload_enable和anon_mkdir_write_enable等参数决定)都有可能进行写操作,如上传文件或创建目录等。
local_umask=022
用于设置本地用户创建文件和目录时的默认权限掩码。这里022表示创建文件时,文件的权限默认是644(666减去022),创建目录时,目录的权限默认是755(777减去022)。
anon_upload_enable=YES
允许匿名用户上传文件。这在某些场景下可能会带来安全风险,因为匿名用户的身份难以追踪,如果恶意用户利用这个权限,可能会上传有害的文件,如包含恶意软件的文件等。
anon_mkdir_write_enable=YES
允许匿名用户创建目录。和匿名用户上传文件权限类似,这也需要谨慎使用,因为这增加了匿名用户对服务器目录结构的操作权限。

6)禁锢目录

1、原理

通过配置 vsftpd 的相关参数,利用 chroot(change root)机制,将用户的根目录切换到指定的目录,使得用户只能在该目录及其子目录下进行操作,无法访问系统的其他部分,从而实现禁锢效果。

2、修改配置文件vsftpd.conf

  1. 限制单个目录

    chroot_local_user=YES
    #chroot_list_enable=YES
    # (default follows)
    chroot_list_file=/etc/vsftpd/chroot_list
    ##在配置文件中没有,需要自己添加
    allow_writeable_chroot=YES
    local_root=/var/www/html	
    
    • chroot_local_user=YES:表示将所有本地用户禁锢在其家目录中。
    • chroot_list_enable=YES:启用 chroot_list_file 指定的文件,该文件中列出的用户可以不受 chroot 限制。
    • chroot_list_file=/etc/vsftpd/chroot_list:指定禁锢列表文件的路径。
    • allow_writeable_chroot=YES:允许用户在被限制的主目录中有写入权限。
    • local_root=/var/www/html:指定了本地用户登录 FTP 后的根目录为 /var/www/html
  2. 不同用户限制不同目录

    chroot_local_user=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    allow_writeable_chroot=YES
    user_config_dir=/etc/vsftpd/user_config	
    #这表示 vsftpd 会从 /etc/vsftpd/user_config 目录中读取每个用户的独立配置文件。
    

7)限制单目录实验

创建test用户并限制目录在/var/www/html下用来管理httpd服务

1、安装vsftpd

yum -y install vsftpd

2、修改配置文件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

chroot_local_user=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
local_root=/var/www/html	#限制本地用户目录为/var/www/html
listen=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO

3、创建chroot_list文件

[root@localhost vsftpd]# touch chroot_list

4、创建test用户及修改权限

useradd test

chown -R test:test /var/www/html/
创建文件a
touch /var/www/html/a

5、允许test用户登录ftp

[root@localhost vsftpd]# ll
总用量 20
-rw-r--r--. 1 root root    0  324 15:49 chroot_list
-rw-------. 1 root root  125  820  2024 ftpusers
drwxr-xr-x. 2 root root   31  324 15:59 user_config
-rw-------. 1 root root  372  324 16:00 user_list
-rw-------. 1 root root 5176  324 15:56 vsftpd.conf
-rwxr--r--. 1 root root  352  820  2024 vsftpd_conf_migrate.sh

在user_list末行添加test用户

6、在客户端测试

安装ftp
yum -y install ftp

登录ftp
[root@localhost ~]# ftp 192.168.146.140	#vsftpd服务器IP
Connected to 192.168.146.140 (192.168.146.140).
220 (vsFTPd 3.0.5)
Name (192.168.146.140:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls			#在/var/www/html目录下
227 Entering Passive Mode (192,168,146,140,94,0).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Mar 24 07:45 a
226 Directory send OK.
ftp> pwd
257 "/" is the current directory
ftp> cd /var	#已经限定,切换目录不可用
550 Failed to change directory.
ftp> exit
221 Goodbye.

8)不同用户限制不同目录

test用户限制在/var/www/html test1用户限制在/test下

1、修改配置文件vsftpd.conf

#local_root=/var/www/html	#限制本地用户目录为/var/www/html
user_config_dir=/etc/vsftpd/user_config	#修改为这个
#这表示 vsftpd 会从 /etc/vsftpd/user_config 目录中读取每个用户的独立配置文件。

2、在/etc/vsftpd下创建添加用户特定的禁锢目录配置

mkdir user_config

3、创建用户test1

useradd test1

4、创建用户配置文件

  1. test 用户创建配置文件:
    创建文件 /etc/vsftpd/user_config/test,并添加以下内容:

    local_root=/var/www/html
    
  2. test01 用户创建配置文件:
    创建文件 /etc/vsftpd/user_config/test01,并添加以下内容:

    local_root=/test
    

5、在不同目录下创建文件并修改权限

chown -R test:test /var/www/html
touch var/www/html/a

chown -R test1:test1/test
touch /test/b

6、测试验证

[root@localhost ~]# ftp 192.168.146.140
Connected to 192.168.146.140 (192.168.146.140).
220 (vsFTPd 3.0.5)
Name (192.168.146.140:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,146,140,94,0).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Mar 24 07:45 a
226 Directory send OK.
ftp> pwd
257 "/" is the current directory
ftp> cd /var
550 Failed to change directory.
ftp> exit
221 Goodbye.
[root@localhost ~]# ftp 192.168.146.140
Connected to 192.168.146.140 (192.168.146.140).
220 (vsFTPd 3.0.5)
Name (192.168.146.140:root): test1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp>
ftp> pwd
257 "/" is the current directory
ftp> ls
227 Entering Passive Mode (192,168,146,140,113,56).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Mar 24 08:01 b
226 Directory send OK.

9)部署FTP

服务端

1、安装FTP服务

  • 命令:yum -y install vsftpd
[root@bogon ~]# yum -y install vsftpd

2.启动FTP服务(加入开机自启)

[root@bogon ~]# systemctl enable --now vsftpd.service

3.关闭防火墙

systemctl stop firewalld

setenforce 0

iptables -F

4、验证FPT服务

windows:ftp://IP地址

linux:客户端安装FPT服务

  • 命令:yum -y install ftp ftp+ IP 地址

客户端

登录方式(ftp + IP 地址)

  • 匿名用户(ftp或者anonymous)
  • 本地用户(服务端的用户名和密码)
  • 虚拟用户

10)创建FTP虚拟用户

一、安装VSFTPD

yum -y install vsftpd

二、创建虚拟账号和密码文件

[root@localhost vsftpd]# vim vuser.txt

三、使用db_load命令转换为数据库文件

语法:db_load -T -t hash -f

[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db


[root@localhost vsftpd]# ll
总用量 36
-rw-------. 1 root root   125  820 16:52 ftpusers
-rw-------. 1 root root   361  820 16:52 user_list
-rw-------. 1 root root  5073 1230 21:14 vsftpd.conf
-rwxr--r--. 1 root root   352  820 16:52 vsftpd_conf_migrate.sh
-rw-r--r--. 1 root root 12288 1230 21:22 vuser.db
-rw-r--r--. 1 root root    28 1230 21:21 vuser.txt

四、配置PAM认证(注意顺序)

路径:/etc/pam.d/vsftpd

[root@localhost vsftpd]# cat /etc/pam.d/vsftpd
auth       sufficient   /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account    sufficient   /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
###要添加内容

#%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

五、配置主配置文件(/etc/vsftpd/vsftpd.conf

anonymous_enable = YES:允许匿名用户访问。
local_enable = YES:启用本地用户认证,这里的本地用户实际上是通过 PAM 认证的虚拟用户。
write_enable = YES:如果允许虚拟用户上传文件,设置为 “YES”。
guest_enable = YES:启用虚拟用户(以 guest 身份)。
guest_username = ftp:指定虚拟用户映射到的系统用户,这里一般是ftp这个低权限系统用户。
pam_service_name = vsftpd:指定 PAM 认证

11)YUM远程仓库部署(FTP源)(CentOS-7)

一、概述

客户机集合
YUM 在线更新
软件仓库
客户机1
客户机2
客户机3
客户机4
网络连接
仓库服务器

二、服务端配置

1、构建FPT源

  • 挂载光盘

    [root@server ~]# mount /dev/sr0 /mnt   ##以cetos7光盘作为软件仓库##
    mount: /dev/sr0 写保护,将以只读方式挂载
    
  • 安装VSFTP服务

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

2、复制软件源到FTP站点(也可以直接挂载到/var/ftp/centos7)

  • [root@server ~]# cd /var/
    [root@server var]# ls
    account  adm  cache  crash  db  empty  ftp  games  gopher  kerberos  lib  local  lock  log  mail  named  nis  opt  preserve  run  spool  tmp  yp
    [root@server var]# cd ftp/
    [root@server ftp]# ls
    pub
    [root@server ftp]# mkdir centos7
    [root@server ftp]# ls
    centos7  pub
    [root@server ftp]# cp -rf /mnt/* ./centos7 &
    [1] 9924
    [root@server ftp]# 
    

3、建立yum索引文件

  • 命令:createrepo -g /mnt/repodata/repomd.xml ./other

    [root@server ftp]# mkdir other
    [root@server ftp]# ls
    centos7  other  pub
    [root@server ftp]# createrepo -g /mnt/repodata/repomd.xml  ./other
    Saving Primary metadata
    Saving file lists metadata
    Saving other metadata
    Generating sqlite DBs
    Sqlite DBs complete
    [root@server ftp]# cd other
    [root@server other]# ls
    repodata
    [root@server other]# cd repodata/
    [root@server repodata]# ls
    01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523-filelists.sqlite.bz2
    12bbefc88e08f473cf860b4c150a9a8627f68eb256c9d54b80940e5dc224e85c-repomd.xml.gz
    401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz
    5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945-primary.sqlite.bz2
    6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz
    7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4-other.sqlite.bz2
    cdcb85c0e4daf1675d1ab6c42b0cacc6f9460d938296f7bf52678514a86a0554-repomd.xml
    dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz
    repomd.xml
    [root@server repodata]# 
    

4、开启VSFTP服务

  • 关闭防火墙

    systemctl stop firewalld
    setenforce 0
    iptables -F
    
  • 加入开机自启

    [root@server ~]# systemctl enable --now vsftpd.service
    

三、客户端配置

1、测试访问FTP服务

  • 安装FTP服务:yum -y install ftp

  • 匿名用户登录:账户:ftp 密码:无

    [root@bogon yum.repos.d]# ftp 192.168.146.132
    Connected to 192.168.146.132 (192.168.146.132).
    220 (vsFTPd 3.0.2)
    Name (192.168.146.132:root): ftp
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp>
    

2、配置yum仓库

  • baseurl=ftp://IP地址+文件夹目录
[root@client ~]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# mkdir bak
[root@client yum.repos.d]# move  *.repo  bak
[root@client yum.repos.d]# vim ftp.repo
[ftp]
name=centos7.packages
baseurl=ftp://192.168.209.134/centos7
enabled=1
gpgcheck=0
[other]
name=other.packages
baseurl=ftp://192.168.209.134/other
enabled=1
gpgcheck=0

3、清除缓存

[root@client yum.repos.d]# yum clean all

4、安装软件测试

[root@client yum.repos.d]# yum -y install httpd 

相关文章:

  • win32汇编环境,网络编程入门之十
  • C++实现决策树与随机森林调优困境:从性能瓶颈到高效突破
  • K8s 是什么? 基本元件、核心功能、4 大优点一次看!
  • 【差分隐私相关概念】一个问题的对偶转换
  • 【江协科技STM32】Unix时间戳BKP备份寄存器RTC实时时钟(学习笔记)
  • 基于SpringBoot的名著阅读网站
  • 【RHCE】综合实战练习
  • Unity 实现一个简易可拓展性的对话系统
  • deepseek搭建本地私有知识库dify安装介绍docker compose图文教程
  • Spring漏洞再现
  • 卷积神经网络 - 关于LeNet-5的若干问题的解释
  • 【机器学习/大模型/八股文 面经 (一)】
  • 深度学习技术与应用的未来展望:从基础理论到实际实现
  • Spark Driver生成过程详解
  • Pyecharts功能详解与实战示例
  • CCF编程能力等级认证GESP—C++4级—20250322
  • 传统复古怀旧标签标识Logo设计PSAI无衬线英文字体安装包 Myfonts – Hebden Recut Font Family
  • 「DP」专题训练(持续更新中)
  • 基于linuxC结合epoll + TCP 服务器客户端 + 数据库实现一个注册登录功能
  • 在IDEA中快速注释所有console.log
  • 安赛乐米塔尔深化在华战略布局,VAMA总经理:做中国汽车板竞争力前三
  • 甘肃省政府原党组成员、副省长杨子兴被提起公诉
  • 经济日报:仅退款应平衡各方权益
  • 研究完蚂蚁搬家,我好像明白了为什么我们总是堵车
  • 著名医学翻译家王贤才逝世,享年91岁
  • “五一”假期首日国铁郑州局迎大客流,预计发送旅客逾95万人次