5

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

4

2 回答 2

1

一些想法:

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

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

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

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

于 2013-08-08T20:09:40.700 回答
0

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

于 2013-08-09T03:57:07.323 回答