游客发表
去年秋天,统加一台跑了三年多的统加CentOS 7测试机被扫描出SSH弱口令,端口22直接暴露在公网,统加root允许密码登录,统加防火墙规则空空如也。统加攻击者凌晨两点进来,统加装了挖矿程序,统加CPU跑满整整一周才被发现。统加这件事让我重新审视Linux加固的统加优先级——很多默认配置压根不是为生产环境设计的。
先说账户和认证这块。统加root直接登录必须关掉,统加PermitRootLogin no写进/etc/ssh/sshd_config,统加然后用普通账户登录再su或sudo提权。统加密码登录也建议关,统加改走密钥认证。统加我习惯把PasswordAuthentication设为no,PubkeyAuthentication设为yes,再配合AllowUsers白名单,只放行特定用户。别小看这几行,扫段工具每天能撞几万次SSH,密钥认证直接让这类尝试归零。
账户策略里还有个容易漏的点:空密码账户和UID为0的隐藏账户。跑一遍awk -F: '($2==""){ print $1}' /etc/shadow,有输出就说明存在空密码账户。UID为0的账户除了root都该处理掉,awk -F: '($3==0){ print $1}' /etc/passwd查一遍。系统自带的games、ftp这类无 shell 账户,shell字段设成/sbin/nologin就行。
文件权限方面,/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow这几个文件的权限位要盯紧。shadow必须是000或400,group和gshadow同理。有人图省事直接chmod 777,等于把密码哈希摊开给人看。另外/tmp和/var/tmp建议挂独立分区,加上noexec、nosuid、nodev挂载选项,防止有人往临时目录扔可执行文件。
SELinux或AppArmor别急着关。很多人装完系统第一件事就是setenforce 0,嫌它报错烦。但SELinux的强制访问控制能拦住不少提权路径,哪怕只是permissive模式,日志里也能留下痕迹。真遇到应用不兼容,用audit2allow生成策略模块,比一关了之靠谱得多。
网络层加固,firewalld或iptables总得用一个。默认拒绝所有入站,只放行必要端口。我见过一台Web服务器开着3306端口对公网,MySQL弱密码被爆破,数据被拖库。数据库监听地址改成127.0.0.1,或者用防火墙限制来源IP,都是基本操作。SSH端口改不改无所谓,改端口挡不住针对性扫描,但能过滤掉一大批自动化脚本。
日志和审计不能省。rsyslog把日志集中转发到远程服务器,本地留一份容易被清理。auditd监控关键文件变更,比如/etc/passwd、/etc/sudoers、/etc/ssh/sshd_config,一旦被改动立刻告警。有人觉得auditd吃性能,其实规则写精细点,开销完全可接受。
补丁管理是长期活儿。内核漏洞、OpenSSL漏洞、sudo漏洞,哪一个被利用都能直接提权。生产环境不能随便重启,但至少要做到安全补丁及时评估,该重启的重启。用yum update --security或apt list --upgradable定期过一遍,别等出事再补。
最后提一句,加固不是一次性任务。系统在跑,配置在变,新漏洞在出。每隔半年重新过一遍基线,比装一堆安全软件实在。
友情链接