Cтраница 1
Эффективный идентификатор ( effective id, effective gid) - идентификатор пользователя или группы, получаемый процессом после вызова выполняемого файла; определяет права процесса. [1]
Возможность изменения эффективных идентификаторов процесса удобна для организации абстрактных типов данных. Используя этот механизм, можно строить файлы, с которыми разрешено выполнять только определенный набор операций. Поскольку процесс может узнать связанные с ним реальные и эффективные идентификаторы, выполняющие этот набор операций программы могут проверять легальность вызвавших их программ. В частности, таким образом можно выполнять действия, разрешенные только привилегированному пользователю или владельцу файла. [2]
Права доступа процесса проверяются по его эффективным идентификаторам. Процесс может системными вызовами getuid, geteuid, getgid и getegid узнать связанные с ним реальные и эффективные идентификаторы. Поскольку это означает изменение прав процесса, изменение идентификаторов разрешено только привилегированному процессу и такому процессу, реальный идентификатор которого совпадает с устанавливаемым. [3]
Отметим, что при изменении своих идентификаторов ( например, реальный и эффективный идентификаторы пользователя, связанные с процессом) процесс делает их одинаковыми. Поскольку права процесса определяются эффективными идентификаторами, становится понятным требование, чтобы устанавливаемое значение совпадало с реальным идентификатором процесса. [4]
Первоначальные идентификаторы, связанные с процессом, называются реальными; идентификаторы, полученные им после выполнения системного вызова exec, - эффективными. После выполнения системного вызова exec эффективный идентификатор пользователя ( или группы), если смена соответствующего идентификатора выполняемого файла разрешена в коде его защиты, полагается равным идентификатору владельца ( или группы) выполняемого файла. [5]
Привилегированный процесс может послать сигнал любому процессу. В противном случае процессы, посылающий и принимающий сигналы, должны иметь одинаковые эффективные идентификаторы пользователя. Первый аргумент системного вызова kill, равный нулю, означает посылку сигнала всем процессам, управляемым тем же терминалом, что и процесс, посылающий сигналы. [6]
Права доступа процесса проверяются по его эффективным идентификаторам. Процесс может системными вызовами getuid, geteuid, getgid и getegid узнать связанные с ним реальные и эффективные идентификаторы. Поскольку это означает изменение прав процесса, изменение идентификаторов разрешено только привилегированному процессу и такому процессу, реальный идентификатор которого совпадает с устанавливаемым. [7]
Второй символ может быть либо знаком минус, либо буквой и. Минус означает, что запрещено менять идентификатор пользователя при вызове файла для выполнения ( см. характеристику реальных и эффективных идентификаторов в гл. Буква и разрешает смену. Третий, символ кода защиты имеет тот же синтаксис и запрещает или разрешает смену идентификатора группы при вызове файла. Оба символа имеют смысл только в случае, если файл является выполняемым. [8]
Выполнение системных вызовов setuid и setgid более сложное. Они позволяют устанавливать эффективные идентификаторы группы и пользователя, а также изменяют реальные идентификаторы. Выполнение таких вызовов разрешается только привилегированному пользователю. Если пользователь не имеет привилегии, допускается изменение действующих идентификаторов файла реальными идентификаторами. [9]
Возможность изменения эффективных идентификаторов процесса удобна для организации абстрактных типов данных. Используя этот механизм, можно строить файлы, с которыми разрешено выполнять только определенный набор операций. Поскольку процесс может узнать связанные с ним реальные и эффективные идентификаторы, выполняющие этот набор операций программы могут проверять легальность вызвавших их программ. В частности, таким образом можно выполнять действия, разрешенные только привилегированному пользователю или владельцу файла. [10]