Мне было интересно - существуют ли какие-либо известные методы управления доступом к объекту общей памяти из любого места, кроме авторизованной программы?
Например, скажем, я создаю сегмент разделяемой памяти для использования в программе P, чтобы Q мог получить к нему доступ, и я делаю его чтение-запись. Я могу получить к нему доступ с помощью Q, потому что я дал ему (Q) необходимые разрешения для этого (запуск от имени определенного пользователя с группами и т. д.).
Однако я предполагаю, что есть случаи, когда кто-то потенциально может получить доступ к этой общей памяти из программы R - просто подключившись к ней и изменив ее. Чтобы остановить это, вы могли бы сделать сегмент памяти только для чтения, но теперь программа R по-прежнему могла читать то, что было в памяти.
Мой вопрос по частям -
Есть ли способ,
а) разрешить только Q доступ к разделяемой памяти?
б) выяснить, было ли чтение выполнено кем-либо, кроме Q, и кто это сделал? [Возможно ли это вообще?] Можно ли сделать это кросс-платформенным за бонусные баллы? [Возможно, нет, но попытка не навредит :)]
При каких обстоятельствах мошенническая программа может подключиться к общей памяти? Я предполагаю, что один из способов — это если пользователь может использовать дыры в ОС и стать пользователем, запустившим программу. Любые другие?