Linux采用单一目录树(Single Directory Hierarchy),一切皆文件。理解文件系统结构是Linux运维的基础,每个目录都有其特定用途。
/ ← 根目录,一切起点 ├── bin/ ← 基础命令(ls, cp, mv, cat) ├── sbin/ ← 系统管理命令(mount, fdisk, iptables) ├── boot/ ← 启动文件(内核vmlinuz, initramfs, GRUB) ├── dev/ ← 设备文件(/dev/sda, /dev/null, /dev/tty) ├── etc/ ← 系统配置文件(nginx.conf, sshd_config) ├── home/ ← 用户主目录(/home/devops/) ├── root/ ← root用户主目录 ├── lib/ ← 系统库文件(/lib/x86_64-linux-gnu/) ├── opt/ ← 第三方软件(/opt/google/chrome/) ├── proc/ ← 进程信息虚拟文件系统(/proc/cpuinfo) ├── sys/ ← 内核设备树虚拟文件系统 ├── tmp/ ← 临时文件(重启可能清空) ├── usr/ ← 用户程序 │ ├── bin/ ← 用户命令(python3, gcc, git) │ ├── lib/ ← 用户库 │ ├── local/ ← 本地编译安装 │ └── share/ ← 共享数据(man pages, icons) ├── var/ ← 可变数据 │ ├── log/ ← 系统日志 │ ├── lib/ ← 应用数据(MySQL, Docker) │ ├── cache/ ← 缓存 │ └── www/ ← Web根目录 └── mnt/ ← 临时挂载点
Linux权限基于UGO模型(User/Group/Other),每个文件有三组权限位:读(r=4)、写(w=2)、执行(x=1)。
-rwxr-xr-- 1 devops devops 4096 May 19 10:00 deploy.sh │├──┤├──┤├──┤ │ │ │ │ │ │ │ └── Other: r-- (4 = 只读) │ │ └────── Group: r-x (5 = 读+执行) │ └────────── User: rwx (7 = 读+写+执行) └───────────── 文件类型: -普通 d目录 l链接 权限八进制速查: 7 = rwx (4+2+1) 6 = rw- (4+2) 5 = r-x (4+1) 4 = r-- (4) 3 = -wx (2+1) 2 = -w- (2) 1 = --x (1) 0 = --- (0) 常用权限组合: 755 (rwxr-xr-x) → 可执行脚本/程序 644 (rw-r--r--) → 普通文件 600 (rw-------) → 私密文件(密钥) 700 (rwx------) → 私密目录(.ssh/)
除了基本rwx,Linux还有三个特殊权限位,在安全配置中非常重要:
chmod 4755 /usr/bin/passwdchmod 2775 /shared/chmod 1777 /tmp/当UGO模型不够用时(比如需要给特定用户单独授权),ACL提供了更精细的控制:
# 创建目录结构(DevOps项目标准布局)
mkdir -p /opt/devops-project/{src,config,logs,data,scripts}
tree /opt/devops-project
# /opt/devops-project
# ├── config
# ├── data
# ├── logs
# ├── scripts
# └── src
# 文件查找
find /etc -name "*.conf" -mtime -7 # 7天内修改的conf文件
find /var/log -size +100M # 大于100M的日志
find / -perm -4000 2>/dev/null # 查找SUID文件(安全审计!)
# 文件类型与编码
file /etc/passwd # ASCII text
file /usr/bin/ls # ELF 64-bit LSB executable
file deploy.tar.gz # gzip compressed data
# 软链接 vs 硬链接
ln -s /opt/app/current /opt/app/latest # 软链接(跨文件系统)
ln /var/log/app.log /backup/app.log # 硬链接(同文件系统)
# 查看磁盘使用
du -sh /var/* # 每个目录大小
df -hT # 文件系统使用率
lsblk # 块设备列表
# 基本权限设置
chmod 755 deploy.sh # rwxr-xr-x
chmod 644 config.yaml # rw-r--r--
chmod 600 ~/.ssh/id_rsa # rw------- (密钥文件必须)
chmod 700 ~/.ssh # rwx------
# 符号模式修改
chmod u+x script.sh # 给属主加执行权限
chmod g+w config/ # 给组加写权限
chmod o-r secrets.key # 去掉其他人的读权限
chmod a+r README.md # 所有人可读
# 递归修改权限(谨慎使用!)
chmod -R 755 /opt/app/bin/ # 所有目录和文件
# 推荐:分别设置目录和文件
find /opt/app -type d -exec chmod 755 {} \;
find /opt/app -type f -exec chmod 644 {} \;
# 属主和属组修改
chown devops:devops /opt/app/
chown -R www-data:www-data /var/www/html/
chgrp docker /var/run/docker.sock
# umask查看和设置
umask # 0022 → 新文件644,新目录755
umask 027 # 更安全:新文件640,新目录750
# 查看ACL
getfacl /opt/app/config.yaml
# user::rw-
# user:deploy:r-- ← 额外用户权限
# group::r--
# mask::rw-
# other::r--
# 设置ACL
setfacl -m u:deploy:rx /opt/app/scripts/ # 给deploy用户rx权限
setfacl -m g:devops:rw /opt/app/config/ # 给devops组rw权限
setfacl -m d:u:deploy:rx /opt/app/scripts/ # 默认ACL(新建文件继承)
# 删除ACL
setfacl -x u:deploy /opt/app/scripts/
setfacl -b /opt/app/config.yaml # 删除所有ACL
# 查看块设备
lsblk
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sda 8:0 0 100G 0 disk
# ├─sda1 8:1 0 1G 0 part /boot
# └─sda2 8:2 0 99G 0 part /
# 创建分区
fdisk /dev/sdb
# n → 新建分区 → p → 主分区 → 1 → 回车 → 回车 → w
# 格式化
mkfs.ext4 -L data /dev/sdb1
mkfs.xfs -L logs /dev/sdc1
# 挂载
mkdir -p /mnt/data
mount /dev/sdb1 /mnt/data
# 永久挂载(/etc/fstab)
echo 'LABEL=data /mnt/data ext4 defaults,noatime 0 2' >> /etc/fstab
mount -a # 验证fstab配置
# LVM逻辑卷管理(生产推荐)
pvcreate /dev/sdb1
vgcreate vg_data /dev/sdb1
lvcreate -L 50G -n lv_logs vg_data
mkfs.ext4 /dev/vg_data/lv_logs
#!/bin/bash
# 文件系统安全加固脚本
set -euo pipefail
echo "🔒 开始文件系统安全加固..."
# 1. 查找并报告SUID文件
echo "📋 SUID文件审计:"
find / -perm -4000 -type f 2>/dev/null | while read f; do
rpm -qf "$f" 2>/dev/null || dpkg -S "$f" 2>/dev/null || echo "未知包: $f"
done
# 2. 查找世界可写文件
echo "📋 世界可写文件审计:"
find /etc -perm -o+w -type f 2>/dev/null
# 3. 设置关键目录权限
chmod 700 /root
chmod 755 /etc /var /usr
chmod 600 /etc/shadow /etc/gshadow
# 4. 禁用不常用的SUID
chmod u-s /usr/bin/chsh /usr/bin/chfn 2>/dev/null || true
# 5. 设置不可变位(保护关键配置)
chattr +i /etc/passwd /etc/shadow # 慎用!需解锁时 chattr -i
echo "✅ 安全加固完成"
应用层 ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 文件服务 │ │ 数据库 │ │ 日志采集 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
VFS层 ┌─────▼─────────────▼─────────────▼──────┐
│ 虚拟文件系统 (VFS) │
└─────┬─────────────┬─────────────┬──────┘
│ │ │
文件系统 ┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ ext4 │ │ XFS │ │ tmpfs │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
块层 ┌────▼─────────────▼─────────────▼──────┐
│ 块I/O调度器 (mq-deadline) │
└─────┬─────────────┬─────────────┬──────┘
│ │ │
设备层 ┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ SSD │ │ HDD │ │ NVMe │
│ /dev/sda│ │ /dev/sdb│ │/dev/nvme│
└─────────┘ └─────────┘ └─────────┘
访问请求
│
▼
┌────────────────┐
│ 进程凭证检查 │
│ uid/gid/groups │
└───────┬────────┘
│
┌───────▼────────┐
│ DAC检查 │
│ UGO权限位匹配 │──── 匹配失败 ──→ 检查ACL
└───────┬────────┘ │
│ ▼
匹配成功 ACL规则匹配
│ ┌───┴───┐
│ 允许 拒绝
▼
┌───────────────┐
│ MAC检查 │
│ SELinux/AppArmor │
└───────┬───────┘
│
允许访问 ✅
# 1. 快速定位大文件
df -h # 查看哪个分区满
du -sh /* 2>/dev/null | sort -rh | head -10 # 找大目录
# 2. 查找被删除但未释放的文件(常见原因!)
lsof | grep deleted | sort -k7 -rn | head
# nginx 1234 root 5w REG 8,1 10737418240 /var/log/access.log (deleted)
# 解决:重启占用进程
systemctl reload nginx
# 3. 清理日志
journalctl --vacuum-size=100M # 清理systemd日志
find /var/log -name "*.gz" -mtime +30 -delete # 删除旧压缩日志
# 4. 清理包缓存
apt clean # Ubuntu
dnf clean all # CentOS
💡 防患未然:配置logrotate自动轮转日志,设置磁盘告警阈值80%
# 可能是SELinux/AppArmor阻断
# 检查SELinux状态
getenforce # Enforcing
ausearch -m avc -ts recent # 查看拒绝日志
# 临时设置为Permissive排查
sudo setenforce 0
# 查看文件安全上下文
ls -Z /var/www/html/index.html
# unconfined_u:object_r:httpd_sys_content_t:s0
# 修复上下文
restorecon -Rv /var/www/html/
# 或者是挂载选项问题
mount | grep noexec # 检查是否noexec挂载
# /dev/sdb1 on /mnt/data type ext4 (rw,noexec)
# 解决: mount -o remount,exec /mnt/data
# 现象:df -h有空间,但无法创建文件
df -i # 查看inode使用率
# /dev/sda1 1310720 1310720 0 100% /
# 找到大量小文件
find / -xdev -type f | cut -d "/" -f 1-3 | sort | uniq -c | sort -rn | head
# 1200000 /var/log/someapp
# 解决:清理小文件
find /var/log/someapp -type f -mtime +7 -delete
掌握Linux文件系统层级(FHS)、权限模型(UGO+ACL)、磁盘管理(LVM)、安全加固——这是安全运维的基础。