Идентификаторы доступа и групп POSIX ⇐ Linux
-
Anonymous
Идентификаторы доступа и групп POSIX
Не могли бы вы объяснить мне, как *nix проверяет права доступа к файлам (доступ POSIX)? Или дайте ссылку. Я нашел много ссылок, но вопросы остались.
Насколько я понимаю, у процесса есть шесть идентификаторов (r|e|s)(uid|gid). И есть список дополнительных групп процесса. Он рассчитывается на основе списка дополнительных групп реального пользователя при запуске нового процесса (плюс идентификатор процесса). Но изменение любого идентификатора gid не влияет на этот список. Вам нужно вызвать initgroups().
Файл имеет uid, gid и права доступа с 3 группами битов (классами): «владелец», «группа» и «другие».
И алгоритм такой:
[*]Если euid процесса равен 0, это root и у него есть какие-либо разрешения. В противном случае нам нужно определить класс битов. [*]Если euid процесса = uid файла, то он является «владельцем» [*]Затем мы проверяем, соответствует ли процесс группе файлов, и используем класс «группа» или «другой» в зависимости от результата.
Насколько я понимаю, в последнем действии, которое мы только что просмотрели, файл gid включен в список дополнительных групп процесса. Это верно? Тогда я не понимаю, зачем нам (r|e|s)gid идентификаторы? Они не используются при проверке доступа и не влияют непосредственно на список дополнительных групп.
Не могли бы вы объяснить мне, как *nix проверяет права доступа к файлам (доступ POSIX)? Или дайте ссылку. Я нашел много ссылок, но вопросы остались.
Насколько я понимаю, у процесса есть шесть идентификаторов (r|e|s)(uid|gid). И есть список дополнительных групп процесса. Он рассчитывается на основе списка дополнительных групп реального пользователя при запуске нового процесса (плюс идентификатор процесса). Но изменение любого идентификатора gid не влияет на этот список. Вам нужно вызвать initgroups().
Файл имеет uid, gid и права доступа с 3 группами битов (классами): «владелец», «группа» и «другие».
И алгоритм такой:
[*]Если euid процесса равен 0, это root и у него есть какие-либо разрешения. В противном случае нам нужно определить класс битов. [*]Если euid процесса = uid файла, то он является «владельцем» [*]Затем мы проверяем, соответствует ли процесс группе файлов, и используем класс «группа» или «другой» в зависимости от результата.
Насколько я понимаю, в последнем действии, которое мы только что просмотрели, файл gid включен в список дополнительных групп процесса. Это верно? Тогда я не понимаю, зачем нам (r|e|s)gid идентификаторы? Они не используются при проверке доступа и не влияют непосредственно на список дополнительных групп.
Мобильная версия