繁体   English   中英

如何在干净的环境中从C调用bash?

[英]How can I call bash from C with a clean environment?

我正在尝试设置我的计算机,以便我可以使用连接到python脚本的外部设备对自己进行身份验证。 我开始用自己的程序替换inittablogin程序,我已经能够进入bash shell。 问题是它没有得到像login给出的那样(我推测)的新环境。 我知道有办法让我弄乱环境,但我还没有找到一种方法来给它一个“默认”配置,即使这样的事情是有道理的。

一些想法:

首先,在大多数情况下使用可插入登录架构PAM会更好。 这将确保所有支持PAM的应用程序和服务都可以使用身份验证方法(例如ssh),并且无法使用常规服务绕过它。

如果您真的想要替换login我建议您使用unsetenv为每个环境变量集清除环境(您可以使用environ来确定已设置的变量)。 在清理环境之后,你可以使用类似exec的调用来用bash替换你的程序,在这种情况下环境将保持不变。 您可能希望添加命令行参数-l以启动bash,因为它将通过login调用。

Bash在启动时运行一些init脚本。 您可以检查/etc/profile/etc/bashrc和类似文件,查找您不想设置的环境变量。

如果你想依赖env (因为它应该出现在每个linux系统上都不是那么糟糕),你可以使用env -i bash bash在干净的环境中调用bash。

当main(int argc,char * argv [],char * envp [])由操作系统调用时,第三个参数包含环境。 所以只需保存它的副本,直到你需要调用bash。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM