Как Linux узнает, разрешено ли процессу выполнять системный вызов?

На Mac OS X, похоже, нет команды для сохранения опций, и man top ничего не говорит о файле .toprc. Так что, похоже, лучшее, что вы можете сделать, это

alias top="top -o cpu"
0
26.02.2019, 15:09
1 ответ

Как правило, ядро ​​проверяет возможности процесса, чтобы определить, есть ли у него требуемые возможности.Вы найдете эту информацию, задокументированную на странице руководства соответствующего системного вызова, где будет отмечено, что «процессу требуется возможность CAP _XYZ» для выполнения операции. Например, глядя на справочную страницу kill(2), мы видим:

   For  a process to have permission to send a signal, it must either
   be privileged (under Linux: have the CAP_KILL  capability  in  the
   user  namespace  of  the target process), or the real or effective
   user ID of the sending process must equal the real or  saved  set-
   user-ID  of  the  target process.

Точно так же на страницеcreate_module(2)мы видим:

DESCRIPTION
   create_module()  attempts  to  create  a loadable module entry and
   reserve the kernel memory that will be needed to hold the  module.
   This system call requires privilege.
...
ERRORS
...
   EPERM  The   caller   was   not   privileged  (did  not  have  the
          CAP_SYS_MODULE capability).

Ядро может выполнять эти проверки, потому что возможности определяются -атрибутами процесса, которые ядро ​​записывает в свои внутренние структуры данных.

1
28.01.2020, 02:40

Теги

Похожие вопросы