首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用/dev/urandom生成的秘密令牌是保护守护进程的好方法吗?

使用/dev/urandom生成的秘密令牌是保护守护进程的好方法吗?
EN

Stack Overflow用户
提问于 2009-05-29 09:01:39
回答 4查看 1.3K关注 0票数 4

我有一个守护进程,它生成子进程。有时,这些子进程需要与守护进程通信。我希望确保只授权这些子进程与守护进程通信。

我想在以下几个方面实施:

  • 在启动期间,守护进程通过读取/dev/urandom生成一个随机的128字节秘密令牌。/dev/随机是没有好处的,因为它可能会阻塞读取器的任意时间。
  • 守护进程侦听Unix域套接字。
  • 守护进程将秘密令牌和套接字的文件名放置在环境变量中。它生成的每个子进程都可以使用文件名和秘密令牌连接到守护进程。
  • 除非秘密令牌是正确的,否则守护进程将拒绝连接。

问题:

  • 我知道/dev/随机比/dev/urandom具有更高的熵。但是/dev/urandom足够好吗?如果没有,我应该使用什么?
  • 令牌的大小足够大吗?
  • 我是否应该锁定存储令牌的内存?我不认为这是必要的,因为守护进程每次启动时都会生成不同的令牌,所以当攻击者设法窃取硬盘驱动器并从交换文件中提取令牌时,它就已经无用了。
  • 我是否应该取消在关机期间存储令牌的内存?
  • 还有什么我该做的吗?

由于各种需求,我不能使用匿名管道来允许守护进程和子进程之间的通信。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-30 22:05:27

是的,/dev/urandom提供的安全性已经足够好了。很多软件都将其用于随机性( SSL、身份验证等)。当生成某种需要多年安全的令牌时(例如证书的私钥),几乎是唯一的时候/dev/随机是一个好主意。

有人提到,如果您具有相同的UID,则可以查看进程的内存。您可以通过让内核认为它是一个setuid进程来避免这种情况,也就是说,如果主进程作为根进程运行,您可以向非特权用户分叉、执行和使用setuid()。其他具有相同UID的进程将无法查看该进程的内存。

凭据查找方法也适用于命名的UNIX套接字,而不仅仅是套接字对。

票数 1
EN

Stack Overflow用户

发布于 2009-05-29 19:05:38

最简单的方法是为每个子进程在服务器中创建管道/套接字对。给出子进程的一端,并保留另一端。在该管道/套接字上出现的任何内容都必须来自该子进程。

另一种方法是要求操作系统从Unix套接字中获得凭据(pid、uid、gid)。在Linux上,您将使用getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) (man 7 socket)。Solaris有getpeerucred。不幸的是,这不是可移植的,但是许多系统对于Unix套接字具有类似的功能。虽然它很复杂,但D-总线包含在许多不同的系统上执行此操作的代码。

票数 3
EN

Stack Overflow用户

发布于 2009-05-29 09:21:52

那么,如果您要将令牌放入环境变量中,那么任何具有与这些进程相同或更高权限(即UID)的人都将能够读取令牌,然后使用该令牌!这使得问题的其余部分变得毫无意义!?如果您担心同一框中进程之间的安全性(您提到的是本地IPC),那么不要使用环境变量来存储令牌--很容易检查这些令牌(EVs)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/925086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档