首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux,用进程存储凭证,它是子代还是孙辈?

Linux,用进程存储凭证,它是子代还是孙辈?
EN

Stack Overflow用户
提问于 2013-07-25 16:20:11
回答 1查看 184关注 0票数 1

我正在linux(Ubuntu)上做一个小的附带项目,在这个项目中,我需要通过身份验证才能访问服务。我的想法是,这个身份验证应该与进程和它的子进程一起存储,而不是与linux用户本身一起存储。

此身份验证应该通过使用用户名、密码和脚本/应用程序(任何应用程序)调用"myapplogin“来完成,以便使用这些凭据运行。我希望有可能在这一过程中的任何子女以及任何孙辈等人中保留这些证书。

我已经为这个功能研究了几个选项。

  1. 将登录id或其他内容存储在环境变量中。据我所知,这是传给任何儿童的。但是,环境变量可以由进程写入,从而允许它获得它不应该拥有的访问权限。
  2. 登录时,存储已登录的进程的进程id,然后在此服务的每个操作上,检查它是否具有存储的pid,或者在其祖先的任何地方是否存在存储的pid。如果这个祖先增长很大,如果服务经常被访问,这可能会变得太慢。然后,一种选择是缓存任何祖先的pid,但这会对操作系统中的pid重用产生安全影响。
  3. 使用进程组并将其与登录链接,但进程本身也可以更改它,允许它加入现有的组,而不需要实际登录。

有办法这样做吗?最好是存储在进程中的东西,任何新的子进程都继承,进程不可能覆盖,并且可以从内核模块外部读取。

也许我只是忽略了一些明显的东西?如能就此提供任何意见,我将不胜感激。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-26 02:47:08

我可以提供两种方法,取决于您提到的哪种“服务”:

1.如果您提到的服务如下:网络管理、磁盘安装/汇总等:

Linux内核实现了功能机制。内核定义了各种功能。这些功能可以分配给不同的用户。能力的基本规则是:将最小的权限集分配给一个用户以完成其任务。

因此,您可以使用能力概念,您需要做的是:

(1)列出您需要限制访问的所有服务。

(2)为列出的服务定义新功能或使用现有功能。

(3)更改内核源代码,以检查一个进程在访问您列出的服务时的功能。通常,这些检查位于系统调用项中。

(4)修改init/登录进程的源代码,当用户登录到系统时,根据您的访问控制规则为不同的用户分配必要的功能。

2.如果您提到的服务类似于执行某种系统命令。

(1)在/etc/目录下创建一个文件(如watch_dog或else ),在这个文件中,您可以定义一种格式来列出特定用户可以执行特定命令的格式。当然,文件格式可以是非常花哨的,例如可以使用正则表达式。要解析该文件,可以使用Bison或Lex/Yacc。

(2)在Linux内核初始化过程中,可以解析文件/etc/watch_dog。

(3)在Process叉()期间,将/etc/watch_dog规则设置为与进程相关的task_struct。

(4)在exec()条目中,应用/etc/watch_dog规则来检查它是否可以执行程序。

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

https://stackoverflow.com/questions/17863527

复制
相关文章

相似问题

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