freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

树莓派·安全专刊---搭建Ubuntu-Server环境
2021-12-08 17:06:47

江湖路远,好久不见!之前准备这个系列一周至少更一篇,实在是高看了自己的能力,反反复复的翻车!(PS:也能看出网上有些参考文档的bug,都在水经验)所以鸽了好久,现在可能也是半调试半输出了。因为感觉自己不记录下的话,后面就弄完就没心思了。这次不像上一篇就刷个固件简单配置下就结束了,本来想整个有意思的东西,可惜能力有限,环境方面就处在了翻车的边缘。不过也是蛮开心的,在实践中学习了不少东西。其实,之前一直被问到一个问题:你自己搭建或者说调试的环境也都是参考网上其他文章,那么在微信记录有什么意义呢。emmmmc,我个人觉得吧,原创性是比较难的,就算是复现,也要自己去实操一顿和记录一下,转换为自己的知识;二者,在实际操作过程中,你还是会遇到各种各样的问题,遇到了这些问题,好好去解决它,才能化为自己的特色。就这次搭建环境而言,翻车太多了,光重装系统就经历了几次,所以我觉得更要好好记录下了,长长记性!

其实,当时在准备kali环境后,就想做个系列。奈何自己在开分支折腾一个新东西的时候,遇到了一个新的需求。就将树莓派设备刷了OpenWrt,搞了一下代理。可惜,翻车了!最后passwall测试的时候,完美通过,实际使用一言难尽。这个等下次折腾好,准备作为下一个系列。这次,就将kali的后续系列完善。原计划环境搭建作为一个小分支在一篇文章中叙述完的,奈何翻车次数太多,就单独开个分支。将一些尝试细化一下,记录过程更加详细点,以便后续的查看。好了,言归正传!这次想要做的是前奏工作,一个服务器de 环境准备。在上篇文章中,我说过树莓派这个小东西可以刷成debian系列的。因此,这次选择了刷取Ubuntu固件。当然,Debian和CentOS也是可以烧录的。只是,我选取了官方的镜像,就没有考虑第三方的扩展了。接下来呢,将会从以下几点,分点阐述这次的环境搭建过程:

  • 系统烧录

  • 换源更新

  • docker安装

  • docker-compose安装

既然是详尽的记录,之前出现过的前几点,也会老生常谈下,会尽量缩短共识性的东西,讲点新思路。同时,会将上次忽略的点这里进一步阐述下,争取老话新说。OK,开整!

一、系统烧录

烧录镜像的过程,与上次文章基本一致:下载固件、选取SD卡,进行烧录。这次,就简单阐述这个过程了,没有什么难度。按照图片进行操作就可以了,如果不会的话,可以去上一篇文章进行学习。1638949497_61b06279dde4a75f3b46d.png!small
【备注】

1. 树莓派设备:Raspberry Pi 2b

  1. Ubuntu镜像链接

3. 踩坑点:根据自己的设备型号进行下载对应的系统,2b对应的是ARMV7,划重点,后面要考的!

上述系统烧录完成以后,接上屏幕、鼠标和键盘。完成后的界面是这样Shai的:

1638949562_61b062bad8d31c03d07bb.png!small

请继续忽略跟上次一样的马赛克,条件简陋。这个系统镜像是无桌面版的,服务器嘛,能理解的,轻便稳定安全是王道!所以,我们直接登录就可以了。初始用户名是:ubuntu,密码是ubuntu。第一次进去的话,会立即让你修改密码的。按照操作进行就可以了。修改完密码以后,重新登录就是如下界面啦!

1638949610_61b062ea04bc14e9523e7.png!small

二、换源更新【重点】

上一篇采用的是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

1638949693_61b0633d28d2f74f3647b.png!small由于没有采用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

1638949749_61b06375de427487cd2f4.png!small当然,如果不想用vim的,可以使用sed命令,也是可以完成上述操作的!

第三步:更新目录和软件

老两样,不过阿里源和科大源出现的内容是不一致的。不过影响不大,按照正常步骤yes就可以了。

# 更新目录和软件源
sudo apt-get update && sudo apt-get -y upgrade

