В системе Linux пользователь без полномочий root создает программу / процесс на C ++. Этот процесс имеет возможности CAP_DAC_OVERRIDE
, CAP_SYS_ADMIN
а также CAP_SYS_RAWIO
с режимом effective, permitted, inheritable
, Эти возможности прикреплены к файлу, который может быть прочитан lxc.
Этот процесс вызывает system("dumpe2fs -h /dev/sda1...")
прочитать информацию о разделе на жестком диске.
Когда это вызывает system("...")
Дочерний процесс dumpe2fs
создано. Но dumpe2fs
похоже, не наследует три возможности, как ожидалось.
Как я могу заставить дочерний процесс наследовать возможности?
«Когда он вызывает system (» … «), создается дочерний процесс dumpe2fs.»
Я считаю, что system () вызывает оболочку по умолчанию и запускает dumpe2fs
Команда в этом. Таким образом, это не будет дочерний процесс, работающий непосредственно под текущим процессом, как в fork()
вызов.
Вам нужно что-то вроде execve Функция для этого.
Возможно, вы захотите взглянуть на другие функции этого семейства, чтобы выполнить ваши конкретные требования:
http://man7.org/linux/man-pages/man3/exec.3.html
Других решений пока нет …