首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在最新的Linuxes上使用/bin/login分支

问为什么在最新的Linuxes上使用/bin/login分支
EN

Stack Overflow用户
提问于 2016-05-20 01:49:14
回答 1查看 294关注 0票数 3

回到过去Unix的美好时光(例如,史蒂文斯的Unix网络编程,第63页,1990),init forked,孩子运行getty。然后,getty获取用户名并执行/bin/login,将用户名传递给它。然后登录要求输入密码,检查凭据,然后执行/etc/passwd中的任何内容,通常是shell,例如/bin/bash。

getty、login和shell都有相同的PID,这是由于exec的性质和缺少fork。

现在我看到/bin/login派生并运行子进程中的shell,而父进程只是等待子进程。至少这是Linux上的逻辑。为什么会这样呢?它的作用是什么?谁做了这个决定??我可以生成登录而不使用fork吗??

这是一种痛苦,至少对我来说。我正在使用forkpty构建一个伪终端,并在从机端运行login。例如,我使用forkpty的pid结果在孩子中发出一个信号。当然,我需要的是bash的pid,而不是login的pid。现在这两个pid不同了,我必须找到bash的pid,通过popen运行一个令人讨厌的“ps -o pid= --ppid LOGINPID”。

斯图尔特

EN

回答 1

Stack Overflow用户

发布于 2018-07-20 20:20:47

根据https://github.com/shadow-maint/shadow/blob/master/src/login.c#L1186的说法:“我们必须在setuid()之前派生,因为我们需要调用pam_close_session()作为根。”所以要归功于PAM。代码是以USE_PAM为条件的,所以我猜您可以在配置时禁用PAM来重新编译映像。

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

https://stackoverflow.com/questions/37330602

复制
相关文章

相似问题

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