【备注】

  1. 注意树莓派是ARM架构的,更新源的时候注意镜像源地址的区别

  2. 如果权限不够,可以借助sudo方法。切记,非必要,勿乱用!

  3. 简单分析下source.list文件的内容,可以看到在host之后,会带有一些各种不同的单词。host地址我们好理解,后面的单词意思是什么呢?其实也很好理解,类似于你自己创建一个项目的时候,是不是需要跟上发行版本和其他组件分类信息。同样,这个源的构成也是这样的:host + 版本代号 + 组件分类信息。1638949834_61b063cab2707cff06a4f.png!small版本代号简单举例 -- 类比macOS的11为BigSur,12为Monterey

系统版本 代号
ubuntu 16.04xenial
ubuntu18.04 bionic

组件分类信息 -- 类比商业版、社区版的概念

代号含义
main基本组件
restricted受限组件
universe社区维护 
multiverse非自由组件


  1. 简单讲下vim
    首先,vi和vim还是有些区别的,不过大部分还是共同的。这里以vim为例,vi的话,参考参考。看下图,了解vim工作有三个模式,命令模式(指令模式)、输入模式和底线命令模式。说的很拗口哦,我们简单点记:命令模式和输入模式,其中他们两者通过Esc键进行转换。当在命令模式前加上: 后,就变成了底线命令模式。在 输入模式,我们可以对内容进行修改;在 命令模式,我们可以控制屏幕上的光标移动、字符或字符串删除之类的;在 底线命令模式,我们可以文件保存、退出、设置编辑环境等。
    1638950190_61b0652e5481754fa8252.png!small这里简要概括几个常用的,更加详细的,请选择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

第二步:没有第二步,直接翻车了。是不是很意外!先看报错的内容吧

1638950354_61b065d2c696f11e71808.png!small

很明显的告诉我们,找到的依赖是不匹配系统的,我们在换源的时候,就一直强调我们是ARM架构的,对应的是ubuntu-ports。可以看到Hit:5这一栏对应的docker下载地址所拉取的应该不是我们需要的arm版本的。我们来进入到这个地址看下,内容是什么:

1638950419_61b0661391e24eb06cd21.png!small

打过靶场的师傅,看到这样的结构是不是内心狂喜。别激动,别激动,我们现在排错呢,继续下去!

1638950461_61b0663d7b9fe254b9c51.png!small

看到有dists和gpg两个文件夹,这么说,我上述的猜想是错误的。这里涉及到apt包的概念了,简单阐述下吧(PS:因为我也不是很懂!):国内的镜像仓库都会按照一定的规律或者约束进行存放,这里的dists文件夹存放的是关于软件包的信息数据(文件名称、大小、位置等),gpg文件夹应该是存放的gpg签名之类的信息吧。这里知识是我的盲点,大家有兴趣的可以搜索关键词“创建apt源”、“apt仓库”之类的进行学习,这里鸽一下,等我学会了能确定是对的,再分享出来。

  • 所以这种手动安装的方法,翻车了!还未解决,正在排错,待定!

  • 下次可以单独开一栏,这个排错的过程!为什么上面会去解析那个软件源的构成,也是在排错中,怀疑是不是源的问题。结果,这个猜想又被排除了!

  • apt背后格式参考文章地址

可用版本

好了,虽然手动的翻车了!但是,肯定不会让大家失望而归啊!接下来,放上参考大佬的方法,成功装上了docker的步骤,老规矩,先看截图。1638950523_61b0667b182857bcab338.png!small
兄弟们,是不是感觉它都回来了!步骤归纳如下:

# 第一步:远程拉取执行脚本
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版的二进制包了,结果还出错误。不是很理解,大佬可以解答下,如何解决。

1638950663_61b067073e933b331aaed.png!small
文章参考地址

第二步:优化配置

上面是将docker终于安装完了,但是我们不是root用户,每次都加sudo执行,实在是有辱斯文。当然,你也可以选择alias别名化处理,但是作为读书人,不雅不雅。我们还是优雅的去执行:

  • 解决普通用户不加sudo---->放入Docker运行组

sudo usermod -aG docker $USER

1638950699_61b0672b43486c1f8b455.png!small

  • 设置docker开机自启动

sudo systemctl enable docker
  • 启动docker

sudo systemctl start docker

第三步:查看docker是否正常
好了,现在可以检测是否都完成docker的安装了。老规矩,跑个hello world看看1638950749_61b0675d368a7443f788a.png!small
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.*

