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

时间:2013-08-07 03:39:47

标签: c linux

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

2 个答案:

答案 0 :(得分:1)

一些想法:

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

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

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

如果你想依赖env(因为它应该存在于每个Linux系统上,因为它应该出现在那里)你可以使用env -i bash在干净的环境中调用bash。

答案 1 :(得分:0)

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