一、系统级安全强化(CentOS基础防护)
/etc/passwd文件,移除或锁定冗余的root账户(passwd -l <用户名>),避免未授权账户获得最高权限。/etc/login.defs文件,设置密码复杂度要求(包含大小写字母、数字、特殊字符,长度≥10位),并启用密码过期机制(如PASS_MIN_DAYS 1、PASS_WARN_AGE 7)。chattr +i命令为/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow添加不可修改属性,防止恶意篡改;定期检查这些文件的权限(应仅为root可写)。/etc/pam.d/su文件,添加auth required pam_wheel.so use_uid,仅允许wheel组的用户使用su切换至root,降低提权风险。/etc/profile中添加TMOUT=300(5分钟无操作自动注销),减少root账户长期空闲带来的安全隐患。二、Golang应用级安全配置(针对性防护)
go mod init)管理依赖,通过go mod tidy清理无用依赖;定期用govulncheck扫描依赖库中的已知漏洞(如CVE),优先使用经过安全审计的库(如database/sql、html/template)。github.com/go-playground/validator/v10库定义字段约束);输出时使用html/template或text/template自动转义特殊字符(如<、>),防止XSS攻击。db.QueryRow("SELECT * FROM users WHERE username = ?", username)),避免直接拼接SQL语句;避免使用database/sql的Exec方法拼接用户输入。session.MaxAge=3600);采用RBAC(基于角色的访问控制)限制敏感操作(如管理员权限需单独分配),防止未授权访问。bcrypt)进行哈希存储(bcrypt.GenerateFromPassword),避免明文保存;传输层使用TLS 1.2及以上版本(通过crypto/tls包配置),加密数据传输。三、网络安全防护(流量与访问控制)
crypto/tls包配置HTTPS,生成自签名证书(openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365)或使用Let’s Encrypt免费证书,避免数据在传输过程中被窃取或篡改。Strict-Transport-Security响应头(如w.Header().Set("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload")),强制浏览器只通过HTTPS访问应用,防止SSL剥离攻击。firewalld或iptables配置防火墙规则,仅允许必要的端口(如80、443、应用端口)对外开放(如firewall-cmd --permanent --zone=public --add-port=8080/tcp),关闭不必要的服务端口(如FTP、Telnet)。gorilla/csrf中间件生成和验证CSRF Token(如csrf.Protect([]byte("32-byte-long-auth-key"))),确保请求来自合法来源,避免跨站请求伪造。四、代码与依赖安全实践(持续维护)
log.Printf("Error: %v", err)而非panic)、避免硬编码敏感信息(如数据库密码、API密钥,使用环境变量或vault管理)。gosec(go install github.com/securego/gosec/v2/cmd/gosec@latest)扫描代码中的安全问题(如SQL注入、XSS、硬编码密钥);进行人工代码审查,重点检查输入验证、权限控制、错误处理等关键环节。go get -u ./...更新所有依赖至最新版本,及时修复已知漏洞;使用govulncheck监控依赖库的安全公告(如GitHub Advisory Database),确保依赖库的安全性。五、运行时与监控(应急响应)
log.Printf("%s %s %s", r.RemoteAddr, r.Method, r.URL.Path));使用监控工具(如Prometheus+Grafana)实时监控应用性能、异常行为(如大量401错误、异常请求频率),及时发现并响应安全事件。-ldflags="-s -w"移除调试信息,减小二进制文件体积(减少攻击面);使用-race标志检测数据竞争(如go build -race myapp.go),避免并发漏洞;启用SELinux(CentOS默认开启),通过自定义策略限制Go应用的进程权限(如限制文件访问、网络访问)。