Теперь я думаю, что это ошибка, связанная с тем, как при старте сервисы запускаются "ожидающим демоном" (т.е. сервисами, которые при старте дважды вилливают при старте). Я заметил, что если я использую натяжку на процесс, использующий возможности(7), то возможности также игнорируются. Я подозреваю, что upstart, для того, чтобы определить PID для ожидания, отслеживает службу, указанную с "ожидающим демоном" достаточно долго, чтобы получить PID, и это приводит к отказу механизма возможностей ядра. Таким образом, ошибка заключается в том, что возможности взаимодействуют с трассировкой процесса, и в том, что upstart использует трассировку процесса при запуске сервиса с "ожидающим демоном" (это предположение).
В качестве простого теста:
setcap 'cap_net_bind_service+epi' PROGRAM
)(обратите внимание, что в шаге 3, строго говоря, набор унаследованных возможностей (i
флаг) не нужно изменять для этого теста, но нужно для процесса, который forks()
, например, мой демон).
Я напишу об этом в файл с ошибкой против ядра, так как ничто в man-странице возможностей(7) не говорит о том, что это не должно работать с трассировкой процесса.
Я нашел проблему: мои ключевые размеры были слишком велики. Теперь я использую 2048 бит успешно. Очевидно, что 8192 бита слишком много для OpenVPN