2.4. Разрешения IPC

2.4. Разрешения IPC

Новая очередь сообщений, именованный семафор или сегмент разделяемой памяти создается функциями mq_open, sem_open и shm_open, при условии, что аргумент oflag содержит константу O_CREAT. Согласно табл. 2.3, любому из данных типов IPC присваиваются определенные права доступа (permissions), аналогичные разрешениям доступа к файлам в Unix.

При открытии существующей очереди сообщений, семафора или сегмента разделяемой памяти теми же функциями (в случае, когда не указан флаг O_CREAT или указан O_CREAT без O_EXCL и объект уже существует) производится проверка разрешений:

1. Проверяются биты разрешений, присвоенные объекту IPC при создании.

2. Проверяется запрошенный тип доступа (O_RDONLY, O_WRONLY, O_RDWR).

3. Проверяется действующий идентификатор пользователя вызывающего процесса, действующий групповой идентификатор процесса и дополнительные групповые идентификаторы процесса (последние могут не поддерживаться).

Большинством систем Unix производятся следующие конкретные проверки:

1. Если действующий идентификатор пользователя для процесса есть 0 (привилегированный пользователь), доступ будет разрешен.

2. Если действующий идентификатор пользователя процесса совпадает с идентификатором владельца объекта IPC: если соответствующий бит разрешения для пользователя установлен, доступ разрешен, иначе в доступе отказывается.

Под соответствующим битом разрешения мы подразумеваем, например, бит разрешения на чтение, если процесс открывает объект только для чтения. Если процесс открывает объект для записи, должен быть установлен соответственно бит разрешения на запись для владельца (user-write).

3. Если действующий идентификатор группы процесса или один из дополнительных групповых идентификаторов процесса совпадает с групповым идентификатором объекта IPC: если соответствующий бит разрешения для группы установлен, доступ будет разрешен, иначе в доступе отказывается.

4. Если соответствующий бит разрешения доступа для прочих пользователей установлен, доступ будет разрешен, иначе в доступе будет отказано. 

Эти четыре проверки производятся в указанном порядке. Следовательно, если процесс является владельцем объекта IPC (шаг 2), доступ разрешается или запрещается на основе одних только разрешений пользователя (владельца). Разрешения группы при этом не проверяются. Аналогично, если процесс не является владельцем объекта IPC, но принадлежит к нужной группе, доступ разрешается или запрещается на основе разрешений группы — разрешения для прочих пользователей при этом не проверяются.

ПРИМЕЧАНИЕ

Согласно табл. 2.2, функция sem_open не использует флаги O_RDONLY, O_WRONLY, O_RDWR. В разделе 10.2, однако, будет сказано о том, что некоторые реализации Unix подразумевают наличие флага O_RDWR, потому что любое обращение к семафору подразумевает чтение и запись его значения.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Взимание недоимок при помощи данных 5-метрового разрешения

Из книги Все под контролем: Кто и как следит за тобой автора Гарфинкель Симеон

Взимание недоимок при помощи данных 5-метрового разрешения Шесть лет назад семья Джонсов переехала в новый, построенный по индивидуальному проекту дом в пригороде. С того времени они пристроили еще одну комнату, построили бассейн и сделали другие изменения, не потратив и


Переосмысление разрешения

Из книги Журнал `Компьютерра` N745 автора Журнал «Компьютерра»

Переосмысление разрешения Разрешение является основой современного права. Чтобы дать разрешение, лицо должно достигнуть определенного возраста и быть вменяемым; человек в состоянии опьянения или недееспособный подругой причине не может дать юридически значимое


FERRMA: Nasтуплени высокого разрешения

Из книги Fedora 8 Руководство пользователя автора Колисниченко Денис Николаевич

FERRMA: Nasтуплени высокого разрешения Автор: Алекс ЭкслерНе нужно быть великим пророком, чтобы предсказать рный рост популярности сетевых накопителей (NAS) и бурл мультимедийных плееров. Также легко предположить, что последние, да с собственным накопителем, будут включать в


1.2.2. Изменение разрешения экрана

Из книги Реестр Windows автора Климов Александр

