RPKI资源公共密钥基础架构体系的搭建

news2024/9/24 13:22:41

Ubuntu系统下RPKI体系的搭建

Ubuntu安装Nginx

一、安装

apt-get update
apt-get install nginx
nginx -v  #查看安装版本

二、目录说明

/usr/sbin/nginx:主程序,启动文件
/etc/nginx:存放配置文件
/var/www/html:存放项目目录
/var/log/nginx:存放日志 

三、管理命令

service nginx start
service nginx restart
service nginx stop

Ubuntu安装node.js

一、先卸载已经安装的旧版本

sudo apt-get remove nodejs

二、安装新版本

wget https://nodejs.org/dist/v14.18.0/node-v14.18.0-linux-x64.tar.xz
tar xf node-v14.18.0-linux-x64.tar.xz
sudo cp -r node-v14.18.0-linux-x64 /usr/local/lib/nodejs
echo "export export PATH=/usr/local/lib/nodejs/bin:$PATH" >> ~/.bashrc
echo "export export PATH=/usr/local/lib/nodejs/bin:$PATH" >> ~/.bashrc
. ~/.profile
. ~/.bashrc
#进行软链接
sudo ln -s /usr/local/lib/nodejs/bin/node /bin/node
sudo ln -s /usr/local/lib/nodejs/bin/npm /bin/npm

node -v
#v14.18.0
npm  -v
#6.14.15

安装node.js运行yarn报错解决

安装cmdtest

apt install cmdtest

进入前端程序目录下执行yarn报错

 00h00m00s 0/0: : ERROR: There are no scenarios; must have at least one.

解决方法:

一、卸载原有yarn

 sudo apt remove yarn

并按照 官方网站的说明 安装它,在我的情况下(Ubuntu 20.04.6 LTS \n \l)如下:

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -

echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

sudo apt update && sudo apt install yarn

yarn

RPKI体系结构搭建

1、相关文章

  • krill:

​ https://krill.docs.nlnetlabs.nl/en/stable/index.html

  • Krill as a Trust Anchor

    https://krill.docs.nlnetlabs.nl/en/stable/trust-anchor.html

  • Running a Publication Server

​ https://krill.docs.nlnetlabs.nl/en/stable/publication-server.html

2、基于KRILL TA的逻辑结构

​ RPKI Trust Anchor(TA)由TA代理和TA签名者组成。

​ TA签名者负责生成和使用TA RPKI密钥。它被设计成使用自己的独立命令行工具krillta来操作。为了提高安全性,可以在不使用此工具时将此工具用于与网络断 开连接并处于脱机状态的系统,并且可以选择使用HSM来处理密钥。

​ TA Proxy始终位于Krill内部,负责所有在线操作,例如处理与子CA的RFC 6492通信,以及发布由TA签名者使用RFC 8181通信协议与发布服务器签署的材料。TA代理对这些协议使用自己的“身份”密钥和证书。

在这里插入图片描述

​ 图1:Trust Anchor 体系结构

3、实验环境搭建

在ca、ta、repository在一台物理机中,RPKI Trust Anchor(TA)、children ca、publication目前安装在一台物理机内,通过创建的TA来签发children ca,将children ca作为一个publication server,管理和发布ROA。

1.安装Nginx

​ 详细请看Ubutu安装Nginx

2.生成SSL自签名证书

​ 详细请看生成SSL自签名证书.mk

3.nginx.conf
user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    server {
        listen       443 ssl;
        server_name  rpki.qcl.edu.cn;

        ssl_certificate       /etc/nginx/blog.crt;
        ssl_certificate_key   /etc/nginx/blog_nopass.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        #if ($request_uri = "/") {
        #    return 301 https://qcl.caroot.com/index.html#/testbed;
        #}
        location / {
            proxy_pass http://127.0.0.1:5173/;
            proxy_ssl_verify off;
        }
        location /rfc6492 {
            proxy_pass https://127.0.0.1:3000/rfc6492;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

          # krill does not use a valid certificate/tls is handled by nginx
            proxy_ssl_verify off;
        }
        location /rfc8181 {
          proxy_pass https://127.0.0.1:3000/rfc8181;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
  
          # krill does not use a valid certificate/tls is handled by nginx
          proxy_ssl_verify off;
        }

        location /api {
          proxy_pass https://127.0.0.1:3000/api;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
  
          # allow IPv4 and IPv6 documentation ranges
          #allow 192.0.2.0/24;
          #allow 2001:0db8::/32;
          #deny  all;
  
          # krill does not use a valid certificate/tls is handled by nginx
          proxy_ssl_verify off;
        }
        location /rrdp {
            proxy_pass https://127.0.0.1:3000/rrdp;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

          # krill does not use a valid certificate/tls is handled by nginx
            proxy_ssl_verify off;
        }

        #location / {
        #          root   html;
        #          index  index.html index.htm;
        #   }
    }

}
4.安装krill

