chattr(Change Attribute)是Linux中用于修改文件系统扩展属性的命令,可以实现比普通文件权限更高级的保护。
基本语法
# 设置属性chattr +属性 文件名# 移除属性chattr -属性 文件名# 查看属性lsattr 文件名
常用加锁属性
1. 不可修改 (i - immutable)
# 加锁:文件完全不可修改、删除、重命名、创建链接sudo chattr +i filename.txt# 解锁sudo chattr -i filename.txt# 查看状态lsattr filename.txt
2. 只能追加 (a - append only)
# 加锁:只能追加内容,不能修改现有内容或删除sudo chattr +a logfile.log# 解锁sudo chattr -a logfile.log# 测试追加(可以)echo "new log entry" >> logfile.log# 测试修改(失败)echo "modify" > logfile.log # 权限被拒绝
3. 同步写入 (S - synchronous updates)
# 数据立即同步到磁盘,而不是先写入缓存sudo chattr +S important.db
4. 不可删除 (d - no dump)
# 使用dump备份时跳过此文件sudo chattr +d large_backup.tar
5. 安全删除 (s - secure deletion)
# 删除时用0覆盖文件内容(确保数据不可恢复)sudo chattr +s secret.txt
6. 压缩存储 (c - compressed)
# 文件自动压缩存储sudo chattr +c largefile.txt
实用场景示例
场景1:保护系统关键文件
# 保护passwd文件防止被篡改sudo chattr +i /etc/passwdsudo chattr +i /etc/shadowsudo chattr +i /etc/group# 保护ssh密钥sudo chattr +i /etc/ssh/ssh_host_*sudo chattr +i /root/.ssh/authorized_keys# 保护crontabsudo chattr +i /etc/crontabsudo chattr +i /var/spool/cron/root
场景2:保护网站文件
# 保护网站配置文件sudo chattr +i /etc/httpd/conf/httpd.confsudo chattr +i /etc/nginx/nginx.conf# 保护网页文件(注意:可能会影响网站更新)sudo chattr +i /var/www/html/index.phpsudo chattr +i /var/www/html/.htaccess
场景3:保护日志文件
# 防止日志被删除或篡改sudo chattr +a /var/log/auth.logsudo chattr +a /var/log/syslogsudo chattr +a /var/log/secure
场景4:保护脚本文件
# 防止脚本被意外修改sudo chattr +i /usr/local/bin/backup_script.shsudo chattr +i /etc/init.d/myservice# 如果脚本需要定期更新,使用cron解锁-更新-加锁cat > /usr/local/bin/update_script.sh << 'EOF'#!/bin/bash# 解锁脚本chattr -i /usr/local/bin/my_script.sh# 更新脚本wget -O /usr/local/bin/my_script.sh http://update-server/script.sh# 重新加锁chattr +i /usr/local/bin/my_script.shEOF
最佳实践建议
最小化原则:只锁定必要的文件
记录文档:记录哪些文件被锁定及原因
定期检查:定期使用 lsattr 检查属性
备份解锁:备份脚本包含临时解锁逻辑
分层保护:结合文件权限、SELinux、chattr
测试环境:在生产环境前先在测试环境验证