严格来说,Linux 是操作系统的内核;人们日常使用的 Ubuntu、Debian 或 Kali Linux 等发行版,才是围绕 Linux 内核组合出的完整操作系统。它们广泛用于个人电脑、服务器、移动设备和嵌入式系统,负责管理硬件资源,并为应用程序提供运行环境。
Linux 的设计传统可追溯到 20 世纪 70 年代早期的 Unix。1991 年,芬兰学生林纳斯·托瓦兹(Linus Torvalds)启动了 Linux 项目,旨在创建一个免费且开源的操作系统内核。如今,Linux 内核已发展为拥有数千万行代码的开源项目,基于 GNU 通用公共许可证第二版(GPLv2)发布。
Linux 的应用场景与设计哲学
我们每天都在以各种形式与 Linux 发生交互。Linux 驱动了以下设备与系统:
- 网页服务器与云计算中心
- 智能汽车的娱乐与控制面板
- 商店里的收银机与销售终端(POS)系统
- 交通信号灯控制器、工业传感器等关键基础设施
- 超级计算机、智能家居设备以及运行 Android 系统的手机
Linux 的核心设计哲学在于简洁性、模块化和开放性。它提倡构建单一用途的小型程序,并通过组合这些程序来完成复杂的任务。其遵循的五个核心原则包括:
- 一切皆文件:许多系统资源都通过文件或类文件接口暴露出来;配置也常以文本文件保存。例如,用户的基本属性记录在
/etc/passwd中。 - 单一用途的小型程序:系统提供许多功能单一的工具,供用户自由组合。
- 程序链式链接:利用特定的符号(如管道)可以将多个工具串联起来处理或过滤数据。
- 避免强制使用图形界面:主要通过命令行交互,给予用户对系统最大程度的控制权限。
- 配置数据保存在文本文件中:无需通过复杂的图形设置工具即可完成系统配置。
发行版概念
因为 Linux 内核是开源的,任何人都可以定制并发布自己的版本。因此,Linux 有许多不同的发行版,它们共享 Linux 内核与核心架构,但包含不同的软件包、配置和用户界面。
常见的 Linux 发行版包括:
- Ubuntu 和 Debian:Debian 以极其稳定和可靠著称,使用高级软件包工具(APT)处理软件更新。Ubuntu 是基于 Debian 的流行分支,常作为服务器或桌面操作系统。
- Red Hat Enterprise Linux(RHEL)及其生态中的 Rocky Linux、AlmaLinux:企业级计算与服务器中的常用选择。
- Kali Linux 和 Parrot OS:预装了大量安全审计与渗透测试工具,深受安全从业人员青睐。
终端与命令提示符
在没有安装图形用户界面(GUI)的轻量级 Linux 系统中,用户需要使用终端进行交互。终端提供了一个纯文本的输入与输出接口。
当你打开终端时,会看到一行文字,这就是命令提示符,光标在后方闪烁,等待你输入命令。命令提示符的默认格式如下:
username@hostname:current_working_directory$
例如,crow@opsbox:~$:
crow是当前登录的用户名。opsbox是计算机的主机名。~代表当前用户的主目录。这是用户登录系统时的默认工作文件夹。$符号表示当前是以普通用户身份登录。如果切换到拥有最高权限的管理员用户(即root),此符号会变为井号#(如root@opsbox:~#)。
终端提示符的显示样式是由系统环境变量 PS1 控制的,你可以自定义它来显示当前时间、IP 地址或命令执行状态。
获取 Shell 的常见途径
要与 Linux 交互,你需要获得系统的 Shell,即解释并执行你输入命令的界面。在实际工作中,获取 Shell 通常有以下几种方式:
- 本地终端:直接连接在 Linux 物理机或虚拟机上打开的交互终端。
- 安全外壳协议远程登录:安全外壳协议(SSH)是一种在网络设备之间建立加密通信的协议。
不同于明文传输的 Telnet,SSH 利用非对称加密技术在客户端与服务端之间进行密钥协商,从而建立安全的加密信道。这能确保你在网络上传输的口令与命令不会被中间人窃听或篡改。在本地终端中远程连接的命令语法如下:
执行后系统会提示输入密码。在输入密码时,终端不会显示任何字符或星号,这是正常的安全设计,直接输完回车即可。user@host:~$ ssh [email protected] - 本平台网页终端:本平台的实验环境提供了网页终端。点击启动 Lab 按钮后,你无需手动执行
ssh,浏览器中会自动打开一个网页终端,并且你已经是拥有crow权限的 Shell 会话。
试手首批命令与身份
我们从最基础的命令开始熟悉终端。
输出文本:echo
echo 命令会将你输入的文本打印回终端。
- 输出单个单词时,可以直接编写:
crow@opsbox:~$ echo 你好 你好 - 如果文本中包含空格,应使用双引号将文本括起来:
crow@opsbox:~$ echo "你好,乌鸦!" 你好,乌鸦!
查询身份:whoami 与 id
- 输入
whoami可以输出你当前登录的用户名:crow@opsbox:~$ whoami crow - 输入
id命令则会返回更详细的身份信息,包括用户唯一标识符(UID)、组标识符(GID)以及所属的附加组:crow@opsbox:~$ id uid=1000(crow) gid=1000(crow) groups=1000(crow)注意
为什么安全研究人员关注组信息? 在安全评估中,获取 Shell 后第一步通常是运行
whoami和id。用户组决定了你在目标系统中的资源访问权限。例如,如果你所属的附加组中包含sudo、admin或docker等特权组,这意味着你可以轻易提升权限掌控整台服务器。
查看主机名与内核信息:hostname 与 uname
hostname可以打印出当前计算机的主机名称:crow@opsbox:~$ hostname opsboxuname用于显示操作系统的基本系统信息。配合使用-a选项可以打印全部系统细节(包括内核名称、主机名、内核发行号、系统架构等):
如果只想打印 Linux 的内核版本发行号,可以使用crow@opsbox:~$ uname -a Linux opsbox 5.15.0-72-generic #79-Ubuntu SMP Wed Apr 19 08:22:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux-r选项:crow@opsbox:~$ uname -r 5.15.0-72-generic提示
获取精确的内核版本(如
5.15.0-72-generic)是评估本地提权风险的重要一步。安全研究人员会结合版本、发行版补丁状态和配置,在公开漏洞库中核对是否存在对应的脏管道(Dirty Pipe)或脏牛(Dirty Cow)等漏洞;版本号相同不代表一定可利用。

