Linux 基础不是为了背命令,而是为了在一台陌生机器上快速判断:我是谁,我在哪,我能读什么,我能执行什么,网络通不通,痕迹在哪里,下一步怎么验证。
如果你在学渗透测试,Linux 是绕不开的底座。Web 服务、CTF 靶机、VPS、Docker、Kali、日志、权限提升、内网横向,最后都会落回到一个命令行窗口里。
这篇文章不追求百科全书式覆盖,而是给你一条够实战、够复盘、够继续深入的路线。
学习目标
先把目标压小。
学完 Linux 基础,你应该能做到:
- 看懂目录结构,知道配置、日志、用户文件和服务文件大概在哪。
- 熟练移动、查看、复制、搜索文件。
- 理解用户、用户组、权限位、特殊权限和 sudo 的关系。
- 会查看进程、端口、网络连接和服务状态。
- 会用管道把多个小工具串起来处理文本。
- 能在靶机里做基础枚举,找到下一步突破口。
- 遇到报错时知道怎么查文档、看日志、做最小化验证。
渗透学习里的 Linux,不是“会用桌面系统”,而是“能在信息不完整的服务器里活下来”。
先建立地图
Linux 的目录不是随便摆的。先记住这些高频位置:
| 路径 | 作用 |
|---|---|
/ | 根目录,所有文件的起点 |
/home | 普通用户家目录 |
/root | root 用户家目录 |
/etc | 系统和服务配置 |
/var | 可变数据,常见日志、缓存、Web 数据 |
/var/log | 日志目录 |
/tmp | 临时目录,常用于测试写入 |
/opt | 第三方软件 |
/usr/bin | 常用程序 |
/bin | 基础命令 |
/sbin | 系统管理命令 |
/proc | 内核运行时信息,进程和系统状态 |
/dev | 设备文件 |
拿到 shell 后,先问三个问题:
whoami
pwd
ls -la
这三个命令分别回答:
- 当前用户是谁。
- 当前目录在哪里。
- 当前目录里有什么,以及权限如何。
不要小看这一步。很多时候,提权线索就藏在当前目录、隐藏文件、错误权限或某个奇怪脚本里。
文件和目录操作
最基础的一组命令:
pwd
ls -la
cd /path/to/dir
mkdir notes
touch note.txt
cp a.txt b.txt
mv old.txt new.txt
rm file.txt
rm -r dir
建议你养成两个习惯:
- 用
ls -la,不要只用ls。隐藏文件经常有价值。 - 删除前先确认路径。
rm -rf不是勇敢,是危险。
查看文件常用:
cat file.txt
less file.txt
head -n 20 file.txt
tail -n 50 file.txt
tail -f /var/log/nginx/access.log
less 适合看长文件,tail -f 适合盯日志变化。比如你在测试一个 Web 请求,就可以一边发请求,一边看访问日志。
搜索是核心能力
Linux 里真正拉开差距的不是记住多少命令,而是搜索能力。
找文件:
find / -name "flag*" 2>/dev/null
find / -type f -name "*.conf" 2>/dev/null
find /var/www -type f
找内容:
grep -R "password" /etc 2>/dev/null
grep -R "DB_PASSWORD" /var/www 2>/dev/null
grep -n "root" /etc/passwd
常见技巧:
find / -perm -4000 -type f 2>/dev/null
find / -writable -type d 2>/dev/null
find / -user root -perm -u=s -type f 2>/dev/null
这些命令分别在找:
- SUID 文件。
- 当前用户可写目录。
- root 拥有且带 SUID 的可执行文件。
这是靶机和提权枚举里非常高频的动作。
权限模型
看一行权限:
-rwxr-xr-- 1 root www-data 1234 Jun 10 10:00 app.sh
拆开看:
- 第一位:文件类型,
-是普通文件,d是目录,l是链接。 - 后面九位:拥有者、用户组、其他人的权限。
r:读。w:写。x:执行。
数字权限也要熟:
| 数字 | 权限 |
|---|---|
| 4 | read |
| 2 | write |
| 1 | execute |
| 7 | rwx |
| 6 | rw- |
| 5 | r-x |
比如:
chmod 755 script.sh
chmod 600 id_rsa
chown root:root file
渗透里常见的权限问题:
- 私钥权限太开放,SSH 拒绝使用。
- Web 目录可写,可以落 WebShell。
- 脚本被 root 定时执行,但普通用户可写。
- SUID 程序调用了可控环境变量或相对路径命令。
权限不是抽象知识,它直接决定你能不能读、能不能写、能不能执行、能不能提权。
用户和身份
查看当前身份:
id
whoami
groups
查看系统用户:
cat /etc/passwd
cat /etc/group
/etc/passwd 不是密码文件,它记录用户信息。真正的密码哈希一般在 /etc/shadow,普通用户通常不能读。
重点关注:
- 当前用户属于哪些组。
- 是否在
sudo、docker、lxd、adm等敏感组里。 - 是否有异常用户。
- 用户家目录里有没有 SSH key、历史命令、配置文件。
查看 sudo 权限:
sudo -l
如果某个命令可以免密 sudo,第一反应是查它能不能逃逸:
man command
command --help
也可以查 GTFOBins。不要死记 payload,要理解这个命令为什么能读文件、写文件、执行 shell。
进程、服务和端口
查看进程:
ps aux
ps aux | grep nginx
top
查看端口:
ss -tulpen
ss -tunap
查看服务:
systemctl status nginx
systemctl list-units --type=service --state=running
如果没有 systemd,可能要看:
service --status-all
渗透里要关心:
- 哪些服务在跑。
- 哪些端口只监听
127.0.0.1。 - 进程由哪个用户启动。
- 命令行参数里有没有密码、token、配置路径。
比如:
ps aux | grep -i password
ss -tulpen | grep 127.0.0.1
本地端口常常意味着:外部扫不到,但拿到 shell 后可以内网访问或端口转发。
网络基础命令
查看 IP:
ip addr
ip route
测试连通:
ping -c 4 8.8.8.8
curl -I http://127.0.0.1
DNS:
cat /etc/resolv.conf
nslookup example.com
dig example.com
下载文件:
wget http://example.com/file
curl -O http://example.com/file
监听和传文件:
python3 -m http.server 8000
nc -lvnp 4444
这里要特别注意边界:只在你有授权的实验环境里使用这些能力。工具本身中性,但行为要有边界。
管道和文本处理
Linux 的美感在于小工具组合。
cat access.log | grep "POST" | sort | uniq -c | sort -nr
常见组件:
grep
awk
sed
sort
uniq
cut
tr
wc
xargs
几个实用例子:
# 统计访问最多的 IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
# 提取冒号分隔的第一列
cut -d ':' -f 1 /etc/passwd
# 批量对结果执行命令
find . -name "*.txt" | xargs grep "password"
# 看文件行数
wc -l file.txt
不要急着学复杂一行流。先能读懂,再能改,再能自己组合。
压缩、解压和文件类型
基础命令:
file target
strings target
tar -xf archive.tar
tar -czf archive.tar.gz dir
unzip file.zip
gzip -d file.gz
file 很有用。拿到未知文件时先看类型,不要靠后缀猜。
file suspicious
strings suspicious | head
CTF 和取证里经常会遇到伪装后缀、嵌套压缩、二进制里藏字符串。先判断,再处理。
日志和排错
常见日志:
/var/log/auth.log
/var/log/syslog
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/apache2/access.log
/var/log/apache2/error.log
常用方式:
tail -f /var/log/auth.log
journalctl -xe
journalctl -u nginx --since "1 hour ago"
排错思路:
- 先复现问题。
- 看命令报错。
- 看服务状态。
- 看日志。
- 缩小范围,只改一个变量。
比如 Web 服务 502:
systemctl status nginx
tail -n 80 /var/log/nginx/error.log
ss -tulpen
不要靠感觉猜,日志是系统写给你的复盘。
环境变量和 Shell
查看环境变量:
env
echo $PATH
echo $SHELL
PATH 很重要,它决定你输入命令时系统从哪里找可执行文件。
which python3
which bash
一些提权场景会利用 PATH 劫持,但你先要理解正常情况下 PATH 如何工作。
脚本第一行也值得注意:
#!/bin/bash
#!/usr/bin/env python3
它决定脚本用什么解释器执行。
渗透中的基础枚举清单
拿到 Linux shell 后,可以按这个顺序走一遍:
whoami
id
hostname
uname -a
pwd
ls -la
ip addr
ip route
ss -tulpen
ps aux
sudo -l
find / -perm -4000 -type f 2>/dev/null
find / -writable -type d 2>/dev/null
ls -la /home
ls -la /var/www
cat /etc/passwd
这不是万能脚本,只是起手式。你要学会根据结果继续追问:
- 这个用户为什么有这个组?
- 这个服务为什么用 root 跑?
- 这个目录为什么可写?
- 这个端口为什么只在本地开放?
- 这个脚本为什么由 root 定时执行?
渗透不是跑命令清单,而是根据回显不断缩小不确定性。
练习路线
建议这样练:
- 先用本机或虚拟机熟悉目录、文件、权限、用户和进程。
- 做 OverTheWire Bandit,练命令行和搜索。
- 用 Docker 跑几个 Linux 服务,观察配置、日志和端口。
- 做简单靶机时,每一步都写下命令、回显、判断依据。
- 复盘时把命令归类,不要只贴结果。
推荐资源:
我的记忆法
不要问“这个命令怎么背”,改问“这个命令解决什么问题”。
可以按任务记:
- 我想知道身份:
whoami、id - 我想知道位置:
pwd、ls -la - 我想找文件:
find - 我想找内容:
grep - 我想看网络:
ip、ss - 我想看进程:
ps - 我想看权限:
ls -la、stat - 我想看日志:
tail、journalctl - 我想组合结果:管道
|
命令会忘,但问题不会忘。只要你知道自己要问系统什么,命令可以随时查。
结尾
Linux 基础的核心不是炫技,而是稳定。
你要能在一台陌生机器上冷静地看目录、看权限、看进程、看网络、看日志,然后把零散线索连成判断。渗透学习的很多高级技巧,最终都要落到这些朴素动作上。
先把基础练成肌肉记忆,后面的漏洞利用、权限提升、内网渗透和应急排查才会有地基。