如何在CentOS 6中用Vim Blowfish2加密保护example.conf且避免HTTPD报错
嗨,这个问题我之前帮人排查过,本质是你对Vim Blowfish2加密的用途理解有点偏差——Vim的加密是针对文件编辑场景的,加密后整个文件会变成密文,而httpd服务读取配置时需要的是合法的Apache语法内容,拿到密文自然会报语法错误;所谓的“能被读取”只是服务进程有权限读取到密文,根本解析不了配置,这和你想要的「既保护文件不被未授权访问,又让服务正常工作」的需求完全不匹配。
下面给你几个可行的解决方案,按实现复杂度和实用性排序:
方案1:文件系统权限控制(最推荐,简单高效)
httpd服务在CentOS 6中是用apache用户运行的,我们可以通过权限设置,让只有apache和root能读取配置文件,其他普通用户完全无法访问:
- 先把配置文件的所属组改成apache:
chgrp apache example.conf - 再设置文件权限为
640(所有者可读可写,所属组可读,其他用户无权限):chmod 640 example.conf
这样一来,普通用户连查看文件内容的权限都没有,而httpd服务(以apache用户身份)能正常读取解析配置,不会出现任何语法错误,完美满足基础的密码保护需求。
方案2:针对敏感配置项的加密(适合有高度敏感内容的场景)
如果你的example.conf里有比如数据库密码、代理认证信息这类极度敏感的内容,不想让包括root在内的用户直接看到,可以把这些敏感内容单独抽出来,用加密工具处理后让httpd间接读取:
- 把敏感配置放到单独的文件(比如
sensitive.conf),用gpg加密这个文件:
执行后会让你设置加密密码,加密后会生成gpg -c sensitive.confsensitive.conf.gpg密文文件,原明文文件可以删除。 - 编写一个httpd启动前置脚本,在服务启动前解密密文到内存文件系统(比如
/dev/shm,重启后自动清空):#!/bin/bash # 解密到内存临时文件 gpg --batch --passphrase-file /path/to/secure_passfile -d sensitive.conf.gpg > /dev/shm/sensitive.conf # 设置临时文件权限,仅apache可读 chown apache:apache /dev/shm/sensitive.conf chmod 600 /dev/shm/sensitive.conf # 启动httpd服务 service httpd start - 修改
example.conf,用Include指令引入内存里的临时敏感配置:Include /dev/shm/sensitive.conf
这个方案需要你妥善保管解密密码文件(/path/to/secure_passfile),权限也要设为600,只有root能访问。
方案3:目录级加密(适合需要整体加密配置目录的场景)
如果需要对整个配置目录进行加密,可以用CentOS 6支持的ecryptfs文件系统:
- 先安装ecryptfs工具:
yum install ecryptfs-utils - 创建加密目录和解密后的挂载目录:
mkdir -p /encrypted/config /var/www/config - 挂载加密目录(挂载后
/var/www/config里是明文,卸载后/encrypted/config里是密文):
执行过程中会提示你设置加密密码、选择加密算法(推荐Blowfish),按提示完成即可。mount -t ecryptfs /encrypted/config /var/www/config - 把
example.conf放到/var/www/config里,修改httpd的配置指向这个路径,服务就能正常读取了。
注意:系统重启后需要重新挂载加密目录,你可以把挂载命令加到/etc/rc.local里实现自动挂载。
总结一下
Vim的Blowfish2加密只适合你自己手动编辑的文件,完全不适合需要被服务直接读取的配置文件。优先用方案1解决问题,简单又实用;如果有更高的安全需求,再考虑后面的方案。
内容的提问来源于stack exchange,提问作者Msf007

