我想知道 - 是否有任何已知的技术可以从任何位置控制访问共享内存对象,但经授权的程序?
举例来说,可以说,我创建使用共享内存段在程序P,要由Q访问,并且我让读写。 用品质,因为我已经给它(Q)所需的权限,这样做(如组特定的用户,等运行),我可以访问它。
不过,我猜有时候我们可能会从一个程序R接入这种共享内存的情况下 - 只需连接到它,修改它。 要停止这一点,你可以使存储段只读-但现在计划[R仍然可以读什么是在内存中。
我的问题是在部分 -
有没有一种办法,
一个)允许仅Q个访问共享存储器?
B)数字是否读经的人除了自Q做 - 和谁做的? [这甚至可能吗?对于加分,这哪是做跨平台? [大概不会,但没有伤害尝试:)]
在什么情况下可以一个流氓程序连接到共享内存? 我相信一个方式是,如果用户能够利用OS孔,成为启动该程序的用户。 任何其他方面?
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
在回答问题1A),你可以使用正常的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身份运行将能够访问你的记忆 - 这是在访问任何其他资源没有什么不同。 根可以总是* IX系统上访问任何内容; 等任何利用该升级用户根将允许访问任何共享存储器区。