1.2.2. Изменение разрешения экрана В некоторых случаях Fedora 8 почему-то неправильно устанавливает разрешение экрана: устанавливается меньшее разрешение, чем поддерживается монитором к видеокартой. Для изменения разрешения экрана выберите команду меню


Запрещение/Разрешения на запуск программ

Из книги Delphi. Учимся на примерах автора Парижский Сергей Михайлович

Запрещение/Разрешения на запуск программ Запрещение запуска программWindows позволяет ограничить доступ к программам, кроме разрешенных в специальном списке.Для ограничения запускаемых программ надо открыть раздел HKCUSOFTWAREMicrosoftWindowsCurrentVersonPoliciesExplorerи создать там ключ


Изменение разрешения экрана

Из книги Adobe Photoshop CS3 автора Завгородний Владимир

Изменение разрешения экрана Для изменения разрешения экрана (например, на 800?600) следует внести следующие изменения в реестр: Ключ:[HKEY_LOCAL_MACHINEConfig001DisplaySettings]Значение ключа: "Resolution"="800,


Смена глубины разрешения цвета

Из книги Microsoft Windows SharePoint Services 3.0. Русская версия. Главы 9-16 автора Лондер Ольга

Смена глубины разрешения цвета Глубина разрешения цвета – это объем данных, отводимый на запись информации о цвете. Обычно эта величина исчисляется в количестве бит на каждый цветовой канал. Модели RGB и L*a*b имеют по 3 цветовых канала, CMYK – 4. Соответственно, при глубине


Разрешения служб Windows SharePoint

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Разрешения служб Windows SharePoint Службы Windows SharePoint включают 32 разрешения пользователей, которые определяют, какие действия пользователи могут выполнять на узле. Разрешения сгруппированы в уровни разрешений. По сути, каждый уровень разрешений является именованным набором


3.5. Разрешения IPC

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

3.5. Разрешения IPC При создании нового объекта IPC с помощью одной из функций getXXX, вызванной с флагом IPC_CREAT, в структуру ipc_perm заносится следующая информация (раздел 3.3):1. Часть битов аргумента oflag задают значение поля mode структуры ipc_perm. В табл. 3.3 приведены биты разрешений для


3.3.1. Изменение разрешения экрана

Из книги Цифровой журнал «Компьютерра» № 162 автора Журнал «Компьютерра»

3.3.1. Изменение разрешения экрана Начнем с изменения разрешения экрана. Щелкните правой кнопкой мыши на рабочем столе и выберите команду Разрешение экрана. В появившемся окне (рис. 3.10) вы можете выбрать экран, разрешение которого вы хотите изменить (если к системе


Как настроить Windows для работы с дисплеями высокого разрешения Андрей Васильков

Из книги 19 смертных грехов, угрожающих безопасности программ автора Ховард Майкл

Как настроить Windows для работы с дисплеями высокого разрешения Андрей Васильков Опубликовано 01 марта 2013Всё чаще на форумах можно прочесть о том, что автоматическая настройка изображения в ОС Windows приводит к визуальному дискомфорту – слишком мелкий шрифт затрудняет


Не экспортировать глобальные разрешения чтения/записи

Из книги C++ для начинающих автора Липпман Стенли

Не экспортировать глобальные разрешения чтения/записи Не делайте этого! Разрешения на доступ к файлам, устанавливающие, кто может читать и изменять файл, — очень простое понятие. Главное заключается в том, что чем больше вы предоставляете доступа к файлам вашей системы,


8.5.2. Оператор разрешения области видимости

Из книги автора

8.5.2. Оператор разрешения области видимости Имя члена пользовательского пространства дополняется поставленным спереди именем этого пространства и оператором разрешения области видимости (::). Использование неквалифицированного члена, например matrix, является ошибкой.


9.2. Три шага разрешения перегрузки

Из книги автора

9.2. Три шага разрешения перегрузки Разрешением перегрузки функции называется процесс выбора той функции из множества перегруженных, которую следует вызвать. Этот процесс основывается на указанных при вызове аргументах. Рассмотрим пример:T t1, t2;void f( int, int );void f( float, float );int