У меня есть программа Linux, которую я хочу вызвать, которая хочет открыть Raw
Sockets, привилегированную операцию. В настоящее время я использую его как root
, но, очевидно, я бы не предпочел. Я бы предпочел предоставить это
только привилегию cap_net_raw. Поэтому вместо этого я пытаюсь настроить наследуемая возможность
для процесса, в котором я буду ссылаться на программу. /> выполнять рассматриваемую программу. Я далее
знаю, что чтобы добавить возможности к набору окружающей среды, он должен быть
уже в разрешенных и наследственных наборах.cap_t caps;
std::vector cap_list;
cap_list.push_back(CAP_NET_RAW);
if((caps = cap_get_proc()) == NULL) {
printf("error getting capabilities: %s\n", strerror(errno));
} else if(cap_set_flag(caps, CAP_EFFECTIVE, cap_list.size(), &cap_list[0], CAP_SET) < 0) {
printf("error setting cap flags: %s\n", strerror(errno));
} else if(cap_set_flag(caps, CAP_INHERITABLE, cap_list.size(), &cap_list[0], CAP_SET) < 0) {
printf("error setting cap flags: %s\n", strerror(errno));
} else if(cap_set_flag(caps, CAP_PERMITTED, cap_list.size(), &cap_list[0], CAP_SET) < 0) {
printf("error setting cap flags: %s\n", strerror(errno));
} else if(cap_set_proc(caps) < 0) {
printf("error setting capabilities: %s\n", strerror(errno));
} else if(prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_RAISE, cap_list[0], 0, 0) < 0) {
printf("error setting ambient capability: %s\n", strerror(errno));
} else if(prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_IS_SET, cap_list[0], 0, 0) != 1) {
printf("didn't set ambient capability\n");
} else {
printf("successfully set capabilities\n");
}
cap_free(caps);
< /code>
Там немного больше кода, чем я думаю, мне действительно нужно; То, что вы
, включает в себя некоторые все более франтические попытки отладки.
Также вы можете заметить, что часть кода не будет правильно
, обрабатываю вектор более чем одной возможности. prctl < /code>, чтобы явно установить его в наборе окружающей среды.
Я дальше использую prctl < /code> и pr_cap_ambient_is_set для двойной проверки
, что окружающая способность фактически устанавливается. end. < /p>
Однако подпроцесс не < /em> заканчивается возможностью, которую он нуждается
. Для отладки, и поскольку она соответствует тому, как программа
будет вызвана в производстве, я не вызываю программу
напрямую, а скорее обернута сценарием оболочки.
(предполагаю, что я могу получить наследство возможности для работы, я предполагаю, что
сценарий оболочки не вызовет.
Is Inserfated CAPSH -Pript -PRIPT -PRIPT -PRIPT -PRIPT -PRIPT -PRIPTIMEPT. Вот
его вывод: < /p>
Current: cap_net_raw=i
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read,cap_perfmon,cap_bpf,cap_checkpoint_restore
Ambient set =
Current IAB: cap_net_raw
Securebits: 00/0x0/1'b0
secure-noroot: no (unlocked)
secure-no-suid-fixup: no (unlocked)
secure-keep-caps: no (unlocked)
secure-no-ambient-raise: no (unlocked)
uid=1001(xyz) euid=1001(xyz)
gid=1001(xyz)
groups=20(dialout),20(dialout),1001(xyz)
Guessed mode: UNCERTAIN (0)
< /code>
Очевидно, что CAP_NET_RAW устанавливается в наследуемом наборе, но не
в эффективных, разрешенных или окружающих наборах. Это также перечислено
в «IAB», но я еще не понял, что это значит. В любом случае
, когда моя фактическая программа вызывается, и пытается открыть необработанную сокет
, она не выполняется, с «операцией не разрешена». /> о системном программировании Linux. Если кто -то думает, что это было бы
более подходящим (или, скорее всего, получит лучшие ответы) в
SuperUser или Unix & Linux Stack Exchange, я, безусловно, могу переместить его
there.
Поскольку кто -то наверняка спрашивает об этом, я попробую опубликовать полный
mbs Программа
, которая пытается открыть необработанное сокет.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... es-to-work
Проблемы с унаследованными возможностями для работы ⇐ Linux
-
Anonymous
1757645383
Anonymous
У меня есть программа Linux, которую я хочу вызвать, которая хочет открыть Raw
Sockets, привилегированную операцию. В настоящее время я использую его как root
, но, очевидно, я бы не предпочел. Я бы предпочел предоставить это
только привилегию cap_net_raw. Поэтому вместо этого я пытаюсь настроить наследуемая возможность
для процесса, в котором я буду ссылаться на программу. /> выполнять рассматриваемую программу. Я далее
знаю, что чтобы добавить возможности к набору окружающей среды, он должен быть
уже в разрешенных и наследственных наборах.cap_t caps;
std::vector cap_list;
cap_list.push_back(CAP_NET_RAW);
if((caps = cap_get_proc()) == NULL) {
printf("error getting capabilities: %s\n", strerror(errno));
} else if(cap_set_flag(caps, CAP_EFFECTIVE, cap_list.size(), &cap_list[0], CAP_SET) < 0) {
printf("error setting cap flags: %s\n", strerror(errno));
} else if(cap_set_flag(caps, CAP_INHERITABLE, cap_list.size(), &cap_list[0], CAP_SET) < 0) {
printf("error setting cap flags: %s\n", strerror(errno));
} else if(cap_set_flag(caps, CAP_PERMITTED, cap_list.size(), &cap_list[0], CAP_SET) < 0) {
printf("error setting cap flags: %s\n", strerror(errno));
} else if(cap_set_proc(caps) < 0) {
printf("error setting capabilities: %s\n", strerror(errno));
} else if(prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_RAISE, cap_list[0], 0, 0) < 0) {
printf("error setting ambient capability: %s\n", strerror(errno));
} else if(prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_IS_SET, cap_list[0], 0, 0) != 1) {
printf("didn't set ambient capability\n");
} else {
printf("successfully set capabilities\n");
}
cap_free(caps);
< /code>
Там немного больше кода, чем я думаю, мне действительно нужно; То, что вы
, включает в себя некоторые все более франтические попытки отладки.
Также вы можете заметить, что часть кода не будет правильно
, обрабатываю вектор более чем одной возможности. prctl < /code>, чтобы явно установить его в наборе окружающей среды.
Я дальше использую prctl < /code> и pr_cap_ambient_is_set для двойной проверки
, что окружающая способность фактически устанавливается. end. < /p>
Однако подпроцесс не < /em> заканчивается возможностью, которую он нуждается
. Для отладки, и поскольку она соответствует тому, как программа
будет вызвана в производстве, я не вызываю программу
напрямую, а скорее обернута сценарием оболочки.
(предполагаю, что я могу получить наследство возможности для работы, я предполагаю, что
сценарий оболочки не вызовет.
Is Inserfated CAPSH -Pript -PRIPT -PRIPT -PRIPT -PRIPT -PRIPT -PRIPTIMEPT. Вот
его вывод: < /p>
Current: cap_net_raw=i
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read,cap_perfmon,cap_bpf,cap_checkpoint_restore
Ambient set =
Current IAB: cap_net_raw
Securebits: 00/0x0/1'b0
secure-noroot: no (unlocked)
secure-no-suid-fixup: no (unlocked)
secure-keep-caps: no (unlocked)
secure-no-ambient-raise: no (unlocked)
uid=1001(xyz) euid=1001(xyz)
gid=1001(xyz)
groups=20(dialout),20(dialout),1001(xyz)
Guessed mode: UNCERTAIN (0)
< /code>
Очевидно, что CAP_NET_RAW устанавливается в наследуемом наборе, но не
в эффективных, разрешенных или окружающих наборах. Это также перечислено
в «IAB», но я еще не понял, что это значит. В любом случае
, когда моя фактическая программа вызывается, и пытается открыть необработанную сокет
, она не выполняется, с «операцией не разрешена». /> о системном программировании Linux. Если кто -то думает, что это было бы
более подходящим (или, скорее всего, получит лучшие ответы) в
SuperUser или Unix & Linux Stack Exchange, я, безусловно, могу переместить его
there.
Поскольку кто -то наверняка спрашивает об этом, я попробую опубликовать полный
mbs Программа
, которая пытается открыть необработанное сокет.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79762492/trouble-getting-inherited-capabilities-to-work[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия