redis之前爆出过一个漏洞,攻击者可藉此漏洞获取系统root权限。在之前的文章里,我们了解了如何增强redis的安全性。我们还可以使用非root用户来运行redis,进而进一步提升系统安全性。
- 以root身份正常安装redis
- 切换非root用户登入系统,比如test
- 拷贝redis默认配置文件到test的根目录(或其他test有访问权限的目录):
sudo copy /etc/redis/6379.conf /home/test/
- 修改test下配置文件的属主:
sudo chown test.test /home/test/6379.conf
- 修改配置文件中redis运行使用到的相关文件和目录的路径,可通过grep 6379 /home/test/6379.conf查找这些文件和目录,将这些路径修改到test用户根目录下
pidfile /home/test/run/redis_6379.pid
logfile /home/test/log/redis_6379.log
dir /home/test/lib/redis/6379
- 创建这些文件和目录
mkdir -p /home/test/run/ /home/test/log /home/test/lib/redis/6379
- 启动redis
/usr/local/bin/redis-server /home/test/6379.conf
如果你想深入了解Redis实现原理,可以参考《Redis设计与实现》这本书。它从源码层介绍了Redis各种数据结构的实现细节,对于理解Redis运行机制有很大帮助。

在apache中绑定非http标准端口时,一直出现如下的错误提示:
正在启动 httpd:httpd: Could not reliably determine the server’s fully qualified domain name, using localhost.localdomain for ServerName
(13)Permission denied: make_sock: could not bind to address 127.0.0.1:8081
no listening sockets available, shutting down
Unable to open logs
解决方案:
增加selinux中http的端口
semanage port -l|grep http #查看SELinux下http相关端口
semanage port -a -t http_port_t -p tcp 888 #增加这个非标准端口即可
或简单的关掉selinux:setenforce 0
最近Redis刚爆出一个安全性漏洞,我的服务器就“光荣的”中招了。黑客攻击的基本方法是:
- 扫描Redis端口,直接登录没有访问控制的Redis
- 修改Redis存盘配置:config set dir /root/.ssh/; config set dbfilename /root/.ssh/authorized_keys
- 添加key:crackit,将其值设置为新的公钥。然后就可以为所欲为了。
不影响客户端程序的修复办法:
- 重命名config命令:rename-command CONFIG DO_NOT_USE_CONFIG
- 重启Redis

现在我们就来认识一下Redis安全性方面的一些知识。
首先,Redis从设计上来说是用来被可信的客户端访问的,这就意味着不适于暴露给外部环境里的非可信客户端访问。最佳的实践方法是在Redis前面加一个访问控制层,校验用户请求。
其次,Redis本身提供了一些简单的配置以满足基本的安全控制。
- ip绑定。如果不需要直接对外提供服务,bind 127.0.0.1就行了,切忌bind 0.0.0.0!
- 端口设置。修改默认的6379,一定程度上避免被扫描。
- 设置密码。Redis的密码是通过requirepass以明文的形式配置在conf文件里的,所以要尽可能得长和复杂,降低被破解的风险。
- 重命名或禁用某些高危操作命令。向config、flushall、flushdb这些操作都是很关键的,不小心就会导致数据库不可用。可以在配置文件中通过rename-command重命名或禁用这些命令。
如果你想深入了解Redis实现原理,可以参考《Redis设计与实现》这本书。它从源码层介绍了Redis各种数据结构的实现细节,对于理解Redis运行机制有很大帮助。