Иногда в качестве синонимов сохраненного установленного идентификатора пользователя и сохраненного установленного идентификатора группы употребляются выражения «сохраненный идентификатор пользователя» и «сохраненный идентификатор группы».
Сохраненные установленные идентификаторы являются нововведениями, появившимися в System V и принятыми в POSIX. В выпусках BSD, предшествующих 4.4, они не предоставлялись. В исходном стандарте POSIX.1 поддержка этих идентификаторов была необязательной, но в более поздних стандартах (начиная с FIPS 151-1 в 1988 году) стала обязательной.
В Linux для определения полномочий при выполнении операций, связанных с файловой системой (открытие файла, изменение его собственника и модификация полномочий), применяются не действующие пользовательские и групповые ID, а пользовательские и групповые ID файловой системы. Они используются в этом качестве наряду с дополнительными групповыми идентификаторами. (Действующие идентификаторы по-прежнему, как и в других реализациях UNIX, используются для других, ранее рассмотренных целей.)
Обычно пользовательские и групповые идентификаторы файловой системы имеют те же значения, что и соответствующие действующие идентификаторы (и, таким образом, нередко совпадают с соответствующими реальными идентификаторами). Более того, когда изменяется действующий пользовательский или групповой ID (либо посредством системного вызова, либо из-за выполнения программы с полномочиями setuid или setgid), изменяется, получая такое же значение, и соответствующий идентификатор файловой системы. Поскольку идентификаторы файловой системы следуют таким образом за действующими идентификаторами, это означает, что Linux при проверке привилегий и полномочий фактически ведет себя точно так же, как любая другая реализация UNIX. Лишь когда используются два характерных для Linux системных вызова — setfsuid() и setfsgid(), поведение Linux отличается от поведения других реализаций UNIX, и ID файловой системы отличаются от соответствующих действующих идентификаторов.
Зачем в Linux предоставляются идентификаторы файловой системы и при каких обстоятельствах нам понадобятся разные значения для действующих идентификаторов и идентификаторов файловой системы? Причины главным образом имеют исторические корни. Идентификаторы файловой системы впервые появились в Linux 1.2. В этой версии ядра один процесс мог отправлять сигнал другому, лишь если действующий идентификатор пользователя отправителя совпадал с реальным или действующим идентификатором пользователя целевого процесса. Это повлияло на некоторые программы, например на программу сервера Linux NFS (Network File System — сетевая файловая система), которой нужна была возможность доступа к файлам, как будто у нее есть действующие идентификаторы соответствующих клиентских процессов. Но, если бы NFS-сервер изменял свой действующий идентификатор пользователя, он стал бы уязвим от сигналов непривилегированных пользовательских процессов. Для предотвращения этой возможности были придуманы отдельные пользовательские и групповые ID файловой системы. Оставляя неизмененными свои действующие идентификаторы, но изменяя идентификаторы файловой системы, NFS-сервер может выдавать себя за другого пользователя с целью обращения к файлам без уязвимости от сигналов пользовательских процессов.
Начиная с версии ядра 2.0, в Linux приняты установленные SUSv3 правила относительно разрешений на отправку сигналов. Эти правила не касаются действующего ID пользователя целевого процесса (см. раздел 20.5). Таким образом, наличие идентификатора файловой системы утратило свою актуальность (теперь процесс может удовлетворить возникающие потребности, изменив значение действующего пользовательского ID на ID привилегированного пользователя (и обратно) путем разумного применения системных вызовов, рассматриваемых далее в этой главе). Но эта возможность по-прежнему предусмотрена для сохранения совместимости с существующим программным обеспечением.
Поскольку идентификаторы файловой системы теперь уже считаются некой экзотикой и обычно значения совпадают с соответствующими действующими идентификаторами, во всем остальном тексте книги описания различных проверок полномочий по доступу к файлам, а также установок прав на владение новыми файлами будут даваться в понятиях действующих пользовательских ID процесса. Хотя в Linux по-прежнему для этих целей реально используются принадлежащие процессу идентификаторы файловой системы, на практике их наличие редко вносит в действия какую-либо существенную разницу.