跳转至

HackTheBox Academy — Linux Fundamentals 完整笔记

课程共 30 节,分 7 大部分,无前置要求。 配套环境:Pwnbox(ParrotOS)或本地 Kali/Parrot。


目录

  1. Linux 结构
  2. Linux 发行版
  3. Shell 介绍
  4. 提示符
  5. 获取帮助
  6. 系统信息
  7. 导航
  8. 文件与目录操作
  9. 编辑文件
  10. 查找文件
  11. 文件描述符与重定向
  12. 过滤内容
  13. 正则表达式
  14. 用户管理
  15. 权限管理
  16. 服务与进程管理
  17. 任务计划
  18. 网络服务
  19. Web 服务
  20. 备份与恢复
  21. 文件系统管理
  22. 容器化
  23. 网络配置
  24. 远程桌面协议
  25. Linux 安全
  26. 防火墙配置
  27. 系统日志与监控
  28. Solaris 对比
  29. 快捷键

1. Linux 结构

设计哲学(5 原则)

  1. 一切皆文件(硬件、配置、设备均以文件形式访问)
  2. 程序小而专一
  3. 程序可通过管道组合完成复杂任务
  4. 避免强制交互界面,优先 CLI
  5. 配置数据以纯文本存储(如 /etc/passwd

系统组件

组件 说明
Bootloader 引导加载程序(如 GRUB)
Kernel 管理 CPU、内存、I/O
Daemons 后台服务(名称以 d 结尾:sshd、systemd)
Shell 用户与内核间的 CLI 接口(bash、zsh、fish)
图形服务器 X-server 子系统
窗口管理器 GUI 环境(GNOME、KDE、MATE)

架构层次(从底到顶)

硬件(RAM、CPU、存储)
内核(进程调度、内存管理、虚拟化硬件)
Shell(接收命令,传递给内核)
系统工具(暴露 OS 功能给用户)

文件系统层次标准(FHS)

路径 用途
/ 根文件系统
/bin 基本用户命令(ls、cp、mv)
/boot 引导文件、内核、initrd
/dev 设备文件
/etc 系统级配置文件(纯文本)
/home 用户主目录
/lib /bin/sbin 的共享库
/media 可移动介质挂载点
/mnt 临时手动挂载点
/opt 第三方软件包
/root root 用户主目录
/sbin 系统管理命令(fdisk、fsck)
/tmp 临时文件,重启后清除
/usr 多用户工具和应用
/var 可变数据:日志(/var/log)、邮件、数据库
/proc 暴露内核/进程信息的虚拟文件系统

2. Linux 发行版

通用发行版

发行版 特点
Ubuntu Debian 系,用户友好,应用广泛
Fedora Red Hat 赞助,前沿软件包
CentOS / RHEL 企业级,稳定优先
Debian 高度稳定,使用 apt,长期支持

安全专用发行版

发行版 特点
Kali Linux 渗透测试首选,工具最全
ParrotOS 安全 + 隐私,HTB Pwnbox 使用此系统
BlackArch Arch 系,工具仓库庞大
BackBox Ubuntu 系,安全导向

3. Shell 介绍

  • Shell 是用户与内核之间的文本 I/O 接口
  • 终端模拟器提供 Shell 访问(GNOME Terminal、XTERM 等)
  • HTB 主要使用 Bash(Bourne Again Shell)
  • tmux 终端复用器:支持分屏、会话持久化

区别:Terminal = 窗口;Shell = 窗口里运行的程序


4. 提示符

Bash 提示符结构

<用户名>@<主机名>[<当前目录>]$
- $ = 普通用户 - # = root 用户

PS1 特殊字符

字符 含义
\u 当前用户名
\h 主机名(短)
\H 完整主机名(FQDN)
\w 完整当前路径
\W 当前目录名(仅基名)
\d 日期
\t 时间(24小时)
\$ 普通用户显示 $,root 显示 #
# 自定义 PS1(写入 ~/.bashrc)
export PS1="\u@\h:\w\$ "

5. 获取帮助

命令 示例 说明
man <工具> man ls 打开命令手册页
<工具> --help ls --help 简短帮助
apropos <关键词> apropos chmod 搜索手册页描述
whatis <工具> whatis grep 单行命令描述
info <工具> info coreutils GNU info 文档

推荐网站:explainshell.com — 粘贴任意命令,逐一解释每个参数


6. 系统信息

命令 说明
whoami 当前用户名
id UID、GID 及所属组
hostname 主机名;-I 显示所有 IP
uname -a 完整系统信息(内核、主机名、架构、日期)
uname -r 仅内核版本
uname -m 硬件架构(如 x86_64)
pwd 当前工作目录
ip a 所有网络接口信息
ss -tunlp 监听中的端口及对应进程
ps aux 所有运行中的进程
env 打印所有环境变量
lsblk 列出块设备(磁盘、分区)
lsusb 列出 USB 设备
lspci 列出 PCI 设备
cat /etc/os-release OS 名称和版本详情

7. 导航

命令 说明
pwd 显示当前目录
ls 列出目录内容
ls -l 详细列表(权限、所有者、大小、日期)
ls -a 显示隐藏文件(. 开头)
ls -la 详细列表 + 隐藏文件
ls -lt 按修改时间排序(最新在前)
ls -i 显示 inode 编号
cd <目录> 切换目录
cd .. 上一级目录
cd - 返回上一个目录
cd ~ 回到主目录

8. 文件与目录操作

命令 说明
touch <文件> 创建空文件或更新时间戳
mkdir <目录> 创建目录
mkdir -p a/b/c 递归创建多级目录
cp <源> <目标> 复制文件
cp -r <源> <目标> 递归复制目录
mv <源> <目标> 移动或重命名
rm <文件> 删除文件
rm -r <目录> 递归删除目录
rm -rf <目录> 强制删除,无提示(谨慎使用)
cat <文件> 显示文件内容
cat > <文件> 写入文件(覆盖)
cat >> <文件> 追加写入文件

9. 编辑文件

Nano(简单易用)

快捷键 操作
Ctrl+O 保存
Ctrl+X 退出
Ctrl+K 剪切行
Ctrl+U 粘贴行
Ctrl+W 搜索

Vim(模式编辑器)

模式 进入方式 用途
Normal Esc 导航、发出命令
Insert i(光标前)、a(光标后)、o(新行) 输入/编辑文本
Visual v 选择文本
Command : 保存、退出、搜索、替换

常用 Vim 命令:

命令 操作
:w 保存
:q 退出
:wq / :x 保存并退出
:q! 不保存强制退出
dd 删除(剪切)当前行
yy 复制当前行
p 粘贴
u 撤销
Ctrl+R 重做
/pattern 向前搜索
n / N 下一个 / 上一个匹配
:%s/旧/新/g 全局替换
gg / G 跳到首行 / 末行

10. 查找文件

命令 说明
which <命令> 显示可执行文件的完整路径
locate <名称> 快速数据库搜索(需先运行 updatedb
find <路径> [选项] 强大的文件搜索,支持多种过滤器

find 常用参数

参数 示例 说明
-type f 仅文件
-type d 仅目录
-name -name "*.conf" 按文件名过滤(区分大小写)
-iname -iname "*.CONF" 不区分大小写
-user -user root 指定所有者
-size -size +25k 大于 25KB
-perm -perm /4000 查找设置了 SUID 的文件
-exec -exec ls -la {} \; 对每个结果执行命令
2>/dev/null 忽略权限拒绝错误
# 示例:查找 root 拥有的、大于 25KB 的、2020-03-03 后修改的 .conf 文件
find / -type f -name "*.conf" -user root -size +25k -newermt 2020-03-03 2>/dev/null

11. 文件描述符与重定向

标准文件描述符

FD 名称 默认
0 stdin 键盘输入
1 stdout 终端(正常输出)
2 stderr 终端(错误输出)

重定向操作符

操作符 说明
> 重定向 stdout 到文件(覆盖)
>> 重定向 stdout 到文件(追加)
2> 重定向 stderr 到文件
2>/dev/null 丢弃所有错误
2>&1 将 stderr 合并到 stdout
< 从文件读取到 stdin
\| 管道:左侧 stdout 传给右侧 stdin
cat /etc/passwd > output.txt          # 保存 stdout
find / -type f 2>/dev/null            # 忽略错误
cat /etc/passwd | grep root           # 管道过滤
command > out.txt 2>&1                # 同时重定向

12. 过滤内容

命令 说明
cat 打印整个文件
more 分页查看(仅向前,q 退出)
less 分页查看(可前后翻,q 退出)
head 显示前 10 行
head -n 20 显示前 20 行
tail 显示后 10 行
tail -f 实时跟踪文件(适合看日志)
grep "pattern" 过滤匹配行
grep -v "pattern" 反向匹配(排除匹配行)
grep -i "pattern" 不区分大小写
grep -r "pattern" /dir 递归搜索目录
grep -c "pattern" 统计匹配行数
sort 字母排序
sort -u 排序并去重
sort -n 数值排序
uniq 去除相邻重复行(配合 sort 使用)
cut -d":" -f1 : 为分隔符取第 1 列
tr 'a-z' 'A-Z' 字符转换(小写转大写)
tr -d ':' 删除指定字符
wc -l 统计行数
wc -w 统计单词数
column -t 格式化为对齐表格
awk '{print $1}' 打印每行第 1 个字段
awk -F":" '{print $1}' : 为分隔符
sed 's/旧/新/g' 全局字符串替换
sed '/pattern/d' 删除匹配行
# 典型管道示例
cat /etc/passwd | grep -v "#" | cut -d":" -f1 | sort -u

13. 正则表达式

模式 含义
. 任意单个字符
* 前面字符出现 0 次或多次
+ 前面字符出现 1 次或多次
? 前面字符出现 0 次或 1 次
^ 行首
$ 行尾
[abc] a、b 或 c 之一
[^abc] 非 a、b、c
[a-z] 任意小写字母
\d 数字
\w 字母、数字、下划线
\s 空白字符
{n,m} 重复 n 到 m 次
\| 或(OR)
grep -E "^root" /etc/passwd              # 以 root 开头的行
grep -E "[0-9]{3}" file.txt              # 含 3 位以上连续数字
grep -E "(error|fail)" /var/log/syslog   # 含 error 或 fail

14. 用户管理

命令 说明
whoami 当前用户
id UID、GID、所属组
useradd -m <用户> 创建用户并创建主目录
useradd -s /bin/bash <用户> 指定登录 Shell
passwd <用户> 设置/修改密码
usermod -aG sudo <用户> 将用户加入 sudo 组
usermod -L <用户> 锁定账户
usermod -U <用户> 解锁账户
userdel -r <用户> 删除用户及其主目录
su - <用户> 切换用户(完整登录环境)
sudo <命令> 以 root 权限运行命令
sudo -l 列出当前用户可执行的 sudo 命令
visudo 安全编辑 /etc/sudoers

关键文件

文件 内容
/etc/passwd 用户账户信息(用户名、UID、GID、主目录、Shell)
/etc/shadow 哈希密码(仅 root 可读)
/etc/group 组定义
/etc/sudoers sudo 权限配置

15. 权限管理

权限结构

每个文件/目录对三类对象设置权限: - 所有者(u) - 所属组(g) - 其他人(o)

符号 数值 对文件的含义 对目录的含义
r 4 读取文件内容 列出目录内容
w 2 修改文件 创建/删除文件
x 1 执行文件 进入目录
- 0 无权限 无权限
-rwxr-xr--  1  user  group  size  date  filename
│└──┘└──┘└──┘
│  │    │   └── 其他人权限 (r--)
│  │    └────── 所属组权限 (r-x)
│  └─────────── 所有者权限 (rwx)
└────────────── 文件类型(- 文件,d 目录,l 软链接)

chmod

# 符号方式
chmod u+x file          # 所有者添加执行权限
chmod g-w file          # 所属组移除写权限
chmod a+r file          # 所有人添加读权限

# 八进制方式(最常用)
chmod 755 file          # rwxr-xr-x
chmod 644 file          # rw-r--r--
chmod 600 file          # rw------- (私钥文件标准权限)

chown

chown user file             # 修改所有者
chown user:group file       # 同时修改所有者和组
chown -R user:group /dir    # 递归修改

特殊权限位

权限位 名称 八进制 对文件的作用 对目录的作用
SUID Set User ID 4000 以文件所有者身份运行 无效果
SGID Set Group ID 2000 以文件所属组身份运行 新文件继承目录组
Sticky 粘滞位 1000 基本无用 只有文件所有者可删除自己的文件
chmod u+s file          # 设置 SUID
chmod g+s dir           # 设置 SGID
chmod +t dir            # 设置 Sticky
chmod 4755 file         # SUID + rwxr-xr-x
chmod 1777 /tmp         # Sticky + 全权限(/tmp 的标准权限)

安全注意:SUID 二进制文件是经典的提权向量

find / -perm /4000 2>/dev/null   # 查找所有 SUID 文件
find / -perm /2000 2>/dev/null   # 查找所有 SGID 文件


16. 服务与进程管理

Systemd 服务管理

命令 说明
systemctl start <服务> 启动服务
systemctl stop <服务> 停止服务
systemctl restart <服务> 重启服务
systemctl enable <服务> 开机自启
systemctl disable <服务> 禁止开机自启
systemctl status <服务> 查看服务状态及近期日志
systemctl list-units --type=service 列出所有活跃服务
journalctl -u <服务> 查看服务日志
journalctl -u <服务> --no-pager 不分页查看日志

进程管理

命令 说明
ps aux 显示所有进程详情
top 实时进程查看器
htop 增强版实时进程查看器
kill <PID> 发送 SIGTERM(15)优雅终止
kill -9 <PID> 发送 SIGKILL 强制终止
killall <名称> 按名称终止所有匹配进程

进程信号

信号 数值 含义
SIGHUP 1 挂起 / 重载配置
SIGINT 2 中断(Ctrl+C)
SIGKILL 9 强制终止(不可捕获)
SIGTERM 15 优雅终止(默认)
SIGSTOP 19 暂停进程

前后台控制

命令 说明
command & 后台运行
Ctrl+Z 挂起当前前台进程
bg 让挂起的进程在后台继续
fg 将后台进程调到前台
jobs 列出后台/挂起任务

命令链接操作符

操作符 行为
; 顺序执行,不管上一条是否成功
&& 上一条成功(exit 0)才执行下一条
\|\| 上一条失败才执行下一条
\| 管道:左侧输出传给右侧输入

17. 任务计划

Cron 语法

* * * * *  用户  命令
│ │ │ │ └── 星期几(0-7,0 和 7 均为星期日)
│ │ │ └──── 月份(1-12)
│ │ └────── 日(1-31)
│ └──────── 小时(0-23)
└────────── 分钟(0-59)
# 每小时整点执行
0 * * * *  root  /script.sh

# 每 15 分钟执行
*/15 * * * *  user  /backup.sh

# 每天凌晨 2 点执行
0 2 * * *  root  /nightly.sh

# 每周日凌晨 2 点执行
0 2 * * 0  root  /weekly.sh

# 开机时执行
@reboot  root  /startup.sh

Cron 管理命令

命令 说明
crontab -e 编辑当前用户的 crontab
crontab -l 列出当前用户的 crontab
crontab -r 删除当前用户的 crontab

18. 网络服务

SSH

ssh user@host                          # 连接主机
ssh -p 2222 user@host                  # 指定端口
ssh -i keyfile user@host               # 使用指定私钥
ssh -L 8080:target:80 user@jump        # 本地端口转发

关键文件: - ~/.ssh/id_rsa — 私钥 - ~/.ssh/id_rsa.pub — 公钥 - ~/.ssh/authorized_keys — 授权的公钥列表 - /etc/ssh/sshd_config — SSH 服务配置


19. Web 服务

快速启动 Web 服务器

# Python(最快,内置)
python3 -m http.server 8080

# PHP
php -S 127.0.0.1:8080

# Node.js
http-server -p 8080

文件下载工具

工具 常用示例 说明
curl curl https://site.com 支持多协议
curl -s 静默模式(无进度条)
curl -O 以原文件名保存
curl -I 仅获取响应头
wget wget https://site.com/file 下载文件
wget -q 静默模式
wget -r 递归下载

20. 备份与恢复

工具 示例 说明
rsync -av src/ dst/ 同步文件/目录,仅传输变化部分
rsync -avz -e ssh src/ user@host:/dst/ 通过 SSH 同步
rsync --delete 删除目标中源没有的文件
tar -czvf archive.tar.gz /dir 创建压缩归档
tar -xzvf archive.tar.gz 解压归档
tar -tzvf archive.tar.gz 列出归档内容
dd if=/dev/sda of=/dev/sdb 磁盘克隆(原始拷贝)

21. 文件系统管理

命令 说明
fdisk -l 列出所有磁盘和分区
lsblk 树状显示块设备
df -h 磁盘空间使用(人类可读格式)
du -sh /dir 目录磁盘占用
mount /dev/sdb1 /mnt/point 挂载文件系统
umount /mnt/point 卸载文件系统
mkfs.ext4 /dev/sdb1 格式化为 ext4
fsck /dev/sdb1 检查/修复文件系统
blkid 显示 UUID 和文件系统类型

/etc/fstab — 持久挂载配置:

UUID=xxx  /mnt/point  ext4  defaults  0  2


22. 容器化

Docker 常用命令

命令 说明
docker pull ubuntu 拉取镜像
docker images 列出本地镜像
docker run -it ubuntu bash 交互式运行容器
docker run -d -p 8080:80 nginx 后台运行,映射端口
docker ps 列出运行中的容器
docker ps -a 列出所有容器(含已停止)
docker stop <id> 停止容器
docker rm <id> 删除容器
docker build -t myimage . 从 Dockerfile 构建镜像
docker exec -it <id> bash 进入运行中的容器

关键概念:容器共享宿主机内核(不同于虚拟机);数据默认不持久化,需使用 Volume


23. 网络配置

ip addr add 192.168.1.100/24 dev eth0    # 设置 IP
ip link set eth0 up                       # 启用接口
ip route add default via 192.168.1.1     # 添加默认路由
命令 说明
ip a 显示所有接口和 IP
ip r 显示路由表
ping <主机> 测试连通性
traceroute <主机> 追踪网络路径
dig <主机> 详细 DNS 查询
nslookup <主机> DNS 解析

关键文件: - /etc/resolv.conf — DNS 服务器配置 - /etc/hosts — 本地主机名到 IP 映射 - /etc/nsswitch.conf — 名称解析顺序

网络排查流程: pingtraceroutedigss


24. 远程桌面协议

VNC(端口 5900+)

vncserver :1                    # 启动 VNC(显示器 1)
vncviewer host:5901             # 连接 VNC

RDP(端口 3389)

xfreerdp /v:host /u:user /p:password       # 连接 RDP 服务器
xfreerdp /v:host /u:user /dynamic-resolution +clipboard

X11 转发(通过 SSH)

ssh -X user@host        # 启用 X11 转发
ssh -Y user@host        # 受信任的 X11 转发

25. Linux 安全

核心安全原则

  1. 保持系统和软件包更新
  2. 最小权限原则
  3. 禁用不必要的服务
  4. 使用强密码和基于密钥的 SSH 认证
  5. 配置防火墙规则
  6. 定期监控日志

SSH 加固(/etc/ssh/sshd_config

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 2222
AllowUsers htbuser

TCP Wrappers(基于主机的访问控制)

# /etc/hosts.allow
sshd : 192.168.1.0/24

# /etc/hosts.deny
sshd : ALL

SELinux vs AppArmor

功能 SELinux AppArmor
类型 强制访问控制(MAC) MAC
默认系统 RHEL/CentOS Ubuntu/Debian
配置方式 标签(所有对象) 基于路径的配置文件
状态检查 sestatus aa-status
模式 强制/宽容/禁用 强制/告警/禁用

fail2ban(防暴力破解)

apt install fail2ban
systemctl enable fail2ban
fail2ban-client status              # 查看所有 jail
fail2ban-client status sshd         # 查看 SSH jail 状态

26. 防火墙配置

iptables 表与链

表类型: | 表 | 用途 | |----|------| | filter | 默认;控制包过滤(INPUT、OUTPUT、FORWARD) | | nat | 网络地址转换(PREROUTING、POSTROUTING) | | mangle | 数据包修改/标记 |

链: | 链 | 流量 | |----|------| | INPUT | 发往本机的数据包 | | OUTPUT | 从本机发出的数据包 | | FORWARD | 经过本机转发的数据包 |

目标/动作: - ACCEPT — 允许 - DROP — 静默丢弃 - REJECT — 丢弃并通知发送方 - LOG — 记录到 syslog

iptables -L -v -n                                    # 列出所有规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT        # 允许 SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT        # 允许 HTTP
iptables -A INPUT -j DROP                             # 拒绝其余所有入站
iptables -I INPUT 1 -i lo -j ACCEPT                  # 允许回环接口
iptables-save > /etc/iptables/rules.v4               # 持久化规则

ufw(简单防火墙)

ufw enable
ufw allow 22/tcp
ufw deny 23
ufw status verbose

27. 系统日志与监控

关键日志文件

日志文件 内容
/var/log/syslog 通用系统消息
/var/log/auth.log 认证事件(登录、sudo、SSH)
/var/log/kern.log 内核消息
/var/log/dpkg.log 软件包安装/删除历史
/var/log/apache2/access.log Apache 访问日志
/var/log/apache2/error.log Apache 错误日志
/var/log/wtmp 登录记录(用 last 读取)
/var/log/btmp 失败登录记录(用 lastb 读取)
tail -f /var/log/auth.log             # 实时监控认证事件
grep "Failed" /var/log/auth.log       # 查找失败登录
journalctl -xe                        # systemd 日志(含错误)
journalctl --since "1 hour ago"       # 最近一小时的日志
last                                  # 登录历史
lastb                                 # 失败登录历史

28. Solaris 对比

功能 Linux Solaris
包管理器 apt / yum / dnf pkgaddpkg(IPS)
默认文件系统 ext4、xfs ZFS
进程查看器 tophtop prstat
网络配置 ifconfigip ifconfigdladmipadm
服务管理 systemctl svcadm、SMF
进程追踪 strace truss、DTrace

29. 快捷键

Bash 键盘快捷键

快捷键 操作
Ctrl+A 移动光标到行首
Ctrl+E 移动光标到行尾
Alt+F 向前移动一个单词
Alt+B 向后移动一个单词
Ctrl+U 删除光标到行首的内容
Ctrl+K 删除光标到行尾的内容
Ctrl+W 删除光标前一个单词
Ctrl+Y 粘贴最近删除的内容
Ctrl+C 中断当前命令
Ctrl+Z 挂起当前进程
Ctrl+L 清屏(同 clear
Ctrl+D 注销 / 发送 EOF 信号
Ctrl+R 反向搜索历史命令
!! 重复上一条命令
!<n> 执行历史中第 n 条命令
Tab 自动补全命令或路径
Tab Tab 显示所有可能的补全

核心概念速查

概念 一句话总结
一切皆文件 配置、设备、管道均以文件形式访问
FHS 标准化目录结构 /bin/etc/var
文件权限 rwx × 3(所有者/组/其他)+ SUID/SGID/Sticky
文件描述符 stdin=0、stdout=1、stderr=2;用 ><\| 重定向
进程与信号 以 PID 标识;SIGTERM=15(优雅)、SIGKILL=9(强制)
Systemd 现代 init 系统;systemctl 管理服务和开机启动
Cron 时间调度器;* * * * * = 分/时/日/月/周
正则表达式 在 grep/sed/awk/vim 中广泛使用的模式匹配语言
SUID 以文件所有者身份运行 — 经典提权向量
Docker 利用内核命名空间+cgroups 实现隔离的容器技术
iptables 有状态防火墙;filter/nat/mangle 表;INPUT/OUTPUT/FORWARD 链
SSH 加固 禁用密码认证、禁止 root 登录、修改默认端口
AppArmor/SELinux POSIX 权限之上的强制访问控制(MAC)

参考来源:HTB Academy 官方课程、PortSwigger、GitHub 社区笔记