Linux目录结构及其作用

本文会先按Linux FHS 文件系统层次结构标准,详细讲解/根目录下所有核心子目录的作用、存放内容、运维注意点,再梳理生产级 Linux 安全预防措施(覆盖账户、权限、网络、文件等核心维度),最后给出3 种禁用 / 限制 rm -rf 的实操方法(可按需配置),所有操作均能直接在服务器执行。

一、Linux / 根目录下所有核心目录详解

Linux 的目录是单根树形结构,所有文件 / 目录都从/(根目录)衍生,遵循 FHS 标准(文件系统层次结构标准),分为系统核心目录、可变数据目录、用户 / 应用目录、设备 / 临时目录四大类。

所有目录的默认所有者均为 root,普通用户无修改权限,以下为 CentOS/Ubuntu 通用目录结构。

Linux / 根目录下所有核心目录详解
目录名
核心作用
存放内容
运维注意点
/
整个文件系统的起点
所有其他目录都挂载在此目录下
根目录应有严格权限,通常只有root可写
/bin
系统基础命令二进制文件
所有用户可执行的基础命令(ls、cd、cp、mv、rm、cat 等)
内置系统命令,禁止修改 / 删除,缺失会导致系统无法正常操作
/sbin
系统管理命令二进制文件
仅 root 可执行的运维命令(ifconfig、fdisk、mount、useradd 等)
系统管理核心,禁止随意操作,普通用户可通过sudo执行
/etc
系统所有配置文件主目录
系统级配置(ssh、防火墙yum/apt)、服务配置(Nginx/MySQL/PHP)、用户配置(passwd,group)

/etc/passwd:用户账户信息

/etc/shadow:用户密码(加密)

/etc/group:用户组信息

/etc/fstab:文件系统挂载表

/etc/hosts:主机名映射

/etc/ssh/sshd_config:SSH服务配置

/etc/crontab:定时任务配置

