今天看到了这篇文章:
redis未授权访问缺陷导致系统被黑, http://www.blogjava.net/writegull/archive/2015/12/15/428651.html想起了前段时间也补过这个漏洞,不过没有像楼主服务器遭受到攻击!
总结下修复漏洞方案:Redis服务器配置不当的体现:
1、redis服务已root账户/权限启动;
2、redis服务无需密码或弱密码进行认证;
3、redis服务器本身对互联网开放了SSH服务,允许key方式登录。
修复方案:
1、不要以root用户允许redis
2、修改运行redis的端口,编辑配置文件(/etc/redis.conf)
port 4321
3、如果只需要本地访问,编辑配置文件(/etc/redis.conf)
bind 127.0.0.1
4、设定密码,编辑配置文件
requirepass ******
5、在启动的时候需要指定配置文件的路径,这些设置才会生效
redis-server /etc/redis.conf
Redis安全配置参考:
http://wiki.wooyun.org/server:redis
服务器上操作过程大家可参考:
第一步:
非root权限启动,建立普通用户并设置密码,redis-server和redis.conf宿主权限修改为普通用户。
[root@cdn bin]# chown -R ugcstore:root /usr/loca/bin/redis-server [root@cdn bin]# chown -R ugcstore:root /usr/local/redis/redis.conf |
切换到普通用户
后台启动redis:
nohup redis-server /usr/local/redis/redis.conf & |
查看redis进程,验证宿主用户
ps -ef |grep redis ugcstore 17602 1 0 22:06 ? 00:00:01 redis-server x.x.x.x:4321 |
第二步:
一般是在/etc/redis.conf,如果/etc下没有找到,find搜索下.
操作的服务器redis.conf文件位置: /usr/local/redis/redis.conf
port 4321 #修改端口 requirepass ****** #设置密码 bind x.x.x.x # 非本机可访问 |
第三步:
调整连接redis的程序,设置密码,验证程序是否能正确获取数据.
测试数据:key:foo value:bar
[root@cdn ugc]# telnet x.x.x.x 4321 Trying 65.255.33.64... Connected to 65.255.33.64. Escape character is '^]'. auth E38faeQGtxr##rOP +OK set foo bar +OK get foo $3 bar |
PHP程序测试:
/data/vfetch/public/test.php
<?php
/**
* @author david
*/
/**
* 创建redis链接
*/
function createConn()
{
try
{
$redis=new Redis;
$redis->connect('x.x.x.x', 4321);
$redis->auth('******');
return $redis;
}
catch(RedisException $e)
{
return false;
}
}
$rediss = createConn();
echo $rediss->get('foo');
Java程序测试:
public class JedisTest {
static JedisPool pool = null;
public static JedisPool getPool() {
if (pool == null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(500);
config.setMaxIdle(20);
config.setMaxWait(1000 * 30);
config.setTestOnBorrow(true);
pool = new JedisPool(config, "x.x.x.x", 4321, 5000, "******");
}
System.out.println(pool);
return pool;
}
public static void close(JedisPool pool, Jedis redis) {
if (redis != null) {
pool.returnResource(redis);
}
}
public static String get(String key) {
String value = null;
JedisPool pool = null;
Jedis jedis = null;
try {
pool = getPool();
jedis = pool.getResource();
value = jedis.get(key);
} catch (Exception e) {
pool.returnBrokenResource(jedis);
} finally {
close(pool, jedis);
}
return value;
}
public static void main(String[] args) {
System.out.println(get("foo"));
}
}
posted on 2015-12-27 16:49
David1228 阅读(1081)
评论(0) 编辑 收藏 所属分类:
NoSql