Ubuntu环境下JS日志加密的常用方法
在Ubuntu系统中,JS日志(如Node.js应用程序生成的日志)的加密可通过工具加密、日志框架集成或系统日志服务配置实现,核心目标是保护日志中的敏感信息(如用户数据、操作记录)。以下是具体实现方案:
GPG是Ubuntu自带的开源加密工具,支持对称加密(AES等算法),适合手动或定时加密日志文件。
sudo apt-get install gpg。gpg --full-generate-key,按提示生成密钥对(用于非对称加密)。/var/log/js/app.log,运行gpg --symmetric --cipher-algo AES256 --output /var/log/js/app.log.gpg /var/log/js/app.log(对称加密,使用AES256算法)。gpg --decrypt /var/log/js/app.log.gpg > /var/log/js/app.log,输入密码即可查看原始日志。crontab -e添加定时任务(如每小时加密),例如0 * * * * gpg --symmetric --cipher-algo AES256 --output /var/log/js/app_$(date +\%F).log.gpg /var/log/js/app.log。Logrotate是Ubuntu默认的日志轮转工具,可配置在轮转时自动加密旧日志,避免日志文件过大且未加密的风险。
/etc/logrotate.d/jslogs文件,添加以下内容(以Node.js日志为例):/var/log/js/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
postrotate
gpg --symmetric --cipher-algo AES256 --output /var/log/js/app_$(date +\%F).log.gpg /var/log/js/app.log
rm /var/log/js/app.log
endscript
}
sudo systemctl restart logrotate,后续当日志轮转时,旧日志会自动生成加密文件(如app_2025-09-24.log.gpg)。若需在应用层实现日志加密(避免日志写入磁盘后再加密的性能损耗),可使用Node.js内置的crypto模块。
npm install crypto(内置模块,无需额外安装)。const fs = require('fs');
const crypto = require('crypto');
const algorithm = 'aes-256-ctr';
const secretKey = crypto.randomBytes(32); // 32字节密钥(需安全存储)
const iv = crypto.randomBytes(16); // 16字节初始化向量
const cipher = crypto.createCipheriv(algorithm, secretKey, iv);
const input = fs.readFileSync('/var/log/js/app.log', 'utf8');
const encrypted = Buffer.concat([cipher.update(input), cipher.final()]);
fs.writeFileSync('/var/log/js/app.log.enc', encrypted.toString('base64')); // base64编码存储
const fs = require('fs');
const crypto = require('crypto');
const algorithm = 'aes-256-ctr';
const secretKey = Buffer.from('...'); // 使用与加密相同的密钥
const iv = Buffer.from('...'); // 使用与加密相同的IV
const encryptedText = fs.readFileSync('/var/log/js/app.log.enc', 'utf8');
const decipher = crypto.createDecipheriv(algorithm, secretKey, iv);
const decrypted = Buffer.concat([decipher.update(encryptedText, 'base64'), decipher.final()]);
console.log(decrypted.toString('utf8')); // 输出原始日志
secretKey)和IV(iv)需安全存储(如环境变量、密钥管理服务),避免泄露。若JS日志通过系统日志服务(如rsyslog)收集,可直接配置服务端加密,实现集中式加密管理。
sudo apt-get install rsyslog gpg。/etc/rsyslog.conf或/etc/rsyslog.d/50-default.conf,添加以下内容:$template EncryptedJSLogs,"/var/log/encrypted/js_%fromhost-ip%-%programname%.log.gpg"
if $programname == 'node' or $programname == 'your_js_app' then ?EncryptedLogs & stop
sudo systemctl restart rsyslog,此时Node.js应用的日志会自动加密存储到/var/log/encrypted/目录。sudo apt-get install syslog-ng gpg。/etc/syslog-ng/syslog-ng.conf,添加以下内容:source s_js { file("/var/log/js/app.log"); };
destination d_encrypted_js { file("/var/log/encrypted/app.log.gpg" template("${ISODATE} ${HOST} ${PROGRAM}: ${MSG}\n")); gpg(keyfile("/path/to/your/keyfile.gpg")); };
log { source(s_js); destination(d_encrypted_js); };
sudo systemctl restart syslog-ng。