简介

自从使用github以来,一直都是在github网站在线上传文件到仓库中,但是有时因为网络或者电脑的原因上传失败。最重要的原因是我习惯本地编辑,完成以后再一起上传github。看过了几个教程,总结出最适合自己的比较简单的方法。

img

github在线上传文件夹

在线上传也可以上传完整的文件夹结构,直接拖拽到上传文件页面的框中即可。

点击上传文件

img

直接拖拽

直接拖拽即可上传文件夹及文件夹里面的文件。如果点击* choose your files *就只能上传单个文件。

img

通过git工具上传本地文件夹(本地项目)

下载git工具

img

下载完成后安装完成,注意在安装过程中可以选择创建桌面快捷方式

img

绑定用户

打开git-bash.exe(直接在桌面上点击右键,或者点击开始按钮找到Git Bash)

img

在打开的GIt Bash中输入以下命令(用户和邮箱为你github注册的账号和邮箱)

1
2
$ git config --global user.name "hanyuntao"
$ git config --global user.email "hanyuntaocn@163.com"

img

设置SSH key(git中sshkey有何作用?

生成ssh key

首先检查是否已生成密钥cd ~/.ssh,如果返回的ls有3个文件,则密钥已经生成。

img

如果没有密钥,则通过

1
$ ssh-keygen -t rsa -C "hanyuntaocn@163.com"

生成,生成过程中一路按3次回车键就好了。(默认路径,默认没有密码登录)
生成成功后,去对应目录C:/Users/hyt.ssh里(hyt为电脑用户名,每个人不同)用记事本打开id_rsa.pub,得到ssh key公钥。

img

为github账号配置ssh key

切换到github,展开个人头像的小三角,点击settings,然后打开SSH keys菜单, 点击Add SSH key新增密钥,填上标题(最好跟本地仓库保持一致)。

img

接着将id_rsa.pub文件中key粘贴到此,最后Add key生成密钥.

上传本地项目到github

创建一个本地项目

这是我自己创建的几个文件夹及文件。

img

建立本地仓库

1.首先进入text文件夹

1
cd d:text

img

2.执行指令:

1
git init

![img](git上传方法/执行git init.png)

初始化成功后你会发现项目里多了一个隐藏文件夹.git

img

3.执行指令:

1
git add .

将所有文件添加到仓库

img

4.执行指令:

1
git commit -m "提交文件"

双引号内是提交注释。

img

关联github仓库

1.到github text仓库复制仓库地址

img

2.执行指令:

1
git remote add origin https://github.com/hanyuntao/text.git

img

上传本地代码

执行指令:

1
git push -u origin master

img

完成

可以看到我们的本地项目已经上传到了github上了。

img

注意:git是不能管理空的文件夹的,文件夹里必须有文件才能上传。

前言

对NAS总是抱有好奇?对NAS的价格望而却步?
但是,如果你有树莓派(或者其它arm64架构的开发板也行),或者是Linux服务器,为什么不试试让它们变成自己的小型NAS?

NAS

NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。

大型的NAS,比如:群晖。可以有App,对手机照片进行备份,还可以对数据进行灾变处理,但是价格就比较贵了。而本次搭建NAS,主要满足:

  • 在线访问数据
  • 下载站
  • 挂载到电脑上,作为网络U盘

操作思路

1. 在线访问数据

比如:.flv、.mp4、.jpg等等,我们使用PHP实现网络浏览,这里我们使用_h5ai:

演示网站

官方文档

2. 下载站

DownloadToNAS
下载站,我们使用Aria2这个多线程下载器实现,难点是挂载到电脑上,也就是目录映射。最好能满足:

  • 加密传输,保证安全
  • 支持平台多,速度稳定

3. 挂载到本地磁盘

在Windwos上挂载在Windwos上挂载

其实,本地挂载树莓派、服务器磁盘的选择有很多。比如:SMB、FTP等。但是,考虑安全和利用情况下,我还是选择Webdav。

Windows和macOS都支持挂载Webdav,但是可能会出现无法写的情况。我建议使用第三方免费工具:

以上两款软件也都是免费的。

本文使用Webdav挂载,如果你使用宝塔,或者使用SMB,那么也完全可以选择非Webdav协议挂载磁盘。

(宝塔不可使用Nginx Webdav插件)

总结

综上,我们本次需要安装:

  • Nginx:用来提供Web目录访问
  • PHP:用来映射目录,实现_h5ai
  • Nginx模块:Webdav模块和Fancyindex模块,用来实现Webdav

前排提示

本次教程,适用所有架构的Linux(arm架构和x86都可以)。PHP、Nginx的配置,使用编译安装的方法。

不建议用宝塔安装Nginx和PHP,服务管理起来不方便,其它的懂的都懂

服务器要求

如果是树莓派(或者其它arm64架构的开发板也行),那么没什么具体要求,有个可以刷写SD卡的软件即可

但是,如果是服务器,最好选择高带宽的服务器,内存最好需要2G以上,否则编译PHP时,可能需要SWAP的支持。

我的是香橙派,也是arm64架构的开发板,系统用的Debian11,用其它linux系统的可以根据 命令自行修改一下即可

从下面开始我都是用root用户来进行,不想用root用户的可以在命令前面加上sudo

PHP

PHP官方下载地址

安装依赖

为下面编译参数做准备

1
apt install build-essential pkg-config openssl libssl-dev libsqlite3-dev zlib1g-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libonig-dev libzip-dev ffmpeg imagemagick -y

下载PHP

1
2
3
wget https://www.php.net/distributions/php-8.2.6.tar.gz -P /usr/local/src
cd /usr/local/src && tar xf php-8.2.6.tar.gz
cd php-8.2.6

配置用户和用户组

orangepi是我开发板自带的用户,不想用自带的用户也可以创建一个别的用户和用户组

如果你在服务器上操作,建议创建一个www用户和www用户组:

1
2
3
4
5
6
7
8
# 创建一个www用户
sudo useradd www

# 创建一个www用户组
sudo groupadd www

# www用户归属于www用户组
sudo usermod -a -G www www

配置编译参数

这是我配置的编译参数,其他PHP版本可能略微不一样,需要自己判断),也可以参考我这篇文章部署LNMP教程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
./configure \
--prefix=/usr/local/php \
--with-curl \
--with-mysqli \
--with-openssl \
--with-pdo-mysql \
--with-jpeg \
--enable-gd \
--enable-fpm \
--with-fpm-user=orangepi \
--with-fpm-group=orangepi \
--enable-bcmath \
--enable-xml \
--with-zip \
--enable-mbstring \
--enable-sockets \
--with-zlib \
--enable-fileinfo \
--enable-exif
  • –with-fpm-user:fpm进程属于的用户
  • –with-fpm-group:fpm进程属于的用户组

编译安装

上面的configure配置没有问题,接下来就是编译和安装了,我图方便就一条命令来执行,新手可以把两条命令分开执行,先makemake install

1
make -j$(nproc) && make install -j$(nproc)

复制配置文件

1
2
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

测试运行

1
/usr/local/php7/sbin/php-fpm

查看服务进程和端口

1
2
ps aux | grep php-fpm
lsof -i:9000

Nginx

Nginx官方下载地址

安装依赖

为下面编译参数做准备

1
apt install build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev libxml2-dev libxslt-dev -y

额外模块

如果我们需要进行目录映射,需要更好看的、更实用的目录映射,需要额外的Fancyindex模块支持。

Nginx自带的Webdav支持不完善,需要额外的模块进行支持。

1
2
3
mkdir /usr/local/src/NginxModule/ && cd /usr/local/src/NginxModule
git clone https://github.com/arut/nginx-dav-ext-module.git
git clone https://github.com/aperezdc/ngx-fancyindex.git

下载Nginx

1
2
3
wget http://nginx.org/download/nginx-1.24.0.tar.gz -P /usr/local/src
cd /usr/local/src && tar xf nginx-1.24.0.tar.gz
cd nginx-1.24.0

配置用户和用户组

orangepi是我开发板自带的用户,不想用自带的用户也可以创建一个别的用户和用户组

如果你在服务器上操作,建议创建一个www用户和www用户组:

1
2
3
4
5
6
7
8
# 创建一个www用户
sudo useradd www

# 创建一个www用户组
sudo groupadd www

# www用户归属于www用户组
sudo usermod -a -G www www

配置编译参数

这是我配置的编译参数,其他Nginx版本可能略微不一样,需要自己判断),也可以参考我这篇文章部署LNMP教程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
./configure \
--prefix=/usr/local/nginx \
--user=orangepi \
--group=orangepi \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--add-module=/usr/local/src/NginxModule/nginx-dav-ext-module \
--add-module=/usr/local/src/NginxModule/ngx-fancyindex
  • –user:nginx进程属于的用户
  • –group:nginx进程属于的用户组

编译安装

上面的configure配置没有问题,接下来就是编译和安装了,我图方便就一条命令来执行,新手可以把两条命令分开执行,先makemake install

1
make -j$(nproc) && make install -j$(nproc)

配置

因为上面配置参数指定缓存文件在/var/cache/nginx,日志文件在/var/log/nginx,所以需要创建

1
2
mkdir /var/cache/nginx
mkdir /var/log/nginx

测试运行

1
/usr/local/nginx/sbin/nginx

查看服务进程和端口

1
2
3
ps aux | grep nginx
lsof -i:80

配置_h5ai

H5AI,其实全称是:HTML5 Apache Index。最初是用来在Apache Web服务器上,完成资源映射,但是后来适配到Nginx等其他平台。配置很简单:下载_h5ai-修改Nginx配置文件-开始使用
注意_h5ai的映射逻辑:

1
2
3
4
网站根目录(需要映射的目录)
├─ _h5ai
├─ 你的其他文件1
└─ 你的其他文件1

下载_h5ai

因为是开源的工具,所以网上有很多修改版本,包含官方的:

  • 官方版本:官方的版本,功能全、稳定。
  • Dplayer版本:基于官方旧版本开发,支持更多格式的在线视频播放。
  • Mintimate’s _h5ai:基于Dplayer版本并合并官方最新版本代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
cd /home/orangepi
mkdir Downloads

cd Downloads
git clone https://github.com/Mintimate/h5ai_M

#将h5ai_M项目里的_h5ai移到Downloads目录下
cd h5ai_M
mv _h5ai ..

#因为是用root用户创建的,需要修改该文件夹的所属用户和组
cd /home/orangepi
chown -R orangpepi:orangepi Downloads

修改Nginx配置

备份原先的nginx配置文件

1
mv /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf.bak

新建一个配置文件

1
vim /usr/local/nginx/nginx.conf

直接添加配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#所属用户
user orangepi;
worker_processes 1;
events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

gzip on;