高频修改目录(如改 Nginx.conf、sshd_config),修改前必须备份,禁止 777 权限
/usr
系统用户应用程序主目录
1. /usr/bin:用户安装的命令(如 nginx、php)2. /usr/sbin:用户安装的管理命令3. /usr/local★:运维最常用,手动安装的软件(如编译安装 Nginx/MySQL)
4. /usr/share:帮助文档、字体、资源文件
5. /usr/lib:应用程序库文件
/usr/local
是自定义安装软件的默认目录,建议所有手动部署的服务都放在这里,便于管理
/var
系统可变数据主目录
随系统运行动态变化的文件,核心子目录:1. /var/log★:所有日志文件(系统日志、服务日志、应用日志)2. /var/lib:服务数据(MySQL 数据、yum 缓存、rpm 数据库)3. /var/run:服务 PID 文件(如 nginx.pid、mysql.pid)4. /var/tmp:临时文件(比 /tmp 更稳定,重启不清除)
5. /var/spool:队列数据(邮件、打印任务)
6./var/cache:应用程序缓存
生产环境核心监控目录
:/var/log 需监控磁盘占用(日志会撑满磁盘),/var/lib 需定期备份(服务核心数据)
/home
普通用户家目录
每个普通用户对应一个子目录(如用户 dev 对应 /home/dev),用户可在自己家目录随意操作
限制普通用户家目录权限为 700,禁止其他用户访问,禁止在 home 部署服务
/root
root 用户家目录
root 的所有操作文件、配置、脚本,相当于 root 的 /home
仅 root 可访问,禁止将服务部署在 /root(权限过高,存在安全风险),定期清理无用文件
/dev
系统设备文件目录
所有硬件设备的映射文件(硬盘 /dev/sda、网卡 /dev/eth0、终端 /dev/tty),Linux 中一切皆文件,设备通过此目录操作
由系统自动管理,禁止手动修改 / 删除,挂载磁盘时会用到(如/dev/sdb1)
/proc
系统进程/内核信息虚拟目录
内存中的虚拟文件,实时显示进程状态(/proc/PID)、内核参数(/proc/sys)、CPU / 内存信息(/proc/cpuinfo CPU信息 /proc/meminfo 内存信息 /proc/net/:网络信息
无需手动操作,top/ps等命令均读取此目录,重启后内容清空
/sys
系统硬件设备驱动虚拟目录
与硬件设备交互的内核接口,比 /proc 更细化,用于硬件管理 / 驱动配置
系统自动管理,禁止手动修改
/tmp
系统临时文件目录
所有用户可读写的临时文件,系统重启后自动清空,服务运行时的临时缓存会存在这里
禁止在 /tmp 存放重要文件,可设置磁盘配额,防止恶意程序占满磁盘
/mnt
系统临时挂载点目录
手动挂载磁盘 / U 盘 / 光驱的默认目录(如 mount /dev/sdb1 /mnt)
空目录,仅用于临时挂载,建议挂载后及时卸载
/media
系统自动挂载目录
Ubuntu 等桌面系统用于自动挂载 U 盘 / 光驱,服务器版 Linux 一般不用
服务器可忽略,无需配置
/opt
系统第三方软件目录
存放独立的第三方软件(如 Oracle、Docker),软件所有文件均在 opt 子目录下,便于卸载
服务器中可替代 /usr/local,建议统一软件安装目录(要么 /usr/local,要么 /opt)
/srv
系统服务数据目录
存放服务对外提供的静态数据(如网站静态资源、FTP 文件)
生产环境中一般不用,可将静态资源放在/var/www 或服务安装目录
/lost+found
系统磁盘修复目录
磁盘分区损坏(如突然断电)后,fsck 命令修复时的恢复文件会存放在这里
空目录,无需手动操作,若磁盘损坏可在此查找恢复文件
/boot
启动文件目录

内核文件(vmlinuz-*)初始RAM磁盘(initrd.img-*)引导加载器(grub/

设置为只读
/run
运行时数据
PID文件、socket文件等
内存文件系统,重启清空
/lib和/lib64
共享库文件(系统核心库)

/lib64存放64位库,/lib存放32位或64位库


核心目录运维总结

1.高频操作:/etc(改配置)、/usr/local(装软件)、/var/log(看日志)、/home(用户管理)、/mnt(临时挂载);

2.重点监控:/var(磁盘占用)、/etc(配置修改)、/tmp(临时文件);

3.严禁修改:/bin、/sbin、/dev、/proc、/sys;

4.安全禁忌:禁止在/root部署服务、禁止给/etc设 777 权限、禁止随意删除/var/lib的服务数据。

二、Linux 生产环境核心安全预防措施

Linux 的权限是用户 + 组 + 其他的三级管控,Linux 服务器的安全防护遵循最小权限、层层加固原则,覆盖账户安全、权限安全、文件安全、网络安全、日志安全、服务安全6 大核心维度。

二、Linux 生产环境核心安全预防措施

Linux 的权限是用户 + 组 + 其他的三级管控,Linux 服务器的安全防护遵循最小权限、层层加固原则,覆盖账户安全、权限安全、文件安全、网络安全、日志安全、服务安全 6 大核心维度

1、用户与权限管理,创建专用运维用户,仅赋予必要 sudo 权限。

# 最小权限原则sudo adduser username  # 创建新用户 (-m 自动创建家目录)sudo usermod -aG wheel username  # 添加到sudo组(CentOS)sudo usermod -aG sudo username   # 添加到sudo组(Ubuntu)sudo vim /etc/sudoers #(用visudo命令,禁止直接 vim),限制用户仅能执行指定命令(如仅允许重启 Nginx),避免全量 sudo 权限
# 定期检查无密码账户sudo awk -F: '($2 == "" ) {print $1}' /etc/shadow
# 安装密码策略工具yum install pam_cracklib        # CentOSapt install libpam-cracklib     # Ubuntu
# 配置密码策略(/etc/pam.d/system-auth)vim /etc/pam.d/system-auth     # 添加密码长度(至少 8 位)、包含大小写/数字/特殊字符、禁止近 3 次重复
# 检查UID为0的用户(除root外)sudo awk -F: '($3 == 0) {print $1}' /etc/passwd

2、SSH安全加固,禁用 root 用户远程 SSH 登录,最小化用户权限、防止密码破解。

# /etc/ssh/sshd_config 配置PermitRootLogin no              # 禁止root直接登录PasswordAuthentication no       # 禁用密码认证(使用密钥)MaxAuthTries 3                  # 最大尝试次数ClientAliveInterval 300         # 连接超时设置AllowUsers user1 user2          # 只允许特定用户登录systemctl restart sshd          #重启 SSH 服务(CentOS)service ssh restart             #重启 SSH 服务(Ubuntu)
# 修改默认端口Port 2222
# 禁止密码登录,强制使用 SSH 密钥登录ssh-keygen -t rsa               #(本地电脑执行,一路回车),# 生成~/.ssh/id_rsa(私钥,本地保存)和id_rsa.pub(公钥,上传服务器);# 上传公钥到服务器:ssh-copy-id dev@服务器IP,或手动将公钥内容写入服务器/home/dev/.ssh/authorized_keys;
# 私钥仅保存在本地。sudo chmod 700 /etc/ssh/ssh_host_rsa_key         # 私钥仅root可读sudo chmod 644 /etc/ssh/ssh_host_rsa_key.pub     # 公钥可读

3、防火墙配置,禁止所有入站端口,仅开放业务所需端口(如 80/443(web)、22(SSH,建议改端口)、3306(MySQL,禁止外网开放));

# CentOS使用firewalld(CentOS/RHEL)sudo firewall-cmd --permanent --add-service=ssh     #添加服务器所需端口sudo firewall-cmd --permanent --add-port=80/tcpsudo firewall-cmd --reload                          #重载生效
# Firewalld的panic模式(紧急关闭所有连接)sudo firewall-cmd --panic-on   # 立即阻止所有网络流量sudo firewall-cmd --panic-off  # 恢复正常
# 查找所有开机自启服务(CentOS)systemctl list-unit-files --type=service | grep enabledsystemctl list-enabled          #(Ubuntu)
# 禁止特定 IP 访问服务器,先在防火墙开放自定义端口,再修改 SSH 端口,避免修改后无法远程登录firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject' --permanent
#修改 SSH 默认 22 端口,避免端口扫描 /etc/ssh/sshd_configvim /etc/ssh/sshd_config       #将Port 22改为自定义端口(如 2222),重启 sshd
# Ubuntu使用ufw(Ubuntu)sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 22                                  #添加服务器所需端口sudo ufw allow 80/tcpsudo ufw allow 443/tcp
sudo ufw enable                                   #启用防火墙
# 安装 DDoS / 端口扫描防护工具,如fail2ban,配置 SSH 防护,默认 5 次密码错误拉黑 IP10 分钟,有效防止暴力破解

4、文件系统安全,禁止任何文件 / 目录设777权限(所有用户可读写执行,高危)防止误删 / 数据丢失,核心是备份 + 禁用高危命令。

# 关键目录权限设置sudo chmod 700 /root                    # 家目录默认权限,仅所有者可访问sudo chmod 755 /bin /sbin /usr/bin /usr/sbin    # 可执行脚本/命令默认权限,所有者读写执行,如 Nginx 启动脚本sudo chmod 644 /etc/passwd              # 配置文件默认权限,如/etc下所有配置sudo chmod 600 /etc/shadow
# 监控 / 限制 SUID/SGID 特殊权限# UID/SGID:让普通用户执行命令时拥有所有者权限(如 passwd 命令),易被黑客利用;find / -perm /4000 -o -perm /2000       #查找所有 SUID/SGID 文件chmod s-x 文件名                         #清楚不必要的文件 仅保留系统必要的 SUID/SGID 文件(如 passwd、su)
# 设置不可修改位(chattr) chattr -i 文件名(取消),lsattr 文件名(查看)sudo chattr +i /etc/passwd /etc/shadow  # 防止修改sudo chattr +a /var/log/messages        # 只能追加

# 本地打包备份# 创建一个包含日期时间戳的压缩备份包,排除临时文件和缓存BACKUP_DIR="/data/backups"TIMESTAMP=$(date +"%%Y%%m%%d_%%H%%M%%S")sudo tar -czpf "$BACKUP_DIR/full_backup_$TIMESTAMP.tar.gz" \    --exclude=/tmp \    --exclude=/proc \    --exclude=/sys \    --exclude=/dev \    --exclude=/var/cache \    --exclude=/var/tmp \    /etc /home /var/lib /usr/local
# 数据库导出备份# 将源目录同步到备份目录,保留所有属性,并创建删除文件的备份副本RSYNC_OPTS="-avh --delete --backup --backup-dir=/backup/old_files/$(date +%%Y%%m%%d)"sudo rsync $RSYNC_OPTS /etc/ /backup/etc/sudo rsync $RSYNC_OPTS /home/ /backup/home/
# 自动化定时备份,详细 crontab 示例# 编辑 root 用户的 crontabsudo crontab -e
# 每周日凌晨 3:00 同步重要目录到本地另一位置0 3 * * 0 /usr/bin/rsync -av --delete /etc /backup/ 2>&1 | logger -t rsync_backup
# 每天凌晨 1:00 备份 MySQL 数据库0 1 * * * /usr/bin/mysqldump -u root -p'YourSecurePassword' --all-databases | gzip > /data/backups/mysql_$(date +\%%Y\%%m\%%d).sql.gz 2>&1 | logger -t mysql_backup
# 每月1号凌晨4:00清理超过30天的旧备份0 4 1 * * find /data/backups -name "*.tar.gz" -mtime +30 -delete 2>&1 | logger -t cleanup_backup

5、SELinux/AppArmor,SELinux 是 Linux 的强制访问控制机制,生产环境不建议关闭,优先开启 + 白名单配置

# SELinux(CentOS/RHEL)sudo setenforce 1                    # 临时开启sudo vim /etc/selinux/config         # 永久配置
# AppArmor(Ubuntu)sudo aa-status                       # 查看状态sudo systemctl enable apparmor       # 开启并设为开机自启

6、日志监控,日志是服务器的黑匣子,核心是开启全量日志审计、监控日志变化、异地备份日志,防止黑客篡改 / 删除日志

Image_20260211174000.png
# 配置日志轮转sudo vim /etc/logrotate.conf
# 监控关键日志sudo tail -f /var/log/auth.log      # 认证日志sudo tail -f /var/log/secure        # CentOS认证日志sudo tail -f /var/log/syslog        # 系统日志
#启系统操作审计日志 ,编辑/etc/profilevim /etc/profile # 添加如下,记录所有用户的操作命令、登录时间、IPexport HISTTIMEFORMAT="%%Y-%%m-%%d %%H:%%M:%%S whoami : "
#开启审计服务(CentOS)配置审计规则,记录 /etc、/usr/local等核心目录的修改操作systemctl start auditdsystemctl enable auditd#监控核心日志文件 /var/log/secure(SSH 登录日志)、/var/log/messages(系统日志)、/var/log/nginx/access.log(web 访问日志)
#禁止日志文件被修改 / 删除,给核心日志添加chattr +a属性chattr +a /var/log/secure           #日志只能新增内容,无法被篡改 / 删除
# 安装日志分析工具sudo apt install logwatch           # Ubuntusudo yum install logwatch           # CentOS
# 配置sudo日志(默认开启)记录所有用户使用 sudo 执行的命令、时间、IP,便于追溯违规操作vim /etc/sudoers# 确保以下行存在Defaults logfile="/var/log/sudo.log"Defaults log_input, log_output  # 记录输入输出,更详细Defaults iolog_dir="/var/log/sudo-io"  # 输入输出日志存放目录
# 权限设置(禁止普通用户查看)sudo chmod 600 /var/log/sudo.logsudo chmod 700 /var/log/sudo-io
# 查看sudo日志(仅root可看)cat /var/log/sudo.log


#异地服务器备份(rsync 远程同步)#RSYNC_OPTS="-avh --delete --backup --backup-dir=/backup/old_files/$(date +%%Y%%m%%d)"#sudo rsync $RSYNC_OPTS /etc/ 远程用户 @远程 IP:/ 异地备份目录 /etc/sudo rsync $RSYNC_OPTS /var/lib/ 远程用户 @远程 IP:/ 异地备份目录 /var/lib/
#云备份(以阿里云 OSS 为例)#安装 OSS 客户端sudo yum install ossutil -y # CentOSsudo apt install ossutil -y # Ubuntu#配置 OSS 密钥(登录阿里云获取 AccessKey)ossutil config#上传备份文件到 OSSsudo ossutil cp /data/backups/*.tar.gz oss:// 你的 OSS 桶名 /backups/$(date +%% Y%% m%% d)/

7、入侵检测

# 方法1:邮件告警# 1. 配置邮件服务(以CentOS为例)sudo yum install postfix mailx -ysudo systemctl start postfix# 2. 修改登录脚本(所有用户登录触发)vim /etc/profile# 添加以下内容(xxxx替换为自己邮箱)echo "服务器登录提醒:$(date +"%%Y-%%m-%%d %%H:%%M:%%S"),登录用户:$USER,登录IP:$SSH_CLIENT,服务器IP:$(hostname -I)" | mail -s "Linux服务器登录告警" xxxx@email.com
# 使配置生效source /etc/profile
# 安装aide(文件完整性检查)sudo apt install aide               # Ubuntusudo aideinit                       # 初始化数据库sudo aide --check                   # 检查文件变更
# 使用fail2ban防止暴力破解sudo apt install fail2bansudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localsudo systemctl enable fail2ban

8、服务安全,定期更新系统内核 / 软件,修复安全漏洞,

# 注意:生产环境更新前必须先进行备份和测试,避免内核 / 软件更新导致服务兼容问题,建议在测试机验证后再更新生产机。# 禁用不必要的服务sudo systemctl list-unit-files --type=servicesudo systemctl disable telnet.socketsudo systemctl disable vsftpd
# 定期更新sudo apt update && sudo apt upgrade    # Ubuntusudo yum update                        # CentOS

9、内核安全参数

# /etc/sysctl.conf 配置net.ipv4.tcp_syncookies = 1            # 防止SYN洪水攻击net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0kernel.exec-shield = 1kernel.randomize_va_space = 2          # ASLR保护
sudo sysctl -p                         # 应用配置

10、ulimit 资源限制,(防服务崩溃、防挖矿占用全部资源),限制单个进程 / 用户的 CPU、内存、文件句柄等资源,避免挖矿进程、异常进程占满系统资源,导致服务崩溃。

# 临时配置(当前终端生效)ulimit -n 65535  # 限制单个进程最大文件句柄数(默认1024,不够用,需调大)ulimit -u 1000   # 限制单个用户最大进程数(防止恶意创建大量进程)ulimit -c 0      # 禁止生成core dump文件(避免占用磁盘空间)
# 永久配置(所有用户生效,重启也生效)vim /etc/security/limits.conf# 在文件末尾添加以下内容* soft nofile 65535* hard nofile 65535* soft nproc 1000* hard nproc 2000root soft nofile 65535root hard nofile 65535
# 验证配置ulimit -n  # 查看文件句柄数,显示65535即生效

三、Linux 禁用 / 限制 rm -rf 实操方法:

rm -rf 是 Linux最高危命令,无提示直接强制删除文件 / 目录,误执行(如rm -rf /rm -rf /*)会直接导致服务器系统崩溃、数据丢失。

方法一、使用别名覆盖

# 在~/.bashrc或/etc/profile.d/safe_rm.sh中添加,仅当前用户生效
alias rm='rm -i'                         # 删除前询问
alias rm='echo "Use trash-put instead"'          # 完全禁止
# 使配置生效source ~/.bashrc
# 对所有用户生效,在/etc/profile文件末尾
alias rm='rm -i'
# 使配置立即生效source /etc/profile
# 禁止执行 rm -rf / 根目录删除
# 直接禁止所有用户执行rm -rf /、rm -rf /*等根目录删除命令
# 编辑系统bash配置文件,所有用户都生效vim /etc/bashrc
# 在文件末尾添加以下防护脚本function rm() {    
    # 检测是否包含/、/*、/.*等根目录删除关键词    
    if [[ "$*" == */* || "$*" == *\/* || "$*" == */.* ]]; then
      echo -e "\033[31m错误:禁止执行rm -rf 根目录相关命令!\033[0m"
      return 1    
      fi    
       # 非根目录删除,执行rm -i交互式删除    
       command rm -i "$@"
}
# 使配置生效
source /etc/bashrc

方法二、trash-cli 回收站

# 安装trash-cli(CentOS/Ubuntu通用)sudo yum install trash-cli -y    # CentOS(需先开启epel源:yum install epel-release -y)sudo apt install trash-cli -y    # Ubuntu
# 核心用法(替换rm命令,贴合原有使用习惯)alias rm='trash-put'             # 将rm别名改为回收站删除,而非直接删除source ~/.bashrc                 # 当前用户生效# 所有用户生效(添加到/etc/profile末尾)echo "alias rm='trash-put'" >> /etc/profilesource /etc/profile
# 常用回收站命令(误删可恢复,核心)trash-list                       # 查看回收站所有文件/目录trash-restore                    # 恢复误删文件(按提示输入序号选择)trash-empty                      # 清空回收站(可加参数:trash-empty 7 清空7天前的文件)trash-rm /path/to/file           # 彻底删除回收站中指定文件(不推荐,优先restore)


本文最后更新时间 2026-05-27
文章链接地址:
https://yrajsh.cn/index.php/archives/67/
本站文章除注明[转载|引用|原文]出处外,均为本站原生内容,转载前请注明出处

文章附件
  • 暂无附件
希望可以帮助到你

留言