本文会先按Linux FHS 文件系统层次结构标准,详细讲解/根目录下所有核心子目录的作用、存放内容、运维注意点,再梳理生产级 Linux 安全预防措施(覆盖账户、权限、网络、文件等核心维度),最后给出3 种禁用 / 限制 rm -rf 的实操方法(可按需配置),所有操作均能直接在服务器执行。
一、Linux / 根目录下所有核心目录详解
Linux 的目录是单根树形结构,所有文件 / 目录都从/(根目录)衍生,遵循 FHS 标准(文件系统层次结构标准),分为系统核心目录、可变数据目录、用户 / 应用目录、设备 / 临时目录四大类。
所有目录的默认所有者均为 root,普通用户无修改权限,以下为 CentOS/Ubuntu 通用目录结构。
/etc/passwd:用户账户信息 /etc/shadow:用户密码(加密) /etc/group:用户组信息 /etc/fstab:文件系统挂载表 /etc/hosts:主机名映射 /etc/ssh/sshd_config:SSH服务配置 /etc/crontab:定时任务配置 | |||
| /usr/local | |||
| 生产环境核心监控目录 | |||
/root | |||
| |||
内核文件( | |||
|
核心目录运维总结
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/tcpsudo 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、日志监控,日志是服务器的黑匣子,核心是开启全量日志审计、监控日志变化、异地备份日志,防止黑客篡改 / 删除日志。

# 配置日志轮转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/
本站文章除注明[转载|引用|原文]出处外,均为本站原生内容,转载前请注明出处