VPS简介
VPS(Virtual Private Server)是一种虚拟化技术,可以将一台物理服务器分成多个虚拟服务器,每个虚拟服务器都有独立的操作系统和资源,相互之间互不影响。VPS可以提供类似于独立服务器的功能,但价格更便宜,适合中小企业和个人用户使用。VPS可以用于网站托管、应用程序部署、游戏服务器、数据备份等各种场景。
# VPS购买
国内常见的VPS服务提供商
阿里云-计算,为了无法计算的价值 (aliyun.com)
腾讯云-产业智变·云启未来 - 腾讯 (tencent.com)
华为云-共建智能世界云底座- (huaweicloud.com)
# VPS镜像选择
总的来说,根据自己的需求进行选择
PS:图为阿里云实例创建界面截图
我个人习惯使用 Ubuntu
,版本选择最新版即可
有些会提供自动安装指定应用的服务器,如果单纯只是运行指定应用服务,那么可以选择,个人觉得没有必要
一般选择基础操作系统,然后所有的应用都是可以自己手动安装的
# VPS配置
# SSH登录
1.SSH服务允许root登录
# 编辑SSH服务配置文件
vim /etc/ssh/sshd_config
# 添加以下内容,允许root登录
PermitRootLogin yes
# 重启SSH服务
systemctl restart ssh
2.SSH登录工具
WindTerm、MobaXterm
使用SSH连接工具,连接VPS,一般SSH连接工具需要我们输入以下三个部分的内容:
- IP:VPS公网IP
- 用户名:root
- 密码:root用户的密码
# APT源配置
cat /etc/apt/sources.list
一般国内VPS,都默认配置了国内镜像源,因此无需进行配置
# 更新源
apt update
如果默认不是国内镜像源,可以采用以下国内APT软件源:
Ubuntu 软件仓库(tsinghua.edu.cn)
Ubuntu镜像(aliyun.com)
Ubuntu 源使用帮助(ustc.edu.cn)
注意:修改完软件源后需要执行apt update
更新软件源
# 安全组
安全组是一种虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。
可以通过配置安全组规则,允许或禁止安全组内的实例的出流量和入流量。
阿里云添加安全组规则
腾讯云添加安全组规则
华为云添加安全组规则
建议:学习阶段,可以把安全组规则限制放开,允许所有主机对VPS所有端口的访问,避免操作过程中出现因为安全组规则问题导致操作无法实现
注意:当你碰到VPS服务端口无法访问时,记得检查以下安全组规则是否允许访问对应端口
# VPS环境安装
# Docker安装
在Ubuntu上安装Docker引擎
1.运行以下命令卸载所有冲突的包
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
2.添加Docker的官方GPG密钥
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
3.将存储库添加到APT源
- 官方存储库(国内安装可能会很慢)
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- 国内镜像源-清华源(推荐)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
4.安装 Docker 软件包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5.验证 Docker 是否成功安装
docker --version
# MSF安装
Metasploit 安装
# Linux官方安装(不推荐)
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall
官方提供的安装方式十分缓慢
推荐采用如下方式
# APT安装(推荐)
1.添加Kali
软件源
cat >> /etc/apt/sources.list << EOF
deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
EOF
2.更新软件源
apt update
出现如下错误:
解决方法:
wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add
3.安装
apt install metasploit-framework
安装过程中如果出现如下问题:
执行如下命令:
apt --fix-broken install
apt install metasploit-framework
# Python环境安装
系统自带python3
python3 -V
1.安装miniconda3
通过安装 Miniconda3,用户可以方便地创建自己的 Python 开发环境,而无需一次性安装大量不必要的软件包。同时,通过 Conda 包管理器,用户可以轻松地安装、更新和管理 Python 包及其依赖项。
https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /miniconda.sh
bash /miniconda.sh -b -p /miniconda3
rm -rf /miniconda.sh
将miniconda3
添加到环境变量:
-bash
cat >> ~/.bashrc << EOF
export PATH=/miniconda3/bin:\$PATH
EOF
-zsh
cat >> ~/.zshrc << EOF
export PATH=/miniconda3/bin:\$PATH
EOF
2.启动conda虚拟环境
conda activate
问题:执行后报错
解决方法:
获得环境路径
conda info | grep -i 'base'
base environment : /miniconda3 (writable)
加载conda.sh脚本
source /miniconda3/etc/profile.d/conda.sh
-bash
cat >> ~/.bashrc << EOF
source /miniconda3/etc/profile.d/conda.sh
EOF
-zsh
cat >> ~/.zshrc << EOF
source /miniconda3/etc/profile.d/conda.sh
EOF
- conda换源
vim ~/.condarc
channels:
- defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
# 清除索引缓存
conda clean -i
# 查看配置
conda config --show
4.conda使用
# 列出所有Conda环境
conda env list
# 列出当前环境中安装的所有包
conda list
# 创建一个名为 "py39" 的虚拟环境,并指定使用 Python 3.9 版本
conda create -n py39 python=3.9
# 激活名为 "py39" 的虚拟环境
conda activate py39
# 退出当前的虚拟环境
conda deactivate
# 在当前 Conda 环境中安装 requests 包
conda install requests
# 删除名为"py39"的虚拟环境以及其所有安装的包
conda remove -n py39 --all
# 删除指定虚拟环境中安装的特定包
conda remove -n <env name> <package name>
# Java环境安装
OpenJDK 是一个开源的、免费的 Java 开发工具包,适合于大多数的开发需求。
OracleJDK 包含了一些额外的商业功能和工具,同时在商业环境下需要考虑相关的许可证费用。
OpenJDK 和 Oracle JDK 在基本的 Java 核心功能上是一样的,但是在一些高级功能和工具上可能存在一些差异,例如一些特定于 Oracle 的工具和功能可能只包含在 Oracle JDK 中。
# OracleJDK安装
1.下载JDK安装包
这里以JDK8u333
为例:
下载JDK: https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
需要登录Oracle账号,Oracle账号共享: http://bugmenot.com/view/oracle.com
下载后压缩包名字为:jdk-8u333-linux-x64.tar.gz
,上传压缩包到VPS
2.创建目录解压文件
sudo mkdir -p /usr/local/java
sudo cp jdk-8u333-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
sudo tar -zxf jdk-8u333-linux-x64.tar.gz
3.通知系统Java的位置
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_333/bin/java" 1112
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_333/bin/javac" 1112
# OpenJDK安装
1.搜索软件包列表中的OpenJDK
# 通过 apt-cache search 命令搜索包含 "java" 的软件包列表
apt-cache search java | grep jdk
2.apt安装openjdk-11
apt install openjdk-11-jdk
安装后的路径:/usr/lib/jvm/java-11-openjdk-amd64/bin/java
3.通知系统Java的位置
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/java-11-openjdk-amd64/bin/java" 1113
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/java-11-openjdk-amd64/bin/javac" 1113
# apt安装openjdk-17
apt install openjdk-8-jre-headless
apt install openjdk-8-jdk-headless
# Java版本切换
update-alternatives
:是一个在Debian和Ubuntu系统中用于管理系统中软件的符号链接的命令。它允许系统管理员将系统中的软件链接到不同的位置,从而允许在不同的软件之间进行切换或选择默认的软件。
# 列出系统中所有可用的Java运行时环境的符号链接
update-alternatives --list java
# 选择默认的Java运行时环境
update-alternatives --config java
# Go环境安装
# 下载安装
https://go.dev/dl/
这里以版本go1.20.11、go1.21.4
为例
- go1.20.11
wget https://go.dev/dl/go1.20.11.linux-amd64.tar.gz
mkdir -p /usr/local/go1.20
tar -C /usr/local/go1.20 -xzf go1.20.11.linux-amd64.tar.gz
- go1.21.4
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
mkdir -p /usr/local/go1.21
tar -C /usr/local/go1.21 -xzf go1.21.4.linux-amd64.tar.gz
# 管理Go版本
sudo update-alternatives --install "/usr/bin/go" "go" "/usr/local/go1.21/go/bin/go" 1114
sudo update-alternatives --install "/usr/bin/go" "go" "/usr/local/go1.20/go/bin/go" 1115
- 切换go版本
update-alternatives --list go
update-alternatives --config go
# GOPATH
GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。
从 github
下载别人的包:
go get github.com/jmoiron/sqlx
这个包会下载到我们本地 GOPATH
目录下的 src/github.com/jmoiron/sqlx
GOPATH
可以设置多个,其中,第一个将会是默认的包目录,使用 go get
下载的包都会在第一个path
中的src
目录下,使用 go install
时,在哪个GOPATH
中找到了这个包,就会在哪个GOPATH
下的bin目录生成可执行文件
# GOENV
# 查看 Go 环境变量
go env
# GO111MODULE
go env -w GO111MODULE=on
GO111MODULE
有三个值:off、on、auto(默认值)
GO111MODULE=off
go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor
目录或者GOPATH
模式来查找。
GO111MODULE=on
go命令行会使用modules
,而一点也不会去GOPATH
目录下查找。
执行如下命令生成 go.mod
文件
go mod init
go mod tidy
GO111MODULE=auto
默认值,go
命令行将会根据当前目录来决定是否启用 module
功能。这种情况下可以分为两种情形:
- 当前目录在
GOPATH/src
之外且该目录包含go.mod
文件 - 当前文件在包含
go.mod
文件的目录下面。
当 modules
功能启用时,依赖包的存放位置变更为 $GOPATH/pkg
,允许同一个 package
多个版本并存,且多个项目可以共享缓存的 module
。
1.使用了相对路径:
import "./models"
报错:build command-line-arguments: cannot find module for path /D/dev
这里后面一堆本地路径
这是因为在 go module
下 你源码中 impot …/
这样的引入形式不支持了, 应该改成 impot 模块名/
。 这样就ok了
2.使用结合了GOPATH
的形式:
import "Go-Player/src/ademo/models"
于是我们把上面的import
改成了结合GOPATH
的如上形式
报错:package Go-Player/src/ademo/models is not in GOROOT D:/development/go/src/GPlayer/src/ademo/models
3.彻底解决方法
用 go env -u
恢复初始设置,不再使用 go mod
:
# 设置env
go env -w GO111MODULE=off
go env -w GO111MODULE=auto
# 取消设置env
go env -u GO111MODULE
区别在于,如果 GO111MODULE=on
或者auto
,在go get
下载包时候,会下载到GOPATH/pkg/mod
,引入时也是同样的从这个目录开始。如果运行了上述命令,那么在go get
下载包时候,会下载到 GOPATH/src
目录下
# GOPROXY
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
go env -w GOPROXY=https://goproxy.io/,direct
# Go命令
bug: 启动一个Bug报告
build: 编译包和依赖,编译指定源码文件、代码包以及它们的依赖包
clean: 移除对象文件和缓存文件,删除执行其他命令时产生的一些文件和目录
doc: 显示包或符号的文档,打印go语言程序实体的文档
env: 打印Go环境变量信息
fix: 更新包以使用新的API,把指定代码包的所有go语言源码文件中的旧版本代码修正为新版本代码
fmt: 重新格式化包源代码
generate: 通过处理源代码生成Go文件
get: 将依赖项添加到当前模块并安装它们,从互联网下载或更新代码包及其依赖,并对它们进行编译和安装
install: 编译并安装包和依赖项,用于编译并安装指定的代码包及它们的依赖包
list: 列出包或模块
mod: 模块维护
work: 工作区维护
run: 编译并运行Go程序
test: 测试包,对go语言编写的程序进行测试
tool: 运行指定的go工具
version: 打印Go版本
vet: 报告包中可能的错误,用于检查go语言源码中静态错误的简单工具
使用例子
git clone https://github.com/tangxiaofeng7/CVE-2023-32315-Openfire-Bypass.git
cd CVE-2023-32315-Openfire-Bypass/scan_all
go mod tidy
# 运行
go run main.go -h
# 编译
go build -o CVE-2023-32315
# 执行
./CVE-2023-32315 -h