江湖路远,好久不见!之前准备这个系列一周至少更一篇,实在是高看了自己的能力,反反复复的翻车!(PS:也能看出网上有些参考文档的bug,都在水经验)所以鸽了好久,现在可能也是半调试半输出了。因为感觉自己不记录下的话,后面就弄完就没心思了。这次不像上一篇就刷个固件简单配置下就结束了,本来想整个有意思的东西,可惜能力有限,环境方面就处在了翻车的边缘。不过也是蛮开心的,在实践中学习了不少东西。其实,之前一直被问到一个问题:你自己搭建或者说调试的环境也都是参考网上其他文章,那么在微信记录有什么意义呢。emmmmc,我个人觉得吧,原创性是比较难的,就算是复现,也要自己去实操一顿和记录一下,转换为自己的知识;二者,在实际操作过程中,你还是会遇到各种各样的问题,遇到了这些问题,好好去解决它,才能化为自己的特色。就这次搭建环境而言,翻车太多了,光重装系统就经历了几次,所以我觉得更要好好记录下了,长长记性!
其实,当时在准备kali环境后,就想做个系列。奈何自己在开分支折腾一个新东西的时候,遇到了一个新的需求。就将树莓派设备刷了OpenWrt,搞了一下代理。可惜,翻车了!最后passwall测试的时候,完美通过,实际使用一言难尽。这个等下次折腾好,准备作为下一个系列。这次,就将kali的后续系列完善。原计划环境搭建作为一个小分支在一篇文章中叙述完的,奈何翻车次数太多,就单独开个分支。将一些尝试细化一下,记录过程更加详细点,以便后续的查看。好了,言归正传!这次想要做的是前奏工作,一个服务器de 环境准备。在上篇文章中,我说过树莓派这个小东西可以刷成debian系列的。因此,这次选择了刷取Ubuntu固件。当然,Debian和CentOS也是可以烧录的。只是,我选取了官方的镜像,就没有考虑第三方的扩展了。接下来呢,将会从以下几点,分点阐述这次的环境搭建过程:
系统烧录
换源更新
docker安装
docker-compose安装
既然是详尽的记录,之前出现过的前几点,也会老生常谈下,会尽量缩短共识性的东西,讲点新思路。同时,会将上次忽略的点这里进一步阐述下,争取老话新说。OK,开整!
一、系统烧录
烧录镜像的过程,与上次文章基本一致:下载固件、选取SD卡,进行烧录。这次,就简单阐述这个过程了,没有什么难度。按照图片进行操作就可以了,如果不会的话,可以去上一篇文章进行学习。
【备注】
1. 树莓派设备:Raspberry Pi 2b
3. 踩坑点:根据自己的设备型号进行下载对应的系统,2b对应的是ARMV7,划重点,后面要考的!
上述系统烧录完成以后,接上屏幕、鼠标和键盘。完成后的界面是这样Shai的:
请继续忽略跟上次一样的马赛克,条件简陋。这个系统镜像是无桌面版的,服务器嘛,能理解的,轻便稳定安全是王道!所以,我们直接登录就可以了。初始用户名是:ubuntu
,密码是ubuntu
。第一次进去的话,会立即让你修改密码的。按照操作进行就可以了。修改完密码以后,重新登录就是如下界面啦!
二、换源更新【重点】
上一篇采用的是root权限进行操作的,这种行为是很危险的。好在这个针对服务器版本的Ubuntu系统,考虑到了这一点。所以在进行ssh登录的时候,关闭了root账号远程登录的功能。哦,对了,这个系统不用我们配置ssh的,已经在user-data.yaml
文件中配置好了。同样,这个文件中还规定了用户名和密码,想要更好用户的可以提前在这里修改。但是我更建议使用linux自带的,下一期我会详细讲下。本次,就讲下如何去更换ARM版的Ubuntu的镜像源;接下来的操作,都默认使用自己主机的Term,通过ssh方式进行配置了。
替换步骤:
第一步:原文件的备份
通过上篇文章,都知道Debian系列默认包管理器为apt-get或者dpkg (CentOS系列是rpm和yum啦,有兴趣的小伙伴,可以去了解下)。 那么我们就去/etc路径下找到/apt这个目录。查看下目录结构
# 进入目录:/etc/apt
cd /etc/apt
# 查看当前文件夹下的内容
ls
# 备份软件更新源地址并查看
cp ./source.list ./source.list.bak && ls -la
由于没有采用root用户,在操作cp的时候出现了权限不够。但是没事,我们可以借助sudo这个外挂,达到提权的目的。关于权限这个环节,等后面我弄的更清楚些,结合内网渗透方面的提权,单独开个系列讲下,感觉还是蛮有意思的!
第二步:替换源文件内容
接下来就是替换source.list文件中的官方镜像地址了,一般的ubuntu系统可选的有清华源、科大源、阿里源等等。但是,还记得我上面提到的嘛:树莓派是ARM架构的,所以这个替换源内容的时候就要注意了。选取的不是x86结构的ubuntu源,而是arm结构的ubuntu-ports源。因此,为了防止出错,我们更换上次那种换源的手法:整个内容替换。这次,我们还是借助于vim这个好用的编辑器。而不是简单的复制粘贴,而是玩点进阶的;字符串的替换手法,操作如下:
# vim编辑文档 --- 防止权限不够,加上Sudo
sudo vim ./source.list
# 在vim的指令模式 (按下Esc进行插入模式和指令模式的切换),输入
:%s/ports.ubuntu.com/mirrors.aliyun.com/g # 阿里源
:%s/ports.ubuntu.com/mirrors.ustc.edu.cn/g # 科大源
# 退出vim并保存修改
:wq
当然,如果不想用vim的,可以使用sed命令,也是可以完成上述操作的!
第三步:更新目录和软件
老两样,不过阿里源和科大源出现的内容是不一致的。不过影响不大,按照正常步骤yes就可以了。
# 更新目录和软件源
sudo apt-get update && sudo apt-get -y upgrade
【备注】
注意树莓派是ARM架构的,更新源的时候注意镜像源地址的区别
如果权限不够,可以借助
sudo
方法。切记,非必要,勿乱用!简单分析下
source.list
文件的内容,可以看到在host之后,会带有一些各种不同的单词。host地址我们好理解,后面的单词意思是什么呢?其实也很好理解,类似于你自己创建一个项目的时候,是不是需要跟上发行版本和其他组件分类信息。同样,这个源的构成也是这样的:host + 版本代号 + 组件分类信息。版本代号简单举例 -- 类比macOS的11为BigSur,12为Monterey
系统版本 | 代号 |
ubuntu 16.04 | xenial |
ubuntu18.04 | bionic |
组件分类信息 -- 类比商业版、社区版的概念
代号 | 含义 |
main | 基本组件 |
restricted | 受限组件 |
universe | 社区维护 |
multiverse | 非自由组件 |
简单讲下vim
首先,vi和vim还是有些区别的,不过大部分还是共同的。这里以vim为例,vi的话,参考参考。看下图,了解vim工作有三个模式,命令模式(指令模式)、输入模式和底线命令模式。说的很拗口哦,我们简单点记:命令模式和输入模式,其中他们两者通过Esc键进行转换。当在命令模式前加上: 后,就变成了底线命令模式。在 输入模式,我们可以对内容进行修改;在 命令模式,我们可以控制屏幕上的光标移动、字符或字符串删除之类的;在 底线命令模式,我们可以文件保存、退出、设置编辑环境等。这里简要概括几个常用的,更加详细的,请选择runoob.com!(曾哥教我的,良心网站!)
输入模式 命令模式 底线命令模式 a:插入到光标后 u:撤销一步,可叠加 :wq 保存并退出 i: 插入到光标前 dd: 删除一行 :w! 强制退出
更详细的,自己去发掘下吧,或者下次单独开一讲,这里不能喧宾夺主!
三、docker安装
在这里,没有考虑部署LAMP或者LNMP这个常用环境了。而是采取了隔离性更好的docker,而且在后续部署自己服务的时候,拉取的镜像也是已经配置好的,节省了自己的运维成本。话不多说,开整
第一步:安装docker
翻车版本
# 1. 如果之前有老版本docker,删除
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2. 安装依赖
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 3. 添加GPG KEY
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 4. 添加源
sudo add-apt-repository \
"deb [arch=arm64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 5. 更新目录后,安装docker
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
第二步:没有第二步,直接翻车了。是不是很意外!先看报错的内容吧
很明显的告诉我们,找到的依赖是不匹配系统的,我们在换源的时候,就一直强调我们是ARM架构的,对应的是ubuntu-ports。可以看到Hit:5这一栏对应的docker下载地址所拉取的应该不是我们需要的arm版本的。我们来进入到这个地址看下,内容是什么:
打过靶场的师傅,看到这样的结构是不是内心狂喜。别激动,别激动,我们现在排错呢,继续下去!
看到有dists和gpg两个文件夹,这么说,我上述的猜想是错误的。这里涉及到apt包的概念了,简单阐述下吧(PS:因为我也不是很懂!):国内的镜像仓库都会按照一定的规律或者约束进行存放,这里的dists文件夹存放的是关于软件包的信息数据(文件名称、大小、位置等),gpg文件夹应该是存放的gpg签名之类的信息吧。这里知识是我的盲点,大家有兴趣的可以搜索关键词“创建apt源”、“apt仓库”之类的进行学习,这里鸽一下,等我学会了能确定是对的,再分享出来。
所以这种手动安装的方法,翻车了!还未解决,正在排错,待定!
下次可以单独开一栏,这个排错的过程!为什么上面会去解析那个软件源的构成,也是在排错中,怀疑是不是源的问题。结果,这个猜想又被排除了!
可用版本
好了,虽然手动的翻车了!但是,肯定不会让大家失望而归啊!接下来,放上参考大佬的方法,成功装上了docker的步骤,老规矩,先看截图。
兄弟们,是不是感觉它都回来了!步骤归纳如下:
# 第一步:远程拉取执行脚本
sudo curl -sSL https://get.daocloud.io/docker | sh
# 第二步:查看是否安装成功
sudo docker version
是不是很简单,就两行命令的事情。但是,实际并不是这样的。这里面的坑也是很多的。如果说,你执行上述第一条命令的时候未成功,可以将软件源替换为如下的内容,我就直接放结果了,不进行分析了;在软件换源的备注里已经解释清楚了。
# deb是二进制包,deb-src是源码包。是科大源,想要知道原因关注后面的组件
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiversec
同时,也参考了网上第三种方法,直接下载源码,进行安装。结果运行出来还是无法执行的。错误如下,也是下载的二进制包与系统不匹配。但是已经下载的是ARM版的二进制包了,结果还出错误。不是很理解,大佬可以解答下,如何解决。
第二步:优化配置
上面是将docker终于安装完了,但是我们不是root用户,每次都加sudo执行,实在是有辱斯文。当然,你也可以选择alias别名化处理,但是作为读书人,不雅不雅。我们还是优雅的去执行:
解决普通用户不加sudo---->放入Docker运行组
sudo usermod -aG docker $USER
设置docker开机自启动
sudo systemctl enable docker
启动docker
sudo systemctl start docker
第三步:查看docker是否正常
好了,现在可以检测是否都完成docker的安装了。老规矩,跑个hello world看看
Ya,大功告成!终于是能用了,实属不易,这个系列完结,一定要把排错的辛酸历程单独开一节。
这里在补充下,docker的卸载方法
# 1. 删除安装包
sudo apt-get purge docker-ce
# 2. 删除镜像、容器、配置文件等
sudo rm -rf /var/lib/docker
# 3. 查看是否有残留
sudo dpkg -l | grep docker
# 4. 删除上述检测到的
sudo apt remove --purge docker.*
别问,为啥会知道删除卸载指令。说多了都是泪,经历了反反复复的卸载安装,就是为了排错,找出原因!
【备注】
想学Docker的伙伴,请继续前往runoob.com或者Docker官网,很赞
记住Docker的两大特性:CGroups、Namespace 。这个和Linux内核的特性有点关系。有时间,开一个云计算系列,好好探讨下。
都学了Docker了,Kubernetes也去学习下。建议,先学Docker Swarm的思想,后面学K8s会快很多。
这里部署Docker环境是为了一下节做准备,更新了标题:做树莓派的搭建的安全系列文章。从kali起步,请期待吧!
三、docker-compose安装
为了防止跟Docker安装一样翻车,这次,我们采用最原始的方法。直接将源码下载下来进行安装。实践证明,这样反而是效率最高的。现在归纳下安装方法:
包管理器在线安装(apt、pip、yum等)
源码本地安装
有的源码还需要本地编译进行安装,这里我们采取不需要编译的方法。其实参考网上的包管理安装方法,也是下载编译后的文件。所以不如直接本地下载,然后scp传到树莓派上,进行安装配置环境。请看步骤:第一步:自己的电脑下载好Docker-Compose的安装包
下载地址
在Release界面下载对应的版本,还记得我说的上面的划重点嘛,树莓派是基于ARMV7指令集的。将这个文件下载到本地,并修改名字为docker-compose。
第二步:scp上传文件到树莓派
将文件改好名字后,本地新开一个终端,将文件上传到树莓派上。
# scp本地上传用法:scp [本地文件] [目标主机]:[目标主机文件地址]scp ./docker-compose ubuntu@192.169.1.103:/home/ubuntu
在ubuntu的终端中查看当前路径下的文件,可以看到上传上来的docker-compose文件。
第三步:docker-compose配置
关于如何安装和启动docker-compose,在github该项目中已经很清晰的描述了。我们来分析下该README文件告诉我们,将刚刚上传的文件拷贝到以下几个带docker的目录中。那么,我们怎么确定,自己的docker安装后,是在哪一个目录呢?很简单,find命令查询呀!find命令除了可以查询文件还可以查询其他类型,就包括目录。该指令为
# find查询docker目录find / -name docker -type d
这里采用了全局搜索,可以看到红框上的内容,与官方文件中的目录一致。所以我们将该文件拷贝到该目录下。为了权限的方便,直接使用root用户进行操作了。大家别学,很危险!
cp /home/ubuntu/docker-compose /usr/libexec/docker/cli-plugins/
接下来,就是给予该二进制文件权限了
chmod +x /usr/libexec/docker/cli-plugins/docker-compose
我这里出现的是777的情况,当时给顺手了。不嫌麻烦,可以去掉权限。
其次,就是建立软链接了
sudo ln -s /usr/libexec/docker/cli-plugins/ /usr/bin/docker-compose
建立软链接的目的是方便访问,可以在你的bash中快捷访问。这里插一句,软链接和硬链接你这样记录:软链接相当于快捷键,硬链接相当于拷贝副本。这样子,就不会搞错了,它对应特性也好理解了。
最后,我们来测试下是否完成安装
sudo docker-compose --version
你看,这就安装结束了。还没踩雷,是吧!看来这种方法还是蛮好的,能够突破一些因为网络不通或者依赖安装不上带来的问题,导致最后安装失败!是不是又get到一个新技能!
结束语
行文至此,结束了!反反复复的翻车,系统都重装几次了。属实边学边练了,家人们!下面照例放出参考文章链接,有些英文的就没放了,我host出了点问题,我也进不去了。这里安利一下,谷歌英文搜索的给力。其实,渗透的师傅们,Hack搜索规则也不是不行:
1. 树莓派(RASPBERRY PI 4)UBUNTU 18.04 安装DOCKER
2. 树莓派-ubuntu安装docker和docker-compose
3. 树莓派4B安装Ubuntu20.04 解决更换镜像源问题
4. Ubuntu Server 19.10系统的安装、配置和优化
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)