我有一个创建四个共享内存对象的程序。内存创建例程将shm_unlink()
在尝试创建它们之前进行调用,并且程序将shm_unlink()
在运行结束时调用另一个例程以将其删除。
今天,当我尝试重新创建对象2-4时,对对象2-4(但不是对象1)“权限被拒绝”。Linuxfuser
显示它们全都属于同一进程,因此我无法终止这一进程。
我去了/dev/shm
,做了ls -l
,发现2-4 root拥有的,而不是我的须藤用户。我很少以root用户身份登录,所以我不知道他们如何成为root用户所拥有。为了解决该问题,我以root用户身份登录并手动删除了它们。
我的问题是:是否有一种编程方式可以删除其他用户(例如root)拥有的共享内存对象而无需以该用户身份登录?有没有一种方法可以调用chown
shm对象并更改所有者?
根目录可以删除任何用户拥有的共享内存(或其他IPC项目)。如果您需要实用的方法来执行此操作,请以root用户身份执行。
否则,您可能需要在创建项目时或之后更改对所创建项目的权限。所有文件系统条目(包括不是文件的东西)都使用POSIX权限,因此,您需要确保删除该项目的用户可以写入该项目(并且该删除用户可以写入该目录上方的目录)。
确保这一点的较不理想的方法是使该项目(及其父目录)世界可写。当然,这会带来巨大的安全漏洞,一般不建议这样做。
如果运行的进程以root身份启动,或者从普通用户过渡到root身份,然后再过渡,则创建的IPC项目很可能归root所有。如果可以修改执行此操作的过程,则您可以使该过程具有适当的组权限来创建项目,以允许启动用户以外的其他用户删除该项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句