我正在研究Linux(Ubuntu)上的一个小项目,在那里我需要通过身份验证才能访问服务。我的想法是,这个身份验证应该与进程一起存储,它是儿童,而不是与linux用户本身一起存储。Linux,使用进程存储凭证,它是儿童,孙辈吗?
这个身份验证应该通过调用例如带有用户名,密码和脚本/应用程序(任何应用程序)的“myapplogin”来使用这些凭证运行。 我希望有可能将这些凭据保留在由此过程制作的任何儿童中,以及任何孙辈等。
我已经看过这个功能的几个选项。
在环境变量中存储登录ID或其他东西。据我所知,这是传给任何孩子的。 但是,环境变量可以由进程写入,从而允许它可能获得它应该没有的访问权限。
登录时,存储登录的进程的进程ID,然后存储对该服务的每个操作的进程ID,检查它是否具有存储的pid,或者存储的pid是否存在于其祖先的任何位置。 如果这个祖先变大,并且服务经常被访问,这可能会变得太慢。 然后,一个选项是缓存任何位于血统中的pid,但这可能会对操作系统中的pid重用产生安全隐患。
使用过程组和链接,一个登录,但也可以通过过程本身发生变化,允许它可能加入现有组无需实际登录。
有什么办法去做这个?优选地,它应该是与进程一起存储的东西,任何新的子进程都是继承的,不可能被进程覆盖,并且可以从内核模块外部读取。
也许我只是忽略了一些明显的东西?我是有这方面的投入感激=)
感谢您花时间写这篇文章,但不幸的是我不是这个样子,我不知道我在做什么= /然而,你让我走上解决方案的道路,我认为这将是完美的=) – Wildex999
解决方案我想我'我会去的是setgroups。它允许我通过将进程设置为辅助组来标记进程。将一个组设置为一个进程需要SETGID(或root)的功能,所以我可以在给出一个组后,停止更改/添加组。这些小组由儿童继承,但在使用sudo时丢失了。该组不属于一个用户,而是一个过程,这是我想要的。 现在我只需要找到一种方法从知道PID的内核模块中检索进程的组,但这应该是可能的,对吧? =) – Wildex999