Совместно используемая память POSIX имеет ту же систему разрешений, что и файлы - если вы запустите ipcs
, вы увидите разрешения сегментов разделяемой памяти в вашей системе:
$ ipcs -m
IPC status from <running system> as of Tue Jul 14 23:21:25 BST 2009
T ID KEY MODE OWNER GROUP
Shared Memory:
m 65536 0x07021999 --rw-r--r-- root wheel
m 65537 0x60022006 --rw-r--r-- root wheel
В ответ на вопрос 1а) вы можете использовать обычную систему разрешений UNIX, чтобы разрешить доступ только определенному пользователю и / или группе. Это можно контролировать с помощью shmctl
:
struct ipc_perm perms;
perms.uid = 100;
perms.giu = 200;
perms.mode = 0660; // Allow read/write only by
// uid '100' or members of group '200'
shmctl(shmid, IPC_SET, &perms);
Для 1b) я не думаю, что существуют какие-либо интерфейсы аудита для доступа к общей памяти.
Что касается вашего второго вопроса, любой процесс, выполняющийся от имени владельца / группы shm или от имени root, сможет получить доступ к вашей памяти - это ничем не отличается от доступа к любому другому ресурсу. Root всегда может получить доступ ко всему в системе * ix; и поэтому любой эксплойт, который поднял пользователя до root, разрешил бы доступ к любой области совместно используемой памяти.