Назначение возможности linux одному процессу java

Я запускаю много Java-процессов, но я просто хочу назначить возможность linux cap_net_raw только одному Java-процессу. В настоящее время, если я сделаю это "setcap cap_net_raw = ep / usr / java / default / bin / java", то эта возможность будет назначена всем процессам java.

Проведя некоторые исследования, я решил, что мне нужно будет написать программу-обертку ac и предоставить вышеупомянутую возможность этой программе, и процесс java будет наследоваться в execv. Другое исследование говорит, что возможность может быть назначена через systemd.

Я не уверен, как использовать возможность systemd и является ли она приемлемой.

Может кто-нибудь подсказать мне, по какому пути и как именно это сделать? Спасибо

1 ответ

Я написал обертку (используя другую статью stackru) для достижения этой цели.

capjava.c:

#include <sys/capability.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv[]) {

  char  *cmd;
  char  **argvp;
  int ret = 0;

  cap_t caps = cap_get_proc();
  printf("Capabilities: %s\n", cap_to_text(caps, NULL));
  cap_value_t newcaps[1] = { CAP_NET_RAW, };
  cap_set_flag(caps, CAP_INHERITABLE, 1, newcaps, CAP_SET);
  cap_set_proc(caps);
  printf("\nNew Capabilities: %s\n", cap_to_text(caps, NULL));
  cap_free(caps);

  argvp = &argv[1];
  cmd   = argvp[0];
  printf("cmd is %s\n", cmd);

  ret   = execv(cmd, argvp);
  printf("\n return value of execv is %d\n", ret);
}

Теперь добавлены разрешения:

[root @ localhost ~] # setcap cap_net_raw = p / sbin / capjava [root @ localhost ~] # setcap cap_net_raw = ei / usr / java / latest / bin / java

добавил capjava в конфигурационный файл systemctl для одного из моих приложений.

Другие вопросы по тегам