freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

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

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客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录