系统基础安全加固
sudo apt update && sudo apt upgrade,确保Debian系统及所有软件包(包括Golang依赖的基础库)修补已知漏洞;启用自动安全更新,安装unattended-upgrades包(sudo apt install unattended-upgrades),配置自动接收并安装安全补丁。/etc/ssh/sshd_config,设置PermitRootLogin no),仅允许特定用户登录(添加AllowUsers your_username);使用SSH密钥对认证(客户端运行ssh-keygen生成密钥,ssh-copy-id user@server_ip将公钥添加至服务器~/.ssh/authorized_keys),替代密码认证,防止暴力破解。sudo ufw allow 22/tcp && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw enable,默认拒绝所有未明确允许的流量。Golang环境安全配置
sudo apt install golang),或从官网下载最新稳定版的.deb包(如go1.21.0.linux-amd64.deb),使用sudo dpkg -i go1.21.0.linux-amd64.deb安装;避免从非官方渠道下载,防止安装恶意版本。~/.bashrc(或~/.zshrc),添加export GOROOT=/usr/lib/go-1.21(根据实际安装路径调整)、export GOPATH=$HOME/go、export PATH=$PATH:$GOROOT/bin:$GOPATH/bin,执行source ~/.bashrc使配置生效;确保环境变量仅对当前用户可见,避免全局污染。go env -w GO111MODULE=on),使用国内代理(如go env -w GOPROXY=https://goproxy.cn,direct)加速依赖下载,同时避免直接连接国外源的网络风险;禁止使用unsafe包(除非绝对必要),减少内存安全漏洞。Golang应用安全编码实践
database/sql包的Exec或Query方法,将用户输入作为参数传递,而非拼接SQL字符串),避免SQL注入;对用户输入进行严格验证(如使用正则表达式检查邮箱、手机号格式),过滤恶意字符(如<script>标签),防止XSS攻击。gorilla/csrf中间件(csrf.Protect([]byte("32-byte-long-auth-key")))为表单添加CSRF令牌,验证用户提交的请求合法性;确保令牌长度足够(至少32字节),并存储在安全位置(如httpOnly的cookie中)。hashedPassword, _ := pbkdf2.Key([]byte(password), salt, 100000, 32, sha256.New)),盐值随机生成(salt := make([]byte, 16),rand.Read(salt));敏感数据(如API密钥、数据库密码)使用环境变量或加密配置文件存储,避免硬编码在代码中。运行与维护安全
sudo useradd -m golanguser),将应用目录所有权赋予该用户(sudo chown -R golanguser:golanguser /path/to/app);使用systemd管理服务(创建/etc/systemd/system/go-app.service文件,设置User=golanguser、Group=golanguser),控制应用资源访问。auditd工具(sudo apt install auditd),监控关键文件(如/etc/passwd、/etc/shadow)的修改(sudo auditctl -w /etc/passwd -p wa -k password-changes);定期检查系统日志(/var/log/auth.log、/var/log/syslog),使用GoAccess或Awstats分析Web访问日志,及时发现异常请求(如大量404错误、SQL注入尝试)。go mod init初始化模块,go get package@version指定版本),定期执行go mod tidy清理未使用的依赖;监控依赖库的安全公告(如GitHub Security Advisories),及时升级存在漏洞的库(go get -u package)。