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