openrasp icon indicating copy to clipboard operation
openrasp copied to clipboard

容器化部署时,每次主机重启会在云控端新注册主机记录

Open breezily opened this issue 4 years ago • 2 comments

Bug report

我们容器化部署时,每次重新发布应用,会在云控端重新注册主机;

step 1. 现在容器上运行着应用 ssdlc,云控端看到主机 10.47.58.61 在线; step 2. ssdlc重新发布,会重建容器,mac地址不一样,云控端发现新注册主机10.47.58.61;step1的记录变离线;

And please include the following information:

  • centos 6.7
  • tomcat 8.5.53
  • jdk 1.8.0_181
  • OpenRASP version 1.3.3

看文档,可以在 openrasp.yam文件里面设置 rasp.id参数,但是我们部署应用的时候,不知道该设置成什么值? 不如让应用程序首次启动时自动生成,并写入openrasp.yam或者另外的文件。

Feature Request

现在Bypass方案,是rasp第一次启动的时候,自动生成rasp.id,后续应用重启直接读取第一次生成的rasp.id

修改了javaAgent的两个文件: Config.java

static final String CONFIG_RASP_ID = "rasp.id";

public String getRaspIdConfig() { return this.configFileDir + File.separator + CONFIG_RASP_ID; }

public void setRaspId(String raspId) { this.raspId = raspId; }

OSUtil.java

public static String getRaspId() throws Exception {
    if (!StringUtils.isEmpty(Config.getConfig().getRaspId())) {
        return Config.getConfig().getRaspId();
    }
    String raspId = getRaspIdFromFile();
    Config.getConfig().setRaspId(raspId);
    return raspId;
}

/**
 * 每个Rasp首次启动生成一个Id后,序列化到rasp.id文件
 * 防止Padis容器化部署重新生成Id
 */
private static String getRaspIdFromFile() {
    try {
        File file = new File(Config.getConfig().getRaspIdConfig());
        if (file.exists()) {
            return FileUtil.readFileByFile(file);
        }
        return produceRaspId(file);
    } catch (Exception ex) {
        LOGGER.info("set rasp.id error.", ex);
        return "UNKNOWN";
    }
}

private static String produceRaspId(File file) throws IOException, NoSuchAlgorithmException {
   // ToDo: 文件操作 TRY-CATCH-FINALLY 
    FileWriter fw = new FileWriter(file);
    LinkedList<String> macs = OSUtil.getMacAddress();
    String macString = "";
    for (String mac : macs) {
        macString += mac;
    }
    String raspId = getDigestMd5(macString + Config.getConfig().getBaseDirectory() + getHostName());
    fw.write(raspId);
    fw.close();
    return raspId;
}

breezily avatar Aug 20 '20 03:08 breezily

我测试时,用普通方式部署也会出现这样的问题

NitroCao avatar May 06 '21 02:05 NitroCao

目前你可以通过 openrasp.yml 固定 rasp.id,这个方案能否合入还得研究下

CaledoniaProject avatar May 06 '21 02:05 CaledoniaProject