要在shmget中用作密钥的安全值

Safe values to be used as key in shmget

本文关键字:安全 密钥 shmget 要在      更新时间:2023-10-16

我使用shmget在Linux上的项目进程之间共享数据。

int shmget(key_t key, size_t size, int shmflg);

然而,任何其他程序也可以调用shmget,因此可能会导致密钥冲突(因为我使用常量作为调用shmgot的密钥,所以我必须使用常量而不是生成的密钥,因为横向进程是单独构建和运行的)。

在shmget中用作密钥的安全值应该是什么?

没有安全值,您(以及其他创建共享段的进程)应该使用IPC_EXCL来确保没有冲突。然而,后者应该确保其他程序不会开始写入您的片段(除非它们写得很糟糕)。

你可以尝试在ftok()中建立你的"私有"密钥常量,但你知道这不安全。如果你与某个东西发生冲突,你将无法告诉你的程序这不是正确的密钥。还要记住:

只有CCD_ 2的低阶8位是有效的。如果这些位为0,则未指定ftok()的行为。

换句话说,不要在那里传递0;)。

在任何情况下,您都应该认真地考虑创建一些沟通渠道。服务器用id写一个文件就足够了,然后由其他程序读取。

根据其他想法,您可以尝试将服务器PID作为id传递,如果其他进程至少可以这样做的话。这样可以让它更安全一些。

我建议您使用POSIX shm_open(与mmap一起使用),只要您不使用与其他软件相同的命名区域,它就不会存在与ftok冲突的问题。