别问,为啥会知道删除卸载指令。说多了都是泪,经历了反反复复的卸载安装,就是为了排错,找出原因!
【备注】

  1. 想学Docker的伙伴,请继续前往runoob.com或者Docker官网,很赞

  2. 记住Docker的两大特性:CGroups、Namespace 。这个和Linux内核的特性有点关系。有时间,开一个云计算系列,好好探讨下。

  3. 都学了Docker了,Kubernetes也去学习下。建议,先学Docker Swarm的思想,后面学K8s会快很多。

  4. 这里部署Docker环境是为了一下节做准备,更新了标题:做树莓派的搭建的安全系列文章。从kali起步,请期待吧!

三、docker-compose安装

为了防止跟Docker安装一样翻车,这次,我们采用最原始的方法。直接将源码下载下来进行安装。实践证明,这样反而是效率最高的。现在归纳下安装方法:

  • 包管理器在线安装(apt、pip、yum等)

  • 源码本地安装

有的源码还需要本地编译进行安装,这里我们采取不需要编译的方法。其实参考网上的包管理安装方法,也是下载编译后的文件。所以不如直接本地下载,然后scp传到树莓派上,进行安装配置环境。请看步骤:
第一步:自己的电脑下载好Docker-Compose的安装包
下载地址
1638952653_61b06ecd01f7c0c488d41.png!small?1638952653321

在Release界面下载对应的版本,还记得我说的上面的划重点嘛,树莓派是基于ARMV7指令集的。将这个文件下载到本地,并修改名字为docker-compose。

第二步:scp上传文件到树莓派

将文件改好名字后,本地新开一个终端,将文件上传到树莓派上。

# scp本地上传用法:scp [本地文件] [目标主机]:[目标主机文件地址]scp ./docker-compose ubuntu@192.169.1.103:/home/ubuntu

在ubuntu的终端中查看当前路径下的文件,可以看到上传上来的docker-compose文件。1638952703_61b06eff3025e4e7a5659.png!small?1638952703479

第三步:docker-compose配置

关于如何安装和启动docker-compose,在github该项目中已经很清晰的描述了。我们来分析下1638952730_61b06f1aab340153dd285.png!small?1638952731016该README文件告诉我们,将刚刚上传的文件拷贝到以下几个带docker的目录中。那么,我们怎么确定,自己的docker安装后,是在哪一个目录呢?很简单,find命令查询呀!find命令除了可以查询文件还可以查询其他类型,就包括目录。该指令为

# find查询docker目录find / -name docker -type d

1638952837_61b06f852712a0cd585a1.png!small?1638952837296

这里采用了全局搜索,可以看到红框上的内容,与官方文件中的目录一致。所以我们将该文件拷贝到该目录下。为了权限的方便,直接使用root用户进行操作了。大家别学,很危险!

cp /home/ubuntu/docker-compose /usr/libexec/docker/cli-plugins/

1638952884_61b06fb403bfc11d2a1d7.png!small?1638952884103

接下来,就是给予该二进制文件权限了

chmod +x /usr/libexec/docker/cli-plugins/docker-compose

1638952904_61b06fc83fb5ab83851fd.png!small?1638952904454

我这里出现的是777的情况,当时给顺手了。不嫌麻烦,可以去掉权限。
  其次,就是建立软链接了

sudo ln -s /usr/libexec/docker/cli-plugins/ /usr/bin/docker-compose

1638953053_61b0705d964fe5ee18c45.png!small?1638953053568

建立软链接的目的是方便访问,可以在你的bash中快捷访问。这里插一句,软链接和硬链接你这样记录:软链接相当于快捷键,硬链接相当于拷贝副本。这样子,就不会搞错了,它对应特性也好理解了。
最后,我们来测试下是否完成安装

sudo docker-compose --version

1638953011_61b070330ddee3ea9dea0.png!small?1638953011424

你看,这就安装结束了。还没踩雷,是吧!看来这种方法还是蛮好的,能够突破一些因为网络不通或者依赖安装不上带来的问题,导致最后安装失败!是不是又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系统的安装、配置和优化

5. 换用国内apt源解决树莓派安装ubuntu后apt-get速度慢的问题

6. Docker-Copose安装官方文档

# 树莓派 # Docker # 搭建web环境
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录