server {
listen 80;
server_name localhost;
#映射目录
root /home/orangepi/Downloads;


location / {
index index.html index.htm /_h5ai/public/index.php;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

#webdav配置
location ^~/webdav{
set $dest $http_destination;
if (-d \$request_filename) {
rewrite ^(.*[^/])$ $1/;
set $dest $dest/;
}
if ($request_method ~ MKCOL) {
rewrite ^(.*[^/])$ $1/ break;
}
# 映射目录
alias /home/pi/Downloads/;
autoindex on;
# Webdav设置
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
# 最大上传文件
client_max_body_size 3G;
dav_access user:rw group:rw all:rw;
auth_basic "Authorized Users Only";
# 验证用户
auth_basic_user_file webdavpasswd;
}

# php-fpm配置
location ~ [^/]\.php(/|$){
# try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}
}

使用

如果装了宝塔的,使用前记得开放对应端口,80端口和9000端口

直接用浏览器访问香橙派的IP,就可以访问_h5ai的映射目录

默认:

  • 用户名:admin
  • 密码:admin

然后进入这个地址:http://服务器的IP/_h5ai/public/index.php,这个界面是没有密码的,直接点击login

看到配置全绿就OK了

配置下载器

如果只配置了_h5ai,距离NAS基本算完成一大步了。但是,我认为还需要配置下载器,能把网上资源,直接下载到服务器才算是NAS。
这里我们使用Aria2作为下载器。

配置Aria2

一键脚本搭建:

AutoInstallAria2

因为一键安装脚本会在家目录下创建目录,所以切换到orangepi用户

1
2
su orangepi
wget "https://cdn.jsdelivr.net/gh/Mintimate/AutoInstallAria2@latest/AutoInstallAria2ForLinux.sh" && bash AutoInstallAria2ForLinux.sh

测试使用

这个时候,我们本地就可以使用Aria2的RPC进行下载了,首先Linux服务器上启动Aira2:

如果装了宝塔的,使用前记得开放对应端口,默认6800端口,可在配置中修改

1
2
cd ~
sudo ./aria2.sh

上面修改的Nginx配置,已经设置Webdav参数和目录,还设置了验证用户,所以还需要创建webdavpasswd这个验证文件。如果不需要验证,可以注释这一项,就可以使用本地的Webdav客户端访问了。

设置验证用户

1
2
3
4
cat << EOF > /usr/local/nginx/webdavpasswd
#设置登录用户名和密码
admin:$(openssl passwd 123)
EOF
  • admin是设置的用户名

  • 123是设置的密码

用户名密码可自行修改,之后重新加载配置文件和重启服务:

1
2
3
/usr/local/nginx/sbin/nginx -s reload
killall nginx
/usr/local/nginx/sbin/nginx

客户端登陆

macOS和Windows的文件管理器都可以登录,但是功能不全(无法上传),这里推荐:

以上软件,个人使用免费版本就可以了:

没用过mac,我用windows演示

image-20230607013014512

nginx默认80端口,如果80端口要跑其它服务,也可以修改nginx配置文件把80端口改成其它端口,路径要加/webdav,然后一定要取消勾选地址!!!

添加系统服务

还是可以参考我这篇文章部署LNMP教程

1
vim /usr/lib/systemd/system/nginx.service
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
1
sudo vim /usr/lib/systemd/system/php-fpm.service
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=php-fpm
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/php7/sbin/php-fpm
PrivateTmp=true

[Install]
WantedBy=multi-user.target
1
sudo vim /usr/lib/systemd/system/aria2.service
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Aria2
After=network.target

[Service]
User=pi
Type=simple
ExecStart=/etc/aria2/aria2c --conf-path=/etc/aria2/aria2.conf

[Install]
WantedBy=multi-user.target

建议还是给予执行权限:

1
2
3
chmod +x nginx.service
chmod +x php-fpm.service
chmod +x aria2.service

允许开机启动并激活:

1
2
3
systemctl enable nginx.service
systemctl enable php-fpm.service
systemctl enable aria2.service

连接Aria2进程

  • 使用AriaNG连接Aria2进程

AriaNG Native

个人推荐使用AriaNG Native连接服务器和本地的Aria2进程。

我们下载对应自己电脑版本的AriaNG Native:
之后,我们设置RPC:

设置的RPC要和在linux上aria2.conf配置文件中的RPC一致(rpc-secret:设置Aria2验证远程码)

设置RPC

刷新即可连接:
连接成功

搭建网页前端——AriaNg

这个一般是部署在服务器
项目地址(GitHub): https://github.com/mayswind/AriaNg/releases

浏览器的扩展程序

这是Chrome浏览器的扩展程序:

https://chrome.google.com/webstore/detail/aria2-explorer/mpkodccbngfoacfalldjimigbofkhgjn?utm_source=ext_app_menu

我图方便用的也是这种,用的火狐浏览器

image-20230607021439381

我下载的是第一个扩展

配置

打开管理扩展,点击选项

image-20230607021742222

点击RPC服务器后再点击默认服务器

image-20230607021835467

协议选http,填入服务器IP,密钥要和在linux上aria2.conf配置文件中的RPC一致,然后点保存

image-20230607022037734

使用

固定到工具栏

image-20230607022319769

点详情就可以使用了

image-20230607022411558

image-20230607022456123

连接到Aria2后就可以新建任务,把下载链接复制过去,就能把文件下载到Linux本地上了

介绍

我上一台手机是小米的mix2s,因为用了三年多了,也有一些毛病,存储也不太够,所以我就换手机了,我这台小米mix2s就成为了备用机,但用到的时候很少,我就想着能不能刷成linux,我找到了一篇文章:在骁龙(835 845 855等)设备通过UEFI运行Archlinux我要刷ubuntu,其实步骤差不多,只是rootfs用的是ubuntu,因为本人技术有限,没刷成,我就想着看有没有现成的,然后就找到两个适合我手机型号的开源系统,分别是

其中postmarketOS使用Alpine Linux,而Mobian使用Debian GNU/Linux作为其开发和运行环境。

postmarketOS上适配小米mix2s设备的是社区某个大佬移植,测试版,不是稳定版,功能很少,我用过postmarketOS,bug挺多的。

而mobian相比于postmarketOS,适配小米mix2s的功能更多,所以我使用了mobian。

在对应官网上查看支持的设备型号,看有没有支持自己型号的手机,在选择对应的系统,尽量选择稳定版(Main)的,测试版(Testing)的bug较多

除了这些支持的设备,可以在github上面找找,应该能找到非官方移植支持的其它设备,例如红米2刷Mobian体验原生Linux及软件安装问题处理[ 手机刷LINUX系列]为红米6 Pro移植mobian

Mobian简介

Mobian是一个社区驱动的项目,它基于Debian GNU / Linux操作系统设计,专为支持ARM架构而开发。作为一个非官方移植的操作系统,Mobian致力于在智能手机、平板电脑、单板计算机等设备上提供一种开放、自由和隐私保护的替代操作系统。

Mobian采用了GNOME桌面环境和Phosh用户界面,并集成了各种自由和开源应用程序,如Firefox浏览器、电话、信息、媒体播放器等。这样,用户可以方便地实现日常任务和消费需求。此外,Mobian还强调安全性和隐私性,为用户设备数据提供匿名性和私密性保障。通过添加各种安全控件和软件特性,Mobian确保用户在使用其操作系统时都有充分的保障和安全。

尽管Mobian是一个非官方移植,但已经获得了广泛的关注和支持。它由自愿参与的开发者和社区成员共同维护,不受任何公司或组织的控制。对于需要一个符合自己需求的操作系统的ARM设备用户来说,Mobian是一个令人兴奋的选择。

准备

刷镜像前要确保已经解了BL锁,解BL锁方法上网一搜随便都能找到,这里是我搜到一篇小米的:【玩机教程】小米手机详细官方解BL锁🔒教程

安装方法

mobian有支持我的设备,直接按官方方法刷入即可

下载镜像

SDM845

下载最新的版本,最新版本是debian12

安装adb-fastboot

首先电脑要安装adb-fastboot,这里我们下载windows版的

解压,进入解压的目录,打开platform-tools文件夹,可以看到有adbfastboot的exe文件,把整个platform-tools文件夹拖到你的任意盘里(建议弄个专门放工具的目录tools)

添加环境变量,这样我们就方便使用adbfastboot命令了,环境变量参数就是platform-tools文件夹的路径,例如E:\tools\platform-tools

刷入镜像

官方文档

我下载的目前最新的20230521包,是解压下载的tar.gz包,然后进入文件夹,在当前目录上面的路径显示框中输入cmd,然后回车即可。

如果不同型号也是骁龙845的,看官方文档来确定手机的代号,小米mix2s的代号是polaris

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#检查设备是否连接
fastboot devices

#刷入boot分区
fastboot flash boot mobian-sdm845-phosh-20230521.boot-polaris.img

#刷入system分区
fastboot flash system mobian-sdm845-phosh-20230521.boot.img

#刷入userdata分区
fastboot -S 100M flash userdata mobian-sdm845-phosh-20230521.rootfs.img

#清除缓存文件
fastboot erase dtbo

重启完就能使用mobian了

登录

默认用户:mobian

默认密码:1234

基础配置和使用

换源

1
sudo vim /etc/apt/sources.list
1
2
3
4
5
6
7
8
9
#中科大源
deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware

登录 root

1
sudo -i

下面的命令我都是用root用户进行,命令失败注意看权限

修改密码

1
passwd root
1
passwd mobian

更新源

1
apt update && apt upgrade -y

设置

设置firefox浏览器为中文

1
apt install firefox-esr-l10n-zh-cn -y 

安装基础工具

1
apt install cmake make wget curl git gcc g++ clang python3-pip openssh* lrzsz neofetch htop -y

允许root用户ssh远程登录

1
echo "PermitRootLogin yes " >> /etc/ssh/sshd_config | echo "PasswordAuthentication yes " >> /etc/ssh/sshd_config
1
systemctl restart sshd

安装docker

安装 apt 依赖包,用于通过 HTTPS 来获取仓库。

1
apt install apt-transport-https ca-certificates gnupg2 software-properties-common -y

添加 Docker 的官方 GPG 密钥:

1
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | apt-key add -

添加源

1
vim /etc/apt/sources.list.d/docker.list
1
2
3
#中科大源
deb [arch=arm64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian bookworm stable
#deb-src [arch=arm64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian bookworm stable
1
apt update

warning

会出现以下warning:

W: https://mirrors.ustc.edu.cn/docker-ce/linux/debian/dists/bookworm/InRelease: 密钥存储在过时的 trusted.gpg 密钥环中(/etc/apt/trusted.gpg),请参见 apt-key(8) 的 DEPRECATION 一节以了解详情。

解决warning

1
apt-key list

找到docker的公钥指纹,复制后八个字符0EBFCD88(不包括空格)

导入 /etc/apt/trusted.gpg.d 目录下专用文件中的 GPG 密钥:

这里是新创建了一个文件 docker.gpg

1
apt-key export 0EBFCD88 | gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg

安装 Docker Engine-Community

1
apt install docker-ce docker-ce-cli containerd.io -y

配置镜像加速

1
vim /etc/docker/daemon.json

加入以下内容:

1
2
3
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
1
systemctl daemon-reload && systemctl restart docker

安装Zerotier-One

用脚本安装zerotier,脚本会将你的系统识别为buster,所以可以手动安装zerotier

1
vim /etc/apt/sources.list.d/zerotier.list

添加下面内容:

1
deb http://download.zerotier.com/debian/bookworm bookworm main
1
apt update
1
apt install zerotier-one -y

直接把mobian变为kali

安装Kali Linux的工具集

Kali Linux 2019.03开始对默认工具集进行重大更改,默认工具集将分为三个主要类别:

  • kali-linux-default,其中包含用于渗透测试的基本工具
  • kali-linux-large,具有更广泛的渗透测试工具集
  • kali-linux-everything,所有黑客工具

添加kali源

1
vim /etc/apt/sources.list.d/kali.list

添加以下内容:

1
2
3
#中科大源
deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

添加kali公钥

1
curl -fsSL https://archive.kali.org/archive-key.asc | apt-key add - 
1
apt update

warning

会出现以下warning:

W: https://mirrors.ustc.edu.cn/kali/dists/kali-rolling/InRelease: 密钥存储在过时的 trusted.gpg 密钥环中(/etc/apt/trusted.gpg),请参见 apt-key(8) 的 DEPRECATION 一节以了解详情。

解决warning

1
apt-key list

找到kali的公钥指纹,复制后八个字符7D8D0BF6(不包括空格)

导入 /etc/apt/trusted.gpg.d 目录下专用文件中的 GPG 密钥:

这里是新创建了一个文件 kali-linux.gpg

1
apt-key export 7D8D0BF6 | gpg --dearmour -o /etc/apt/trusted.gpg.d/kali-linux.gpg
1
apt update

这样就可以安装一些kali的的工具集了

1
apt search kali-linux

例如安装kali-linux-default

1
apt install kali-linux-default -y

默认的工具集里面有些工具需要GUI,例如burpsuite,手机不好操作,所以我就没有安装了,只挑了几个工具安装

安装一些kali工具

1
apt install sqlmap nmap metasploit-framework set -y

前言

LNMP是一种常见的网站开发和运行环境,它由四个主要的软件组成:

  • Linux:操作系统,提供基础的运行平台
  • Nginx:高性能的Web服务器,负责处理HTTP请求和响应
  • MariaDB:开源的关系型数据库管理系统,负责存储和管理数据
  • PHP:脚本语言,负责处理业务逻辑和动态内容

在本教程中,我们将使用debian11作为操作系统,编译安装最新版本的nginx、mariadb和php,并且开启一些常用的和必要的模块。我们假设你已经有了一台安装了debian11的服务器,并且可以通过SSH远程登录。

步骤一:安装必要的依赖包

在开始编译安装之前,我们需要先安装一些必要的依赖包,这些包可以帮助我们编译、安装和运行LNMP的各个组件。我们可以使用apt命令来安装这些包,如下所示:

1
2
sudo apt update && apt upgrade -y
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev libxml2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libzip-dev libpam0g-dev libjudy-dev libsnappy-dev liblzma-dev bison libpmem-dev libbz2-dev -y

这里我们安装了以下几类包:

  • build-essential:包含了编译器、链接器等基本的开发工具
  • libpcre3、libpcre3-dev:提供了Perl兼容正则表达式的库,用于nginx的rewrite模块
  • zlib1g、zlib1g-dev:提供了压缩和解压缩的库,用于nginx的gzip模块
  • openssl、libssl-dev:提供了加密和解密的库,用于nginx的ssl模块
  • libxml2-dev、libcurl4-openssl-dev:提供了XML解析和HTTP客户端的库,用于php的curl、dom、simplexml等扩展
  • libjpeg-dev、libpng-dev、libfreetype6-dev:提供了图像处理的库,用于php的gd扩展
  • libmcrypt-dev:提供了加密算法的库,用于php的mcrypt扩展
  • libzip-dev:提供了ZIP文件处理的库,用于php的zip扩展

安装完成后,我们可以检查一下这些包是否正确安装:

1
dpkg -l | grep -E 'build-essential|libpcre3|zlib1g|openssl|libxml2|libcurl4|libjpeg|libpng|libfreetype6|libmcrypt|libzip'

如果没有报错,就说明这些包都已经成功安装。

要养成把源码包放到/usr/local/src目录下的好习惯

步骤二:下载并编译安装nginx

接下来,我们要下载并编译安装nginx。我们可以从官网下载最新版本的源码包:

1
2
wget https://nginx.org/download/nginx-1.24.0.tar.gz -P /usr/local/src
cp /usr/local/srcnginx-1.24.0.tar.gz /root

然后解压缩源码包:

1
tar zxvf nginx-1.24.0.tar.gz

进入源码目录:

1
cd nginx-1.24.0

执行configure命令来配置编译选项:

1
./configure --prefix=/usr/local/nginx --user=www-data --group=www-data --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre

这里我们指定了以下几个选项:

  • –prefix=/usr/local/nginx:指定了安装目录为/usr/local/nginx
  • –user=www-data –group=www-data:指定了运行nginx的用户和组为www-data(如果不存在,则会自动创建)
  • –with-http_ssl_module:开启了ssl模块,支持HTTPS协议
  • –with-http_gzip_static_module:开启了gzip_static模块,支持压缩静态文件
  • –with-http_stub_status_module:开启了stub_status模块,支持查看nginx状态信息
  • –with-pcre:使用pcre库支持rewrite模块

如果没有报错,就说明配置成功。然后执行make命令来编译源码:

  • 如果你服务器线程够多,可以在make 命令后面加个-j参数,编译会更快,安装也同理,如给四个线程 make -j4 ,或者直接最大线程 make -j$(nproc)
  • 如果make 或者make install 出现报错,则:
    1. 检查你的环境是否安装了需要的依赖包,比如编译工具、库文件等等。可以尝试使用 apt install package 安装相关依赖。
    2. 检查编译选项中是否有与当前系统不兼容的配置。可搜索相应错误信息来确认具体原因,然后酌情修改编译选项。
1
make -j$(nproc)

如果没有报错,就说明编译成功。最后执行make install命令来安装nginx:

1
sudo make install -j$(nproc)

如果没有报错,就说明安装成功。我们可以检查一下nginx是否正确安装:

1
sudo /usr/local/nginx/sbin/nginx -v

如果输出了nginx的版本信息,就说明nginx已经正确安装。我们可以查看一下nginx的配置文件:

1
sudo vim /usr/local/nginx/conf/nginx.conf

这里我们可以看到nginx的默认配置,包括监听端口、日志文件、虚拟主机等。我们可以根据自己的需要修改这些配置,或者添加新的配置。例如,我们可以开启gzip压缩功能,提高网站的性能:

1
2
3
4
5
6
7
8
9
http {
...
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain text/css text/javascript application/json application/javascript application/xml application/x-font-ttf image/svg+xml;
gzip_vary on;
...
}

保存并退出后,我们可以使用以下命令来测试配置文件是否正确:

1
sudo /usr/local/nginx/sbin/nginx -t

如果没有报错,就说明配置文件正确。然后我们可以使用以下命令来启动nginx:

1
sudo /usr/local/nginx/sbin/nginx

如果没有报错,就说明nginx已经启动。我们可以使用以下命令来查看nginx的进程:

1
ps aux | grep nginx

如果看到有一个master进程和几个worker进程,就说明nginx正常运行。我们也可以使用以下命令来查看nginx的状态信息:

1
curl http://localhost/nginx_status

如果看到类似以下的输出,就说明nginx状态信息正常:

1
2
3
4
Active connections: 1 
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0

至此,我们已经完成了下载并编译安装nginx的步骤。

步骤三:下载并编译安装mariadb

安装前依赖解决

  • cmake

https://cmake.org/download/

  • boost

boost Boost库是一个可移植、提供源代码的C库,作为标准库的后备,是C标准化进程的开发引擎之 一

https://www.boost.org

1
2
#cmake命令 2.8 以上
cmake --version
1
2
3
4
5
6
7
wget https://boostorg.jfrog.io/artifactory/main/release/1.82.0/source/boost_1_82_0.tar.gz

cp boost_1_82_0.tar.gz /usr/local/src

tar -zxvf boost_1_82_0.tar.gz

mv boost_1_82_0 /usr/local/boost

接下来,我们要下载并编译安装mariadb。我们可以从官网下载最新版本的源码包:

1
2
wget https://mirrors.ustc.edu.cn/mariadb/mariadb-10.10.4/source/mariadb-10.10.4.tar.gz
cp mariadb-10.10.4.tar.gz /usr/local/src

然后解压缩源码包:

1
tar zxvf mariadb-10.10.4.tar.gz

进入源码目录:

1
cd mariadb-10.10.4

创建build目录,用来放编译后的缓存文件,然后进入build目录:

1
mkdir build && cd build

如果cmake 出错或者又需要添加别的库的支持,直接执行 rm -rf *命令,删除build当前目录下的所有编译文件

执行cmake命令来配置编译选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DMYSQL_DATADIR=/usr/local/mariadb/data \
-DMYSQL_UNIX_ADDR=/usr/local/mariadb/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STPRAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWIYH_READLINE=1 \
-DWITH_LIBWRAP=0 \
-DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DMYSQL_TCP_PORT=3306 \
-DWITH_BOOST=/usr/local/boost -DBOOST_ROOT=/usr/local/boost \
-DMYSQL_USER=mysql \
-DWITHOUT_GSSAPI=ON

这里我们指定了以下几个选项:

  • -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb:指定了安装目录为/usr/local/mariadb
  • -DMYSQL_DATADIR=/usr/local/mariadb/data:指定了数据文件的目录为/usr/local/mariadb/data
  • -DMYSQL_UNIX_ADDR=/usr/local/mariadb/mysql.sock:指定sock文件路径
  • -DWITH_INNOBASE_STORAGE_ENGINE=1:开启了InnoDB存储引擎支持,支持事务和外键等特性
  • -DWITH_ARCHIVE_STORAGE_ENGINE=1:开启了Archive存储引擎支持,支持高压缩比的存储
  • -DWITH_BLACKHOLE_STORAGE_ENGINE=1:开启了Blackhole存储引擎,支持不存储任何数据的存储
  • -DWITH_EMBEDDED_SERVER=1:开启嵌入式服务器支持,可以作为一个嵌入式服务器集成到其他程序中。生成一个libmysqld.a(.so)的库,这个库同时集成了mysql服务与客户端API
  • -DENABLED_LOCAL_INFILE=1:开启本地数据导入支持。
  • -DWITH_READLINE=1:使用readline库支持命令行编辑和历史记录功能
  • -DWITH_LIBWRAP=0:关闭libwrap库的支持,避免编译错误
  • -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci :安装所有字符集、默认字符集utf-8 、校验字符
  • -DWITH_SSL=system:使用系统自带的openssl库支持加密连接功能
  • -DWITH_ZLIB=system:使用系统自带的zlib库支持压缩功能
  • -DMYSQL_TCP_PORT=3306:指定了TCP端口号为3306
  • -DWITH_BOOST=/usr/local/boost -DBOOST_ROOT=/usr/local/boost :允许下载boost库文件
  • -DMYSQL_USER=mysql : 指定了运行mariadb的用户为mysql

以上参数需要和下文my.cnf同步(如果你需要修改我的编译参数,记得下文配置文件一并修改)

如果没有报错,就说明配置成功。然后执行make命令来编译源码:

1
make -j$(nproc)

如果没有报错,就说明编译成功。最后执行make install命令来安装mariadb:

1
sudo make install -j$(nproc)

如果没有报错,就说明安装成功。我们可以检查一下mariadb是否正确安装:

1
sudo /usr/local/mariadb/bin/mysql --version

如果输出了mariadb的版本信息,就说明mariadb已经正确安装。

编译并安装完成后,我们需要进行一些配置工作,以确保MariaDB能够正常运行。首先,我们需要创建一个mysql用户和组,并修改MariaDB目录的属主和属组:

1
2
3
sudo groupadd mysql
sudo useradd -r -g mysql mysql
sudo chown -R mysql:mysql /usr/local/mariadb

然后,我们需要复制初始化脚本到相应的位置,并设置相应的权限:

1
2
sudo cp /usr/local/mariadb/support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld

查看MySQL/MariaDB将要从哪些配置文件中读取默认选项:

1
mysqld --help --verbose | grep "Default options are read" 

默认情况下会在以下位置读取:

1
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf $MARIADB_INSTALL_DIR/my.cnf

修改MariaDB配置文件,优化MariaDB

配置文件位于/etc/my.cnf ,没有则创建一个(直接用vim也会自动创建)

1
sudo vim /usr/local/mariadb/my.cnf

参考配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Begin /etc/mysql/my.cnf
# The following options will be passed to all MySQL clients
[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
# MariaDB安装地址
basedir = /usr/local/mariadb/
datadir = /usr/local/mariadb/data/
pid-file = /usr/local/mariadb/mysqld.pid
log-error = /usr/local/mariadb/data/logs/mysqld.log

# 开启慢查询日志功能
slow_query_log = 1
slow_query_log_file = /usr/local/mariadb/data/logs/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

#skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 16K
myisam_sort_buffer_size = 8M
skip-name-resolve = 0

# character set settings
character-set-server = utf8
collation-server = utf8_general_ci

# default storage engine
default-storage-engine = InnoDB

# innodb settings
innodb_buffer_pool_size = 32M
innodb_log_file_size = 48M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 8
innodb_lock_wait_timeout = 50
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_force_recovery =1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
# End /etc/my.cnf

保存并退出后,我们可以使用以下命令来初始化数据库:

1
sudo /usr/local/mariadb/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb --datadir=/usr/local/mariadb/data

如果没有报错,就说明数据库初始化成功。然后我们可以使用以下命令来启动mariadb:

1
sudo /usr/local/mariadb/bin/mysqld_safe --user=mysql

如果没有报错,就说明mariadb已经启动。我们可以使用以下命令来查看mariadb的进程:

1
ps aux | grep mysqld

如果看到有一个mysqld_safe进程和一个mysqld进程,就说明mariadb正常运行。我们也可以使用以下命令来登录mariadb:

1
/usr/local/mariadb/bin/mysql -u root -p

如果看到类似以下的输出,就说明mariadb登录成功:

1
2
3
4
5
6
7
8
9
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.6.5-MariaDB Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

至此,我们已经完成了下载并编译安装mariadb的步骤。

步骤四:下载并编译安装php

接下来,我们要下载并编译安装php。我们可以从官网下载最新版本的源码包:

1
2
3
wget https://www.php.net/distributions/php-8.1.0.tar.gz

cp php-8.1.0.tar.gz /usr/local/src

然后解压缩源码包:

1
tar zxvf php-8.1.0.tar.gz

进入源码目录:

1
cd php-8.1.0

执行configure命令来配置编译选项:

1
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-mysqli=/usr/local/mariadb/bin/mysql_config --with-pdo-mysql=/usr/local/mariadb/bin/mysql_config --with-openssl --with-zlib --with-curl --with-gd --with-jpeg --with-png --with-freetype --enable-gd-jis-conv --with-zip --enable-mbstring

这里我们指定了以下几个选项:

  • –prefix=/usr/local/php:指定了安装目录为/usr/local/php
  • –with-config-file-path=/usr/local/php/etc:指定了配置文件的目录为/usr/local/php/etc
  • –enable-fpm:开启了fpm模式,支持与nginx配合使用
  • –with-fpm-user=www-data –with-fpm-group=www-data:指定了运行php-fpm的用户和组为www-data
  • –with-mysqli=/usr/local/mariadb/bin/mysql_config –with-pdo-mysql=/usr/local/mariadb/bin/mysql_config:开启了mysqli和pdo_mysql扩展,支持与mariadb交互
  • –with-openssl:开启了openssl扩展,支持加密功能
  • –with-zlib:开启了zlib扩展,支持压缩功能
  • –with-curl:开启了curl扩展,支持HTTP客户端功能
  • –with-gd:开启了gd扩展,支持图像处理功能
  • –with-jpeg –with-png –with-freetype:指定了gd扩展使用的图像库
  • –enable-gd-jis-conv:开启了gd扩展的日文转换功能
  • –with-zip:开启了zip扩展,支持ZIP文件处理功能
  • –enable-mbstring:开启了mbstring扩展,支持多字节字符串处理功能

如果没有报错,就说明配置成功。然后执行make命令来编译源码:

1
sudo make -j$(nproc)

如果没有报错,就说明编译成功。最后执行make install命令来安装php:

1
sudo make install -j$(nproc)

如果没有报错,就说明安装成功。我们可以检查一下php是否正确安装:

1
sudo /usr/local/php/bin/php -v

如果输出了php的版本信息,就说明php已经正确安装。我们可以查看一下php的配置文件:

1
sudo vim /usr/local/php/etc/php.ini

这里我们可以看到php的默认配置,包括错误报告、内存限制、文件上传、时区等。我们可以根据自己的需要修改这些配置,或者添加新的配置。例如,我们可以开启错误显示功能,方便调试:

1
2
3
4
[PHP]
...
display_errors = On
...

保存并退出后,我们可以使用以下命令来复制php-fpm的配置文件:

1
2
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

然后我们可以使用以下命令来启动php-fpm

1
sudo /usr/local/php/sbin/php-fpm

如果没有报错,就说明php-fpm已经启动。我们可以使用以下命令来查看php-fpm的进程:

1
ps aux | grep php-fpm

如果看到有一个master进程和几个worker进程,就说明php-fpm正常运行。我们也可以使用以下命令来测试php是否能够处理请求:

1
curl http://localhost/index.php

如果看到类似以下的输出,就说明php能够处理请求:

1
Hello, world!

至此,我们已经完成了下载并编译安装php的步骤。

步骤五:配置nginx和php-fpm的通信

最后,我们要配置nginx和php-fpm的通信,让nginx能够将PHP请求转发给php-fpm处理,并将结果返回给客户端。我们可以使用以下命令来编辑nginx的虚拟主机配置文件:

1
sudo vim /usr/local/nginx/conf/vhost/default.conf

这里我们可以添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name localhost;
root /usr/local/nginx/html;
index index.html index.php;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

这里我们指定了以下几个参数:

  • listen 80:指定了监听端口为80
  • server_name localhost:指定了服务器名称为localhost
  • root /usr/local/nginx/html:指定了网站根目录为/usr/local/nginx/html
  • index index.html index.php:指定了默认首页为index.html或index.php
  • location ~ .php$:匹配所有以.php结尾的请求
  • fastcgi_pass 127.0.0.1:9000:指定了将请求转发给本地9000端口的php-fpm进程
  • fastcgi_index index.php:指定了默认PHP文件为index.php
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name:指定了PHP脚本文件的完整路径
  • include fastcgi_params:包含了一些通用的fastcgi参数

保存并退出后,我们可以使用以下命令来测试配置文件是否正确:

1
sudo /usr/local/nginx/sbin/nginx -t

如果没有报错,就说明配置文件正确。然后我们可以使用以下命令来重载nginx:

1
sudo /usr/local/nginx/sbin/nginx -s reload

如果没有报错,就说明nginx已经重载。我们可以使用以下命令来测试nginx是否能够处理PHP请求:

1
curl http://localhost/index.php

如果看到类似以下的输出,就说明nginx能够处理PHP请求:

1
Hello, world!

至此,我们已经完成了配置nginx和php-fpm的通信的步骤。

步骤六:把所有的服务能通过systemctl来管理启动

为了方便管理和控制我们的LNMP服务,我们可以把它们都注册为systemd的服务单元,这样我们就可以使用systemctl命令来启动、停止、重启、查看状态等操作。我们可以使用以下命令来创建服务单元文件:

创建nginx.service文件

1
sudo vim /lib/systemd/system/nginx.service

然后添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建mariadb.service文件

1
sudo vim /lib/systemd/system/mariadb.service

然后添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# mariadb.service
[Unit]
Description=MariaDB database server
Documentation=https://mariadb.com/kb/en/
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/mariadb/mariadb.pid
ExecStart=/usr/local/mariadb/bin/mysqld_safe --user=mysql --basedir=/usr/local/mariadb --datadir=/usr/local/mariadb/data
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建php-fpm.service文件

1
sudo vim /lib/systemd/system/php-fpm.service

然后添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# php-fpm.service
[Unit]
Description=PHP FastCGI Process Manager
Documentation=https://www.php.net/manual/en/install.fpm.php
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

这里我们指定了以下几个参数:

  • Description:服务的描述信息
  • Documentation:服务的文档链接
  • After:服务的启动顺序,表示在哪些服务之后启动
  • Wants:服务的启动依赖,表示需要哪些服务同时启动
  • Type:服务的类型,表示如何启动和停止服务,这里我们使用forking类型,表示服务会创建子进程并返回主进程的PID
  • PIDFile:服务的PID文件位置,用于记录主进程的PID,方便管理和控制服务
  • ExecStart:服务的启动命令,用于执行服务的主程序或脚本,可以指定一些参数或选项
  • ExecStartPre:服务的启动前置命令,用于执行一些准备工作,例如检查配置文件等
  • ExecReload:服务的重载命令,用于重新加载配置文件或刷新缓存等,不会中断服务的运行
  • ExecStop:服务的停止命令,用于终止服务的运行,通常是发送一个信号给主进程
  • PrivateTmp:服务的私有临时目录选项,表示是否为每个服务创建一个独立的/tmp目录,避免文件冲突或泄露等问题
  • WantedBy:服务的安装目标,表示在哪些运行级别下启用该服务,这里我们使用multi-user.target,表示在多用户模式下启用该服务

保存并退出后,我们可以使用以下命令来重新加载systemd:

1
sudo systemctl daemon-reload

然后给添加的服务给予执行权限:

1
2
3
chmod a+x /lib/systemd/system/nginx.service
chmod a+x /lib/systemd/system/mariadb.service
chmod a+x /lib/systemd/system/php-fpm.service

如果没有报错,就说明systemd已经重新加载。然后我们可以使用以下命令来启动、停止、重启、查看状态等操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo systemctl start nginx # 启动nginx服务
sudo systemctl stop nginx # 停止nginx服务
sudo systemctl restart nginx # 重启nginx服务
sudo systemctl reload nginx # 重载nginx服务
sudo systemctl status nginx # 查看nginx服务状态

sudo systemctl start mariadb # 启动mariadb服务
sudo systemctl stop mariadb # 停止mariadb服务
sudo systemctl restart mariadb # 重启mariadb服务
sudo systemctl status mariadb # 查看mariadb服务状态

sudo systemctl start php-fpm # 启动php-fpm服务
sudo systemctl stop php-fpm # 停止php-fpm服务
sudo systemctl restart php-fpm # 重启php-fpm服务
sudo systemctl reload php-fpm # 重载php-fpm服务
sudo systemctl status php-fpm # 查看php-fpm服务状态

如果没有报错,就说明systemctl能够正常管理和控制我们的LNMP服务。我们也可以使用以下命令来设置LNMP服务为开机自启动:

1
2
3
sudo systemctl enable nginx # 设置nginx服务为开机自启动
sudo systemctl enable mariadb # 设置mariadb服务为开机自启动
sudo systemctl enable php-fpm # 设置php-fpm服务为开机自启动

如果没有报错,就说明LNMP服务已经设置为开机自启动。我们可以使用以下命令来查看LNMP服务的开机自启动状态:

1
2
3
sudo systemctl is-enabled nginx # 查看nginx服务是否开机自启动
sudo systemctl is-enabled mariadb # 查看mariadb服务是否开机自启动
sudo systemctl is-enabled php-fpm # 查看php-fpm服务是否开机自启动

如果输出了enabled,就说明LNMP服务已经开机自启动。

至此,我们已经完成了把所有的服务能通过systemctl来管理启动的步骤。

结语

恭喜你,你已经成功地用debian11来部署了LNMP(nginx+mariadb+php)环境,并且把它们都注册为systemd的服务单元,方便管理和控制。你现在可以使用这个环境来开发和运行你的网站项目了。希望这个教程文档对你有帮助,如果你有任何问题或者建议,可以随时跟我说哦。谢谢你的阅读和支持。😘

Linux crontab 命令

Linux crontab 是用来定期执行程序的命令。

当安装完成操作系统之后,默认便会启动此任务调度命令。

crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

而 linux 任务调度的工作主要分为以下两类:

  • 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
  • 2、个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

/etc/crontab文件中可以看到所有用户的crontab任务,我自己实测直接修改/etc/crontab来添加crontab任务没有生效(可能是权限问题,我没深究),所以没有修改该文件来创建crontab任务

/etc/cron.deny #该文件中所列的用户不允许使用Crontab命令

/etc/cron.allow #该文件中所列的用户允许使用Crontab命令

crontab命令格式详解

每项工作 (每行) 的格式都是具有六个栏位,这六个栏位的意义为:

代表意义 分钟 小时 日期(天) 月份 命令
数字范围 0-59 0-23 1-31 1-12 0-7 呀就命令啊
1
crontab -u {username} -e  #不加-u参数默认为当前用户创建定时任务

输入命令后会显示编辑一个文件,直接在下面添加参数,username可以不加,则默认给当前用户添加定时任务

1
2
3
4
5
6
7
8
*    *    *    *    * {username} 命令/要执行shell脚本的路径
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

修改定时任务crontab -e的时候,控制台输出“crontab: installing new crontab”,表示任务添加成功,且之后三分钟不会执行对应的任务,所以在调试定时器的时候,要把这三分钟考虑进去,如果执行的时间在三分钟内的话,对应的任务则不会生效。

定时执行命令

例如安装的Tomcat服务器需要每次开机后都要重启一次

1
2
3
4
5
#在crontab -e命令后添加的参数

#系统重启后执行重启
@reboot systemctl restart tomcat
# @reboot [nohup] systemctl restart tomcat

nohup 是用来让运行的程序忽略 SIGHUP 指令(因为在父程序退出后,所有的子程序会受到 SIGHUP 指令)从而保证运行的程序不退出, 根据实际情况决定是否使用该参数(本人实际操作过程中,加入该参数时无法成功执行任务,请自测)
@reboot 只针对可登录服务器的用户生效, 如果使用不可登录服务器的用户执行该类型crontab任务,将会遭到忽略,执行失败

定时关机

1
2
3
4
#每天 23:00 关机
* 23 * * * root /sbin/shutdown -h now
#每天 23:00 十分钟后关机
* 23 * * * root /sbin/shutdown -h at 23:10

因为直接crontab来执行命令,可能有些命令太复杂或者太长可能会执行失败,这时候就会用到shell脚本

定时执行shell脚本

执行时间 格式
每分钟定时执行一次 * * * * *
每小时定时执行一次 0 * * * *
每天定时执行一次 0 0 * * *
每周定时执行一次 0 0 * * 0
每月定时执行一次 0 0 1 * *
每月最后一天定时执行一次 0 0 L * *
每年定时执行一次 0 0 1 1 *
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#在crontab -e命令后添加的参数


#每天 02:00 执行任务
0 2 * * * /bin/sh backup.sh

#每天 5:00和17:00执行任务
0 5,17 * * * /scripts/script.sh

#每分钟执行一次任务
* * * * * /scripts/script.sh

#每周日 17:00 执行任务
0 17 * * 7 /scripts/script.sh

#每 10min 执行一次任务
*/10 * * * * /scripts/monitor.sh

#在每周五、周日的17点执行任务
0 17 * * sun,fri /script/scripy.sh

#每四个小时执行一个任务
0 */4 * * * /scripts/script.sh

#每周一、周日的4:00和17:00执行任务
0 4,17 * * sun,mon /scripts/script.sh

比较有趣的是那个『周』喔!周的数字为0或7时,都代表『星期天』的意思!另外, 还有一些辅助的字符,大概有底下这些:

特殊字符 代表意义
*(星号) 代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * , 就代表著『不论何月、何日的礼拜几的 12:00 都运行后续命令』的意思!
,(逗号) 代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是: 0 3,6 * * * command 时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用!
-(减号) 代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作: 20 8-12 * * * command 仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思!
/n(斜线) 那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则: */5 * * * * command 很简单吧!用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!

周与日月不可同时并存

另一个需要注意的地方在於:『你可以分别以周或者是日月为单位作为循环,但你不可使用「几月几号且为星期几」的模式工作』。 这个意思是说,你不可以这样编写一个工作排程:

1
30 12 11 9 5 root echo "just test"  <==这是错误的写法

本来你以为九月十一号且为星期五才会进行这项工作,无奈的是,系统可能会判定每个星期五作一次,或每年的 9 月 11 号分别进行,如此一来与你当初的规划就不一样了~所以罗,得要注意这个地方!上述的写法是不对的!

使crontab任务生效

1
2
3
4
5
#查看crontab任务
crontab -l

#加载配置文件
/etc/init.d/cron reload

centos的定时任务service是crond

脚本无法执行问题

如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。

解决方法:

  • 1、所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。

  • 2、在 shell 脚本开头使用以下代码:

    1
    2
    3
    4
    #!/bin/bash

    . /etc/profile
    . ~/.bashrc
  • 3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:

    1
    20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh

介绍

如何用docker部署openwrt(本人一般用于挂代理)

下载镜像

打开dockerhub

无账号的可以注册一个

image-20230508004922422

点击第二个,复制右边的命令,回到操作系统里粘贴

image-20230509195820116

找到适合自己架构拉取镜像即可,我的是aarch64,所以拉取tag为armv8的

1
docker pull sulinggg/openwrt:armv8

查看镜像

1
docker images

打开网卡混杂模式

1
sudo ip link set eth0 promisc on 

创建网络

1
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 -o parent=eth0 macnet

须结合实际网络情况,不能照抄命令

–subnet=192.168.1.0/24 #eth0网卡正所处在192.168.1.x网段

–gateway=192.168.1.254 #eth0网卡的网关(即路由器ip)

parent=eth0 #这个是物理网卡名字

macvlan #这是创建的一个驱动程序管理网络(已经创建了192.168.254这个网络段给它)

macnet #macnet创建的网络名字

查看创建的macnet网络

1
docker network ls

创建并启动容器

1
docker run --restart always --name openwrt -d --network macnet --privileged sulinggg/openwrt:armv8 /sbin/init

进入容器并修改相关参数

1
docker exec -it openwrt bash

执行此命令后我们便进入 OpenWrt 的命令行界面,首先,我们需要编辑 OpenWrt 的网络配置文件:

1
vim /etc/config/network

我们需要更改 Lan 口设置:

1
2
3
4
5
6
7
8
9
10
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.1.100' #自己设置一个ip,这个ip是你即将要访问的openwrt控制面板,假如本机IP也处于192.168.1.0/24网段,设置的IP不要和本机IP重合
option gateway '192.168.1.254' #设置网关
option broadcast '192.168.1.255'
option dns '8.8.8.8'

所有的 192.168.1.x 需要根据eth0网卡所处网段修改,option gateway填写eth0的网关。

option ipaddr 项目定义了 OpenWrt 的 IP 地址,在完成网段设置后,IP最后一段可根据自己的爱好修改(前提是符合规则且不和现有已分配 IP 冲突)。

重启网络

1
/etc/init.d/network restart

输入完成这段命令之后,按住键盘的ctrl+p+q就能退出openwrt容器的命令行界面。

管理页面

进入控制面板

在浏览器中输入option ipaddr 项目中的 IP 进入 Luci 控制面板,若option ipaddr 的参数为 192.168.1.100,则可以在浏览器输入 http://192.168.1.100进入控制面板。

用户名:root

密码:password

image-20230509200127717

登进去后建议修改账号密码,不然别人直接不用密码能ssh连接你这个容器

简介

zerotier one是众多内网穿透工具平衡性最好的。方便速度快部署简单的比他贵的多,速度比他快比他便宜的部署麻烦,比他便宜部署容易的使用体验又不好。

不过zerotier one的虚拟网络是由官方控制器控制的,虚拟内网被别人控制总感觉不会不舒服。好在zerotier是开源的,因此zerotier有脱离官方控制器的第三方控制器

ztncui是zerotier one众多开源第三方控制器中的一个,之所以选它是因为它是唯一一个拥有图形界面的。通过配置客户端的planet就可以跳过官方节点,使用ztncui完成各个节点之间的通讯和打洞。

优点

  • 官方的节点通道(Planet服务器)是在国外,一般延迟都在四五百ms左右,使用ztncui搭建的zerotier one不走官方节点的通道,走的是用自己公网服务器搭建的节点通道,延迟较低
  • 官方编译的Zerotier搭建的moon服务器不能在Android设备上使用,而私有化搭建的moon服务器则能在Android端(需要配合Zerotier FIX来)使用
  • 相比于用FRP部署的内网穿透,zerotier使用简单,且不像FRP让服务器在公网被来回扫,安全性较高。

FRP部署内网穿透—->可看这篇文章《自建内网穿透服务器》

准备工作

Zerotier不支持以域名方式和控制器通讯,所以你需要准备一个具有固定公网ip的云服务器,最好同时具备固定ipv6。

对于android设备,需要使用kaaass大神的Zerotier FIX才可以使用自定义控制器和自定义moon服务器,IOS设备无解。

Zerotier FIX项目地址

云服务器

我这里用的阿里云领的7个月ECS,系统是debian11,,带宽是1Mbps(到后面用搭建的moon,Android端用数据延迟能到一百左右,理论上带宽比我这个大的延迟会更低),没有申请SSL证书

Debian默认ssh不能root连接,首先在你买服务器的官网的控制台用他们自带的远程连接先连进去,编辑ssh配置文件vim /etc/ssh/sshd_config 添加一个参数:PermitRootLogin yes,这样ssh就能用root连接了

1
2
3
vim /etc/ssh/sshd_config
echo "PermitRootLogin yes " >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes " >> /etc/ssh/sshd_config

配置安全组(无SSL证书)

image-20230505000328395

配置安全组(有SSL证书)

image-20230505000753998

3000端口和3443端口为ztncui Web控制面板使用的端口

3000是http的,3443是https的

TCP:9993端口为Zerotier节点与控制器通讯的端口

UDP:9993端口为MOON节点与控制器通讯的中继端口

端口可自行选择,根据自己选择的端口配置安全组

Server端

Zerotier安装

1
2
#ztncui依赖于zerotier,所以需要先安装zerotier
root@Debian:~# curl -s https://install.zerotier.com | sudo bash

ztncui安装

centos redhat系列下载, root权限执行

1
root@centos:~# wget https://gitee.com/opopop880/zerotier_planet/raw/master/zertotier_planet.sh && chmod +x zertotier_planet.sh && ./zertotier_planet.sh

debain ubuntu 系列下载 root权限执行

1
root@Debian:~# wget https://gitee.com/opopop880/zerotier_planet/raw/master/zerotier_planet_debain.sh && chmod +x zerotier_planet_debain.sh && ./zerotier_planet_debain.sh

我执行完 ./zerotier_planet_debain.sh这个脚本后,编译安装时会失败,缺少依赖库”fatal error: nlohmann/json.hpp : No such file or directory”
#include “nlohmann/json.hpp

安装依赖

1
root@Debian:~# apt-get install nlohmann-json3-dev

在执行一次脚本

1
root@Debian:~# ./zerotier_planet_debain.sh

配置moon服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#进入zerotier one文件夹
root@Debian:~# cd /var/lib/zerotier-one

#生成moon.json文件
root@Debian:/var/lib/zerotier-one# zerotier-idtool initmoon identity.public >> moon.json

#编辑moon.json文件
root@Debian:/var/lib/zerotier-one# vim moon.json
#修改里面的stableEndpoints参数,修改完后保存退出
"stableEndpoints": ["你的公网IP/9993" ]

#生成客户端用的moon配置文件
root@Debian:/var/lib/zerotier-one# zerotier-idtool genmoon moon.json
wrote 00000016089ddab3.moon (signed world with timestamp 1683210080062)

#在/var/lib/zerotier-one目录下,手动新建一个moons.d文件夹,并把刚生成的moon配置文件放到该文件夹下
root@Debian:/var/lib/zerotier-one# mkdir moons.d && mv 00000016089ddab3.moon moons.d/

#刚刚是在/root的目录下安装的ztncui,把moon.json文件拷贝到/root目录下,这个文件在配置ztncui时有用
root@Debian:/var/lib/zerotier-one# cp moon.json /root

配置ztncui

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#查看ZT_TOKEN值并复制
root@Debian:~# cat /var/lib/zerotier-one/authtoken.secret

#检查ztncui的配置文件,看到ZT_TOKEN=的值是否和上面的一样,不一样则替换成上面复制的值(一般都一样)
root@Debian:~# vim /opt/key-networks/ztncui/.env

#下载mkmoonworld主程序(自己解决github代理)
root@Debian:~# wget https://github.com/kaaass/ZeroTierOne/releases/download/mkmoonworld-1.0/mkmoonworld-x86

#赋予执行权限
root@Debian:~# ls
root@Debian:~# chmod 777 mkmoonworld-x86

# 生成planet文件(即world.bin文件)
root@Debian:~# ./mkmoonworld-x86 ./moon.json

# 若要设置多个planet节点,将其他节点的moon.json 写入到另外的文件,如 moon1.json moon2.json
root@Debian:~# ./mkmoonworld-x86 ./moon1.json ./moon2.json

!!!注意!!!,要配置Android端的Zerotier,需要用到world.bin文件,所以要先备份一份,一起把world.bin文件和000000XXXXX.moon打包文件发到桌面

1
2
# 令planet文件生效
root@Debian:~# mv world.bin planet && systemctl restart zerotier-one

重启完zerotier-one服务moon服务器就已经生效了

备份moon文件

将生成的000000XXXXX.moon文件打包,留着准备发给各个zerotier one客户端

这里我用windows上的xshell连的服务器,上传和下载文件可能比较麻烦,用finalshell和filezilla传文件方便(我有,但不习惯用,还是习惯用xshell)

1
2
3
4
5
6
7
8
root@Debian:~# apt install lrzsz -y

root@Debian:~# cd /var/lib/zerotier-one

root@Debian:/var/lib/zerotier-one# tar -zcvf moons.d.tat.gz moons.d/

root@Debian:/var/lib/zerotier-one# sz moons.d.tar.gz
#然后选择桌面(弹出来的框路径随便你选)

ztncui管理界面配置

访问http://你的公网IP:3000

登录用户名:admin

默认密码: password

添加网络

image-20230505011824909

配置网络

image-20230505012139481

image-20230505012503870

Client端

Linux的client端

同样安装Zerotier

1
root@orangepi5:~# curl -s https://install.zerotier.com | sudo bash

将打包好的moon服务器放进Zerotier目录下

1
2
3
4
5
6
root@orangepi5:~# cd /var/lib/zerotier-one

#选择之前下载到桌面的moons.d.tat.gz
root@orangepi5:/var/lib/zerotier-one# rz

root@orangepi5:/var/lib/zerotier-one# tar -xf moons.d.tat.gz && rm -rf moons.d.tat.gz

配置完moon服务器后重启Zerotier

1
root@orangepi5:~# systemctl restart zerotier-one

加入网络

1
2
3
4
5
#加入在ztncui上的网络
root@orangepi5:~# zerotier-cli join #Network ID

#离开网络的命令是
zerotier-cli leave #Network ID

在ztncui管理界面允许加入

image-20230505015057633

列出网络

1
root@orangepi5:~# zerotier-cli listnetworks

查看moon服务器

1
root@orangepi5:~# zerotier-cli listpeers

列出的moon节点出现自己配置的公网IP则moon服务器已配置成功

Android的client端

先安装Zerotier FIX,然后打开Zerotier FIX,点+号先加入Network ID

将服务器上的world.bin和000000XXXXX.moon文件下载到本地,将world.bin更名为palnet。然后上传到手机

第一步,安装好Zerotier FIX,打开软件——右上角——设置——启动自定义planet——选择从文件导入——选择刚才的palnet文件。提示导入成功既切换planet成功。

第二步,加入moon服务器,打开软件——右上角——入轨——右下角加号——从文件导入——选择刚才的moon文件。提示成功,会在入轨界面看到moon服务的id。

image-20230505015941496

只有完成上面这两步,才能在ztncui管理的网络界面点刷新看到手机的ID,然后在ztncui上授权加入

Windows的client端

ZeroTier官网下载windows的ZeroTier One客户端

下载的zerotier是msi文件,默认会安装到C盘,安装完后会自动运行,在任务栏里会看到zerotier的UI界面,可以把它关掉退出

安装完后在我的电脑打开C盘,点击查看,把隐藏的项目打勾

image-20230520200642469

打开路径C:\ProgramData\ZeroTier\One,直接把之前备份的moons.d整个目录复制一份进去(目录里面有个000000XXXXX.moon文件)

在任务栏的搜索框输入cmd,会搜索到命令提示符,鼠标右键以管理员身份运行

弹出的命令框输入下面的命令进入ZeroTier的目录

1
CD C:\ProgramData\ZeroTier\One\

查看命令帮助

1
zerotier-one_x64.exe -h

可以看到加了-q参数就可以跟linux端一样操作了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ZeroTier One version 1.10.6
Copyright (c) 2020 ZeroTier, Inc.
Licensed under the ZeroTier BSL 1.1 (see LICENSE.txt)
Usage: zerotier-one_x64.exe [-switches] [home directory]

Available switches:
-h - Display this help
-v - Show version
-U - Skip privilege check and do not attempt to drop privileges
-p<port> - Port for UDP and TCP/HTTP (default: 9993, 0 for random)
-C - Run from command line instead of as service (Windows)
-I - Install Windows service (Windows)
-R - Uninstall Windows service (Windows)
-D - Remove all instances of Windows tap device (Windows)
-i - Generate and manage identities (zerotier-idtool)
-q - Query API (zerotier-cli)

加入网络

1
2
#加入在ztncui上的网络
zerotier-one_x64.exe -q join #Network ID

列出网络

1
zerotier-one_x64.exe -q listnetworks

重启 ZeroTier

按“WIN+R”键,打开运行窗口;2 输入”services.msc”,回车,运行的服务中找到ZeroTier one,选中点击右键,选择重新启动。

查看moon服务器

1
zerotier-one_x64.exe -q listpeers

列出的moon节点出现自己配置的公网IP则moon服务器已配置成功

安全问题

进入ztncui控制面板需要通过访问公网服务器的3000端口来管理网络,所以要一直开着公网服务器的3000端口,很不安全,我们可以把节点控制器也加入到网络中,加入后就可以通过zerotier分配的IP来访问ztncui控制面板。

加入方法和linux client端加入网络类似

ssh连接到公网服务器

加入网络

1
2
#加入在ztncui上创建网络的ID
root@orangepi5:~# zerotier-cli join #Network ID

授权加入网络

image-20230520204946512

授权后点刷新,网络就会给控制器分配IP了

这样配置完成后我们就可以在其它授权设备上访问http://控制器IP:3000来登录控制面板了,访问成功后就可以去公网服务器的安全组把放行的3000端口关掉了

简介

介绍一款能挂载多种网盘的神器AList

AList:支持多种存储的目录文件列表程序,支持 web 浏览与 webdav,后端基于gin,前端使用react

支持的存储

系统挂载云盘

Alist 开源项目地址

raidrive网址

potplayer播放器网址

下载Alist

有三种安装方式:一键脚本安装,手动安装,docker镜像

Alist官方文档

推荐用脚本安装,方便

1
2
#自定义路径
curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install /root

image-20230503223713159

启动Alist

1
2
3
systemctl start alist
#设置自启动
systemctl enable alist

服务器放行端口

这里我用的是自己烧录的linux系统的开发板(Debian11),需要自己放行端口,用公有云平台的朋友自行上网查找放行端口教程

查看防火墙规则

1
sudo iptables --list

或者

1
sudo ufw status

添加放行端口

可以使用 multiport 模块来指定多个端口或端口范围,例如:

1
2
#-m参数调用multiport 模块
sudo iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT sudo iptables -A INPUT -p udp -m multiport --dports 53,67:68 -j ACCEPT

添加Alist面板5244端口

1
2
3
4
5
6
sudo iptables -A INPUT -p tcp --dport 5244 -j ACCEPT && sudo iptables -A INPUT -p udp --dport 5244 -j ACCEPT
#保存规则(重启后失效)
iptables-save
#保存规则(重启后仍然生效)
netfilter-persistent save
netfilter-persistent reload

或者

1
sudo ufw allow 5244/tcp && sudo ufw allow 5244/udp

演示

阿里云盘

访问http://YOUR_IP:5244/,输入安装完alist后给的username和password

YOUR_IP 你的服务器IP

image-20230503212014697

为了方便,登录后建议改账号和密码

添加云盘

image-20230503224912663

image-20230503225414510

要用app扫二维码来获取刷新令牌——>刷新令牌获取

迅雷云盘

挂载路径:/迅雷云盘

用户名和密码则是你迅雷的账户密码

直接点保存,旁边会出现警告,复制href=” “ 双引号里的网址(如果警告里的显示不全,按F5刷新在点保存,直到能看到click here就行,这样就能复制全网址了)

image-20230503232035282

用edge浏览器打开复制的网址,复制captcha_token里的值,粘贴到验证码里

image-20230503233650864

在管理页面的左边点主页就能看到你挂载的云盘了,在主页下面的点管理又能回到管理页面

image-20230503235226850

挂载到本地

下载RaiDrive

196048054-086b91ee-a575-4d3d-9a51-53686a00e85f

挂载完后在本地磁盘就能看得到了

用PotPlayer播放器在线观看

image-20230504001622503

image-20230504001653256

效果

image-20230504001150591

我的orangepi5的系统是debian11server版

准备工作:

1、香橙派5开发板一块,本文基于香橙派5完成开启热点/WIFI操作,但是都是跑的Linux系统,树莓派/香橙派大差不差;
2、USB网卡一张,Orangepi5本身没有wifi模块需要自己另外配usb网卡 这里我用的是官方推荐的RTL8821CU网卡;

17486263331_1660295310

测试网卡:

我这里直接用的root用户,不是root用户的请在命令前加sudo

lsusb 查看usb设备状态

1
2
root@orangepi5:~# lsusb | grep "Realtek"
Bus 007 Device 002: ID 0bda:c820 Realtek Semiconductor Corp. 802.11ac NIC

orangepi5内置rtl8821cu的模块

如果 lsusb 命令看到的 USB WIFI 模块处于 Driver CDROM Mode,请重新拔插 下 USB WIFI 模块。如果还不行,请手动执行下面的命令切换下模式:

-v 0bda和-p 1a2b两参数分别是网卡vender id和product id,即用lsusb查看得到的ID vender id:product id

1
root@orangepi5:~# usb_modeswitch -KW -v 0bda -p 1a2b

通过 lsmod 命令可以看到下面内核模块已自动加载

1
2
3
4
5
6
7
8
root@orangepi5:~# lsmod
Module Size Used by
... ... ...
... ... ...
8821cu 1839104 0
rtk_btusb 61440 0
... ... ...
... ... ...

通过 dmesg 命令可以看到 rtl8821cu 模块的加载信息
然后通过 ifconfig -a 命令查看网卡信息,一般网卡id都是wlan0,我这里显示的是wlx90de806d8e55

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
root@orangepi5:~# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.8.5.208 netmask 255.255.255.0 broadcast 10.8.5.255
inet6 fe80::642:ca7c:1de6:12df prefixlen 64 scopeid 0x20<link>
ether f6:07:0e:34:b7:c2 txqueuelen 1000 (Ethernet)
RX packets 38832 bytes 39316854 (37.4 MiB)
RX errors 0 dropped 78 overruns 0 frame 0
TX packets 21791 bytes 12948030 (12.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 85

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlx90de806d8e55: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::92de:80ff:fe6d:8e55 prefixlen 64 scopeid 0x20<link>
ether 90:de:80:6d:8e:55 txqueuelen 1000 (Ethernet)
RX packets 29000 bytes 14600056 (13.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30524 bytes 38526285 (36.7 MiB)
TX errors 0 dropped 78 overruns 0 carrier 0 collisions 0

连接WIFI测试(这一步仅仅是为了测试USB是否可以正常工作 可以跳过)

1
2
#直接nmtui
root@orangepi5:~# nmtui

选择Activate a connection –> 选择要连的WIFi –> 输入密码

看到要连的WIFi名前带个*号说明已经连上了

开启网卡热点:

断开上一步的Wifi网络连接

因为要开启热点 所以不能让USB网卡工作在连接wifi状态,否则会报错:

1
Your adapter can not be a station (i.e. be connected) and an AP at the same time

关于linux连接/断开 wifi 方法:

1
root@orangepi5:~# orangepi-config

选择Network –> 选择Forget(忘记所有wifi网络)

在orangepi-config的Network中可以安装buletooth(蓝牙)support,然后就可以在里面用BT discover查找蓝牙设备连接了

除了这种方法,也可以继续用nmtui进入连WIFi的设置中一个一个删除已经连过的WIFi

使用create_ap脚本(linux一般自带)

1
root@orangepi5:~# create_ap -m nat wlx90de806d8e55 eth0 orangepi orangepi

开启热点,此时可以用手机或者电脑搜索到这个热点,连接即可。
热点名称:orangepi
热点密码:orangepi

No passphrase (open network):无密码(开放网络):

1
create_ap wlan0 eth0 MyAccessPoint

WPA + WPA2 passphrase:WPA + WPA2密码:

1
create_ap wlan0 eth0 MyAccessPoint MyPassPhrase

AP without Internet sharing:无互联网共享的AP:

1
create_ap -n wlan0 MyAccessPoint MyPassPhrase

Bridged Internet sharing:桥接Internet共享:

1
create_ap -m bridge wlan0 eth0 MyAccessPoint MyPassPhrase

Bridged Internet sharing (pre-configured bridge interface):桥接互联网共享(预配置的桥接接口):

1
create_ap -m bridge wlan0 br0 MyAccessPoint MyPassPhrase

Internet sharing from the same WiFi interface:从同一个WiFi接口共享互联网:

1
create_ap wlan0 wlan0 MyAccessPoint MyPassPhrase

Choose a different WiFi adapter driver选择其他WiFi适配器驱动程序

1
create_ap --driver rtl871xdrv wlan0 eth0 MyAccessPoint MyPassPhrase

No passphrase (open network) using pipe:使用管道时无密码(开放网络):

1
echo -e "MyAccessPoint" | create_ap wlan0 eth0

WPA + WPA2 passphrase using pipe:使用管道的WPA + WPA2密码:

1
2
#'-e'后面的带上'/n'行会在遇到的地方作为新的一行
echo -e "MyAccessPoint /nMyPassPhrase" | create_ap wlan0 eth0

Enable IEEE 802.11n启用IEEE 802。11n

1
create_ap --ieee80211n --ht_capab '[HT40+]' wlan0 eth0 MyAccessPoint MyPassPhrase

Client Isolation:客户端隔离:

1
create_ap --isolate-clients wlan0 eth0 MyAccessPoint MyPassPhrase

热点服务开机自启动

Linux自带的create_ap找不到create_ap.conf和相应的service,需要用github提供的指令下载一遍create_ap(项目原地址:https://github.com/oblique/create_ap)

1
2
3
root@orangepi5:~# git clone https://github.com/oblique/create_ap.git
root@orangepi5:~# cd create_ap
root@orangepi5:~# make install

安装完后就可以找到create_ap.conf了

修改热点配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
root@orangepi5:~# vim /etc/create_ap.conf
CHANNEL=default
#热点的网关
GATEWAY=192.168.1.1
WPA_VERSION=2
ETC_HOSTS=0
DHCP_DNS=gateway
NO_DNS=0
NO_DNSMASQ=0
#隐藏网络
HIDDEN=0
MAC_FILTER=0
MAC_FILTER_ACCEPT=/etc/hostapd/hostapd.accept
ISOLATE_CLIENTS=0
#共享网络模式为NAT
SHARE_METHOD=nat
#启用WIFi4
IEEE80211N=1
#网卡好的也可以启用WIFi5
IEEE80211AC=0
HT_CAPAB=[HT40+]
VHT_CAPAB=
DRIVER=nl80211
NO_VIRT=0
COUNTRY=
FREQ_BAND=2.4
NEW_MACADDR=
DAEMONIZE=0
NO_HAVEGED=0
#添加修改以下信息
WIFI_IFACE=wlx90de806d8e55
INTERNET_IFACE=eth0
SSID=orangepi
PASSPHRASE=orangepi
USE_PSK=0

开机自启

1
2
root@orangepi5:~# systemctl restart create_ap
root@orangepi5:~# systemctl enable create_ap

本人搬运的是github上的一个开源项目

地址:https://github.com/shmilylty/OneForAll

OneForAll

👊OneForAll是一款功能强大的子域收集工具 📝English Document

上手指南

📢 请务必花一点时间阅读此文档,有助于你快速熟悉OneForAll!

项目介绍

在渗透测试中信息收集的重要性不言而喻,子域收集是信息收集中必不可少且非常重要的一环,目前网上也开源了许多子域收集的工具,但是总是存在以下部分问题:

  • 不够强大,子域收集的接口不够多,不能做到对批量子域自动收集,没有自动子域解析,验证,FUZZ以及信息拓展等功能。
  • 不够友好,固然命令行模块比较方便,但是当可选的参数很多,要实现的操作复杂,用命令行模式就有点不够友好,如果有交互良好,高可操作的前端那么使用体验就会好很多。
  • 缺少维护,很多工具几年没有更新过一次,issues和PR是啥,不存在的。
  • 效率问题,没有利用多进程,多线程以及异步协程技术,速度较慢。

为了解决以上痛点,此项目应用而生,正如其名,我希望OneForAll是一款集百家之长,功能强大的全面快速子域收集终极神器🔨。

目前OneForAll还在开发中,肯定有不少问题和需要改进的地方,欢迎大佬们提交IssuesPR,用着还行给个小星星✨吧,目前有一个专门用于OneForAll交流和反馈QQ群👨‍👨‍👦‍👦::824414244(加群验证:信息收集)。

功能特性

  • 收集能力强大,详细模块请阅读收集模块说明
    1. 利用证书透明度收集子域(目前有6个模块:censys_apicertspottercrtshentrustgooglespyse_api
    2. 常规检查收集子域(目前有4个模块:域传送漏洞利用axfr,检查跨域策略文件cdx,检查HTTPS证书cert,检查内容安全策略csp,检查robots文件robots,检查sitemap文件sitemap,利用NSEC记录遍历DNS域dnssec,后续会添加NSEC3记录等模块)
    3. 利用网上爬虫档案收集子域(目前有2个模块:archivecrawlcommoncrawl,此模块还在调试,该模块还有待添加和完善)
    4. 利用DNS数据集收集子域(目前有24个模块:bevigil_api, binaryedge_api, bufferover, cebaidu, chinaz, chinaz_api, circl_api, cloudflare, dnsdb_api, dnsdumpster, hackertarget, ip138, ipv4info_api, netcraft, passivedns_api, ptrarchive, qianxun, rapiddns, riddler, robtex, securitytrails_api, sitedossier, threatcrowd, wzpc, ximcx
    5. 利用DNS查询收集子域(目前有5个模块:通过枚举常见的SRV记录并做查询来收集子域srv,以及通过查询域名的DNS记录中的MX,NS,SOA,TXT记录来收集子域)
    6. 利用威胁情报平台数据收集子域(目前有6个模块:alienvault, riskiq_apithreatbook_apithreatminervirustotalvirustotal_api该模块还有待添加和完善)
    7. 利用搜索引擎发现子域(目前有18个模块:ask, baidu, bing, bing_api, duckduckgo, exalead, fofa_api, gitee, github, github_api, google, google_api, shodan_api, so, sogou, yahoo, yandex, zoomeye_api),在搜索模块中除特殊搜索引擎,通用的搜索引擎都支持自动排除搜索,全量搜索,递归搜索。
  • 支持子域爆破,该模块有常规的字典爆破,也有自定义的fuzz模式,支持批量爆破和递归爆破,自动判断泛解析并处理。
  • 支持子域验证,默认开启子域验证,自动解析子域DNS,自动请求子域获取title和banner,并综合判断子域存活情况。
  • 支持子域爬取,根据已有的子域,请求子域响应体以及响应体里的JS,从中再次发现新的子域。
  • 支持子域置换,根据已有的子域,使用子域替换技术再次发现新的子域。
  • 支持子域接管,默认开启子域接管风险检查,支持子域自动接管(目前只有Github,有待完善),支持批量检查。
  • 处理功能强大,发现的子域结果支持自动去除,自动DNS解析,HTTP请求探测,自动筛选出有效子域,拓展子域的Banner信息,最终支持的导出格式有txt, csv, json
  • 速度极快收集模块使用多线程调用,爆破模块使用massdns,DNS解析速度每秒可解析350000以上个域名,子域验证中DNS解析和HTTP请求使用异步多协程,多线程检查子域接管风险。
  • 体验良好,各模块都有进度条,异步保存各模块结果。

用到框架

  • aiohttp - 异步http客户端/服务器框架
  • beautifulsoup4 - 可以轻松从HTML或XML文件中提取数据的Python库
  • fire - Python Fire是一个纯粹根据任何Python对象自动生成命令行界面(CLI)的库
  • loguru - 旨在带来愉快的日志记录Python库
  • massdns - 高性能的DNS解析器
  • records - Records是一个非常简单但功能强大的库,用于对大多数关系数据库进行最原始SQL查询。
  • requests - Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。
  • tqdm - 适用于Python和CLI的快速,可扩展的进度条库

感谢这些伟大优秀的Python库!

安装要求

OneForAll基于Python 3.6.0开发和测试,OneForAll需要高于Python 3.6.0的版本才能运行。
安装Python环境可以参考Python 3 安装指南。运行以下命令检查Python和pip3版本:

1
2
python -V
pip3 -V

如果你看到类似以下的输出便说明Python环境没有问题:

1
2
Python 3.6.0
pip 19.2.2 from C:\Users\shmilylty\AppData\Roaming\Python\Python36\site-packages\pip (python 3.6)

安装步骤(git 版)

  1. 下载

由于该项目处于开发中,会不断进行更新迭代,下载时请使用git clone克隆最新代码仓库,也方便后续的更新,不推荐从Releases下载,因为Releases里版本更新缓慢,也不方便更新,
本项目已经在码云(Gitee)镜像了一份,国内推荐使用码云进行克隆比较快:

1
git clone https://gitee.com/shmilylty/OneForAll.git

或者:

1
git clone https://github.com/shmilylty/OneForAll.git
  1. 安装

你可以通过pip3安装OneForAll的依赖,以下为Windows系统下使用pip3安装依赖的示例:注意:如果你的Python3安装在系统Program Files目录下,如:C:\Program Files\Python36,那么请以管理员身份运行命令提示符cmd执行以下命令!

1
2
3
4
cd OneForAll/
python3 -m pip install -U pip setuptools wheel -i https://mirrors.aliyun.com/pypi/simple/
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
python3 oneforall.py --help

其他系统平台的请参考依赖安装,如果在安装依赖过程中发现编译某个依赖库失败时可以参考常见问题与回答.md文档中解决方法,如果依然不能解决欢迎加群反馈问题。

  1. 更新

执行以下命令更新项目(可保存对/config/setting.py/config/api.py的修改):

1
2
3
4
git stash        # 暂存本地的修改
git fetch --all # 拉取项目更新
git pull # 下载覆盖
git stash pop # 释放本地修改

安装步骤(docker 版)

首先下载并编辑配置文件,添加自己的api和个性化设置,并保留原始文件结构

1
2
3
4
5
6
config
├── api.py
├── default.py
├── __init__.py
├── log.py
└── setting.py

拉取镜像并执行,其中~/.config替换为你自己配置文件所在文件夹的路径

1
2
docker pull shmilylty/oneforall
docker run -it --rm -v ~/results:/OneForAll/results -v ~/.config:/OneForAll/config shmilylty/oneforall --target example.com run

参数直接加在指令末尾,结果会输出在本地目录~/results,如需保存到其他位置,可以自行修改

使用演示

如果你是通过pip3安装的依赖则使用以下命令运行示例:

1
2
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./example.txt run

usage_example

结果说明

我们以python3 oneforall.py --target example.com run命令为例,OneForAll在默认参数正常执行完毕会在results目录生成相应结果:

Result

example.com.csv是每个主域下的子域收集结果。

all_subdomain_result_1583034493.csv是每次运行OneForAll收集到子域的汇总结果,包含example.com.csv,方便在批量收集场景中获取全部结果。

result.sqlite3是存放每次运行OneForAll收集到子域的SQLite3结果数据库,其数据库结构如下图:

Database

其中类似example_com_origin_result表存放每个模块最初子域收集结果。

其中类似example_com_resolve_result表存放对子域进行解析后的结果。

其中类似example_com_last_result表存放上一次子域收集结果(需要收集两次以上才会生成)。

其中类似example_com_now_result表存放现在子域收集结果,一般情况关注这张表就可以了。

更多信息请参阅字段解释说明

使用帮助

命令行参数只提供了一些常用参数,更多详细的参数配置请见setting.py,如果你认为有些参数是命令界面经常使用到的或缺少了什么参数等问题非常欢迎反馈。由于众所周知的原因,如果要使用一些被墙的收集接口请先到setting.py配置代理,有些收集模块需要提供API(大多都是可以注册账号免费获取),如果需要使用请到api.py配置API信息,如果不使用请忽略有关报错提示。(详细模块请阅读收集模块说明

OneForAll命令行界面基于Fire实现,有关Fire更高级使用方法请参阅使用Fire CLI

oneforall.py是主程序入口,oneforall.py可以调用brute.pytakerover.pydbexport.py等模块,为了方便进行子域爆破独立出了brute.py,为了方便进行子域接管风险检查独立出了takerover.py,为了方便数据库导出独立出了dbexport.py,这些模块都可以单独运行,并且所接受参数要更丰富一点,如果要单独使用这些模块请参考使用帮助

❗注意:当你在使用过程中遇到一些问题或者疑惑时,请先到Issues里使用搜索找找答案,还可以参阅常见问题与回答

oneforall.py使用帮助

以下帮助信息可能不是最新的,你可以使用python oneforall.py --help获取最新的帮助信息。

1
python oneforall.py --help
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
NAME
oneforall.py - OneForAll帮助信息

SYNOPSIS
oneforall.py COMMAND | --target=TARGET <flags>

DESCRIPTION
OneForAll是一款功能强大的子域收集工具

Example:
python3 oneforall.py version
python3 oneforall.py --target example.com run
python3 oneforall.py --targets ./domains.txt run
python3 oneforall.py --target example.com --valid None run
python3 oneforall.py --target example.com --brute True run
python3 oneforall.py --target example.com --port small run
python3 oneforall.py --target example.com --fmt csv run
python3 oneforall.py --target example.com --dns False run
python3 oneforall.py --target example.com --req False run
python3 oneforall.py --target example.com --takeover False run
python3 oneforall.py --target example.com --show True run

Note:
参数alive可选值True,False分别表示导出存活,全部子域结果
参数port可选值有'default', 'small', 'large', 详见config.py配置
参数fmt可选格式有 'csv','json'
参数path默认None使用OneForAll结果目录生成路径

ARGUMENTS
TARGET
单个域名(二选一必需参数)
TARGETS
每行一个域名的文件路径(二选一必需参数)

FLAGS
--brute=BRUTE
s
--dns=DNS
DNS解析子域(默认True)
--req=REQ
HTTP请求子域(默认True)
--port=PORT
请求验证子域的端口范围(默认只探测80端口)
--valid=VALID
只导出存活的子域结果(默认False)
--fmt=FMT
结果保存格式(默认csv)
--path=PATH
结果保存路径(默认None)
--takeover=TAKEOVER
检查子域接管(默认False)
0%