If you have a machine with an amd64/x86_64 architecture running Ubuntu 16.x, 18.x, 20.x or 22.x, you can install Krill from our software package repository.

First update the apt package index:

sudo apt update

Then install packages to allow apt to use a repository over HTTPS:

sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release

Add the GPG key from NLnet Labs:

curl -fsSL https://packages.nlnetlabs.nl/aptkey.asc | sudo gpg --dearmor -o /usr/share/keyrings/nlnetlabs-archive-keyring.gpg

Now, use the following command to set up the main repository:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/nlnetlabs-archive-keyring.gpg] https://packages.nlnetlabs.nl/linux/ubuntu \
$(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/nlnetlabs.list > /dev/null

After updating the apt package index you can install Krill:

sudo apt update
sudo apt install krill

Review the generated configuration file at /etc/krill.conf. Pay particular attention to the service_uri and admin_token settings. Tip: The configuration file was generated for you using the krillc config simple command.

Warning
If you modify the default storage_uri, or if you decide to symlink its default directory /var/lib/krill/data to another location or volume, you will need to:

ensure the user krill has write permissions

configure systemd to give the krill process access

The easiest way to achieve the latter is by using systemctl edit krill and adding the following:

` [Service] ReadWritePaths=/your/path/to/data `

Once happy with the settings use sudo systemctl enable --now krill to instruct systemd to enable the Krill service at boot and to start it immediately. The krill daemon runs as user krill and stores its data in /var/lib/krill/data, unless you modified the storage_uri setting.

You can check the status of Krill with:

sudo systemctl status krill

You can view the logs with:

sudo journalctl --unit=krill
5.krill.conf
###########################################################################
#                                                                        #
#                              DATA                                      #
#                                                                        #
###########################################################################

# Specify the directory where the publication server will store its data.
# Note that clustering through a shared data directory is not supported.
# But, we plan to look into a proper clustering solution later.
#
data_dir = "/var/lib/krill/data/"

# Specify the path to the PID file for Krill.
#
# Defaults to "krill.pid" under the 'data_dir' specified above.
#
pid_file = "/var/lib/krill/data/krill.pid"


###########################################################################
#                                                                        #
#                           LOGGING                                      #
#                                                                        #
###########################################################################

# Log level
#
# The maximum log level ("off", "error", "warn", "info", or "debug") for
# which to log messages.
#
# Defaults to "warn"
#
log_level = "debug"

# Log type
#
# Where to log to. One of "stderr" for stderr, "syslog" for syslog, or "file"
# for a file. If "file" is given, the "log_file" field needs to be given, too.
#
### log_type = "file"
log_type = "syslog"

# Syslog facility
#
# The syslog facility to log to if syslog logging is used. Defaults to "daemon".
#
### syslog_facility = "daemon"

# Log file
#
# The path to the file to log to if file logging is used. If the path is
# relative, it is relative to the current working directory from which
# the binary is executed.
#
### log_file = "./krill.log"


###########################################################################
#                                                                        #
#                           ACCESS                                      #
#                                                                        #
###########################################################################
# Admin Token
#
# Define an admin token that can be used to interact with the API. Token use
# is modelled after OAuth 2.0 Bearer Tokens (RFC 6750), which are expected be
# included as an HTTP header in requests by clients.
#
# If you do not specify a value here, the server will insist that you provide
# a token as an environment variable with the key "KRILL_ADMIN_TOKEN".
#
admin_token = "rpkiqcl"
# Specify the ip addresses and port number that the server will use.
#
# Note: by default Krill uses "127.0.0.1" (IPv4 localhost) as its IP address.
# We recommend that you keep this setting and use a proxy server such as NGINX
# or Apache if you must make your Krill instance accessible remotely.
#
# You can use the 'ip' setting in this config file to override the default. You
# can specify a single IP address or an array of addresses.
#
# If you want to support remote delegated CAs to be children under a CA and/or
# publish their content, then you should set the "service uri" setting described
# below. If you do not set this, then Krill will use the (first) IP address as
# the hostname for this settting.
#
#
### ip             = "127.0.0.1"            # default
### ip             = [ "127.0.0.1", "::1" ] # multiple IP addresses
### port           = 3000                   # applies to all ip addresses


# Specify the base public service URI hostname and port.
#
# The default service URI is set to https://localhost:3000/. This is fine for
# setups where you use Krill to run your own CA only. You do not need to set this
# to enable remote access to the UI or API (e.g. for using the CLI remotely).
# Simply setting up a proxy suffices for this.
#
# However, if you are serving as a parent CA or Publication Server that needs
# to be accessible by remote CAs, then you will need to tell your Krill instance
# what its public (base) URI will be, so that it can include the proper URIs
# in responses to those CAs.
#
# Note that Krill insists on HTTPS for this, even if you elect to use "disable"
# for the https_mode. The reason is that, while RFC 6492 (provisioning) and
# RFC 8181 (publication) allow for plain HTTP and provide security through
# signed messages, we believe it is better if this (remote) traffic is also
# encrypted and one can (and should) use an HTTPS capable proxy in this case.
#
# At present this MUST be an https URI with a hostname and optional port number only.
# It is not allowed to use a Krill specific path prefix. If you have a strong
# motivation for this, then please comment on the following github issue:
# https://github.com/NLnetLabs/krill/issues/263
#
# Krill UI, API and service URIs will be derived as follows:
#  <service_uri>api/v1/...                (api)
#  <service_uri>rfc6492                   (for remote children)
#  <service_uri>...                       (various UI resources)
service_uri = "https://rpki.qcl.edu.cn/"
ta_support_enabled = true
bgp_risdumps_enabled = false
# Disable the download of BGP information. Unless you are also using
# this server to host your CAs there is no need to keep this information
# in memory.
6.安装krillta
sudo apt install krillta

创建一个工作目录,您的 TA 签名者可以在其中保存其状态和日志文件。然后创建一个配置文件。如果您使用/etc/krillta.conf 作为配置文件,那么krillta将能够自动找到它

######################################################################################
#                                                                                    #
#                                      DATA                                          #
#                                                                                    #
######################################################################################

# Specify the directory where the TA Signer will store its data.
data_dir = "/var/lib/krillta/data"

######################################################################################
#                                                                                    #
#                                     LOGGING                                        #
#                                                                                    #
######################################################################################

# Log level
#
# The maximum log level ("off", "error", "warn", "info", or "debug") for
# which to log messages.
#
# Defaults to "warn"
#
### log_level = "warn"

# Log type
#
# Where to log to. One of "stderr" for stderr, "syslog" for syslog, or "file"
# for a file in which case $data_dir/krillta.log will be used. This cannot (yet)
# be overridden.
#
# Defaults to "file"
#
### log_type = "file"

######################################################################################
#                                                                                    #
#                                SIGNER CONFIGURATION                                #
#                                                                                    #
######################################################################################

#
# By default OpenSSL is used for key generation and signing.
#
# But.. The usual Krill HSM support should also work in this context. If you want to
# use an HSM please read the documentation here:
# https://krill.docs.nlnetlabs.nl/en/stable/hsm.html
#
# Note that this configuration cannot be changed after the TA Signer has been
# initialised. Or rather.. where for normal Krill CAs defaults may be changed and
# key rolls can be used to start using a different signer, there is no key roll
# support for the TA. This may be implemented in future in which case we would
# also support RPKI Signed TALs for this process.
7.安装krill-sync

按照https://github.com/NLnetLabs/krill-sync中“Build with Cargo”介绍安装

For Ubuntu 20.04 with Rust 1.51.0:

apt update && apt install -y build-essential curl libssl-dev openssl pkg-config
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
cargo install --git https://github.com/NLnetLabs/krill-sync.git --tag v0.2.0-rc1 --locked

Krill-sync配置文件(/etc/rsync.conf)

uid = nobody
gid = nobody
max connections = 50

[repo]
path = /var/lib/krill/data/repo/rsync/current/
comment = RPKI repository
read only = yes
8.配置环境变量
export  KRILL_CLI_TOKEN=rpkiqcl(备注:必须与/ect/krill.conf中的一致)
9.具体配置步骤
1. krillta proxy init
2. krillc pubserver server init --rrdp https://rpki.qcl.edu.cn/rrdp/ 	--rsync rsync://rpki.qcl.edu.cn/repo/
3. rsync --list-only rsync://rpki.qcl.edu.cn/repo/
4. krillta proxy repo request > ./pub-req.xml
5. krillc pubserver publishers add --request ./pub-req.xml >./repo-res.xml
6. krillta proxy repo configure --response ./repo-res.xml
7. krillta proxy id --format json > ./proxy-id.json
8. krillta proxy repo contact --format json  >./proxy-repo.json
9. krillta signer init --proxy_id ./proxy-id.json --proxy_repository_contact ./proxy-repo.json --tal_https https://rpki.qcl.edu.cn/ta/ta.cer --tal_rsync rsync://rpki.qcl.edu.cn/ta/ta.cer
10. krillta signer show > ./signer-info.json
11. krillta proxy signer init --info ./signer-info.json

12. krillc add --ca rpkiqcl
13. krillc show --ca rpkiqcl --format json >./rpkiqcl.json
14. krillta proxy children add --info ./rpkiqcl.json >./res.xml
15. krillta proxy children response --child rpkiqcl >./res.xml
16. krillc parents add --ca rpkiqcl --parent ta --response ./res.xml
17. krillc repo request --ca rpkiqcl > ./pub-req.xml
18. krillc pubserver publishers add --request ./pub-req.xml > ./repo-res.xml
19. krillc repo configure --ca rpkiqcl --response ./repo-res.xml
20. krillta proxy signer make-request
21. krillta proxy signer show-request --format json > ./request.json
22. krillta signer process --request ./request.json
23. krillta signer last > ./response.json
24. krillta proxy signer process-response --response ./response.json

常用命令

配置环境变量
export  KRILL_CLI_TOKEN=Rpki_Qcl@2024
启动krill
sudo systemctl enable --now krill
查看krill运行状态
sudo systemctl status krill
查看krill运行中日志输出
sudo journalctl --unit=krill
查看CA信息
krillc show --ca rpkiqcl
移除子CA
krillc children remove --ca qcl_admin --child qcl_admin3 --token krill_qcl
移除父CA
krillc parents remove --ca qcl_admin --parent testbed --token krill_qcl
查看CA的ROA信息
krillc roas list --ca rpkiqcl
删除ROA
krillc roas update --remove '10.0.0.0/8 => 1' --ca rpki_qcl
添加CA
krillc add --ca rpkiqcl
删除CA
krillc delete --ca rpkiqcl
查看公共服务状态
krillc pubserver server stats
列出资源库
krillc pubserver publishers list --token krill_qcl
删除资源库
krillc pubserver publishers remove --publisher rpkiqcl
查看父级连接状态
krillc parents statuses

后台启动前端源码项目

nohup yarn dev --host >/dev/null 2>&1 & exit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1677958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python数据分析——数据可视化(图形绘制基础)

数据可视化&#xff08;图形绘制基础&#xff09; 前言一、图形绘制基础Matplotlib简介使用过程sin函数示例 二、常用图形绘制折线图的绘制plot示例 散点图的绘制plot示例 柱状图的绘制bar示例 箱型图绘制plot.box示例 饼状图的绘制pie示例 三、图形绘制的组合情况多个折线图的…

Google在我的网站显示不同的SEO元标题/描述

Rank Math使您可以比以往更轻松地为您的博客文章、页面和其他自定义帖子类型编写完美的SEO元标题和描述。但正如您可能已经注意到的那样&#xff0c;谷歌&#xff08;以及其他搜索引擎&#xff09;经常不简单地选择使用您设置的元描述&#xff0c;并且这种情况正变得越来越普遍…

rocketmq的基础概念

生产者 生产者生产的过程&#xff1a; producer会在接入nameserver时&#xff0c;获取所有topic和队列的信息&#xff0c;然后在每次发送时&#xff0c;根据负载均衡在topic中选择发送的队列。 生产者的消息是发送给具体的queue&#xff0c;而消费者消费是从具体的queue消费 …

Git系列:git add 被忽视的操作技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

C语言——栈和队列

文章目录 一、栈1. 栈的概念2. 栈的基本功能3. 栈的实现 二、 队列1. 队列的概念2. 队列的基本功能3. 队列的实现 一、栈 1. 栈的概念 栈是一种特殊的线性表&#xff0c;限定仅在表尾进行插入和删除的线性表。这一端称之为栈顶&#xff0c;另一端称为栈底。 栈又称为后进先出…

python将两张图片对齐

目录 需要对齐的照片如下&#xff1a; 源码&#xff1a; 结果&#xff1a; 需要对齐的照片如下&#xff1a; 源码&#xff1a; import cv2 import numpy as np from matplotlib import pyplot as plt# 读取两张图片 imgA cv2.imread(./out/out/3.png) imgB cv2.imread(./…

工具:资源包提取

1.提取unity资源包的工具 一定要通过文件夹的方式选择unity文件否则导出来后的资源不完整

锚点组件--支持点击、滚动高亮锚点

实现一个锚点组件&#xff0c;页面滚动时高亮当前位置锚点、点击锚点时跳转到指定冒点位置&#xff0c;同时选中锚点也高亮 效果图 父组件 import ./index.less; import Anchor from ./Anchor; import Content from ./Content;export default function index() {return (<…

rocketmq的流程

生产过程 消费过程 存储 在RocketMQ中&#xff0c;一个Broker的所有Topic的消息都会被写入到同一个CommitLog文件中。 每个队列&#xff08;Queue&#xff09;都有对应的ConsumeQueue文件。 ConsumeQueue每个记录定长&#xff0c;20字节&#xff0c;消息在commitlog中的偏移量…

【软件的安装与基本设置】AD21软件的PCB规则设置

在绘制PCB之前&#xff0c;要进行规则的创建&#xff0c;因为在绘制PCB的过程中&#xff0c;难免会出现很多错误&#xff0c;所以需要先对绘制PCB创建规则&#xff0c;即所有的打孔&#xff0c;走线&#xff0c;铺铜都要基于电气性能规则去设计&#xff0c;等到后期&#xff0c…

[vue] nvm

nvm ls // 看安装的所有node.js的版本nvm list available // 查显示可以安装的所有node.js的版本可以在可选列表里。选择任意版本安装&#xff0c;比如安装16.15.0 执行&#xff1a; nvm install 16.15.0安装好了之后。可以执行&#xff1a; …

云服务器修改端口通常涉及几个步骤

云服务器修改端口通常涉及几个步骤 远程连接并登录到Linux云服务器&#xff1a; 使用SSH工具&#xff08;如PuTTY、SecureCRT等&#xff09;远程连接到云服务器。 输入云服务器的IP地址、用户名和密码&#xff08;或密钥&#xff09;进行登录。 修改SSH配置文件&#xff1a…

智能数据提取:在严格数据治理与安全标准下的实践路径

一、引言 随着信息技术的飞速发展&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;数据量的爆炸式增长和数据格式的多样化&#xff0c;使得传统的数据提取方法变得效率低下且难以满足业务需求。智能数据提取技术应运而生&#xff0c;它通过应用人工智能和机器学…

Unity里的Time

Time and frame rate management Time类&#xff1a; Time script reference page. 一些常见的属性有&#xff1a; Time.time 返回从游戏开始经历的时间.Time.deltaTime 返回从上帧结束到现在经历的时间&#xff0c;和帧率成反比Time.timeScale 控制时间流逝的因子Time.fixe…

一个制剂生产人眼中的精益管理

精益管理&#xff08;Lean Management&#xff09;是一种通过减少浪费和提高价值创造的方法&#xff0c;广泛应用于各个行业中&#xff0c;包括药品制剂生产领域。 本文&#xff0c;以一个多年从事药品制剂生产的人的角度&#xff0c;从优点、功能以及与其他管理方法的比较等方…

交通灯-设计说明书

设计摘要&#xff1a; 本设计基于单片机技术&#xff0c;旨在实现智能化交通信号控制&#xff0c;并具备夜间模式、禁止通行模式、同行模式切换以及车流量监测功能。通过按键S1和S2实现夜间模式和禁止通行模式的切换&#xff0c;确保夜间交通安全和禁止通行的需要。按键S3和S4…

阿里云OSS如果指定某个文件夹给子账户

** 第一步创建子账号 ** 创建完用户不要给任何权限&#xff01; 当前页面切换到认证管理获取AccessKey即可 第二步目录授权 找到对应桶文件目录 上面授权按钮操作 选择添加的子账号账号保存即可&#xff01;

springmvc核心流程

核心流程及配置 核心流程 执行流程 用户发送请求到DispatcherServlet前端控制器&#xff0c;前端控制器收到请求后自己不进行处理&#xff0c;而是委托给其他的解析器进行处理&#xff0c;作为统一访问点&#xff0c;进行全局的流程控制 DispatcherServlet调用HandlerMapping映…

电机完美控制的感觉如何【应用案例】

当电机控制技术成为人体的一部分时&#xff0c;对控制系统的组件尺寸和可靠性要求将极大提高。得益于集成式FOC控制系统组件&#xff0c;第一款具有两个活动关节的义肢得以在短时间内完成—— 赶上在苏黎世举办的全球半机械人奥运会(Cybathlon)。 失去肢体显然会对一个人的生活…

社交媒体的探索者:探寻Facebook的发展历程

在当今数字化时代&#xff0c;社交媒体已经成为了人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为最具影响力的社交平台之一&#xff0c;其发展历程承载着无数的探索与创新。本文将深入探讨Facebook的发展历程&#xff0c;从其创立初期到如今的全球化影响&#xff0…