我有一个生成子进程的守护进程。有时这些子进程需要与守护进程进行通信。我想确保只有这些子进程被授权与守护进程通信。
我想按如下方式实现:
- 在启动期间,守护进程通过读取 /dev/urandom 生成一个随机的 128 字节秘密令牌。/dev/random 不好,因为它可能会在任意时间内阻塞阅读器。
- 守护进程侦听 Unix 域套接字。
- 守护程序将秘密令牌和套接字的文件名放在环境变量中。它产生的每个子进程都可以使用文件名和秘密令牌连接到守护进程。
- 除非秘密令牌正确,否则守护程序会拒绝连接。
问题:
- 我知道 /dev/random 的熵比 /dev/urandom 高。但是 /dev/urandom 是否足够好?如果没有,我应该使用什么?
- 令牌的大小是否足够大?
- 我应该锁定存储令牌的内存吗?我认为没有必要,因为守护程序每次启动时都会生成不同的令牌,所以当攻击者设法窃取硬盘驱动器并从交换文件中提取令牌时,它应该已经没用了。
- 我应该在关机期间取消存储令牌的内存吗?
- 还有什么我应该做的吗?
而且由于各种要求,我不能使用匿名管道来允许守护进程和子进程之间的通信。