当为用户login创build非shell命令时,我需要知道什么?

我正在为使用Linux的设备开发软件和configuration。

我被要求提供一个pipe理界面,不需要知道Linux的使用和限制能力。

我相信处理这个问题的最好方法是使用控制台login(通过ssh或串口)来显示一个选项菜单。 假设我有一个名为admin_menu的程序来处理所有我想要的任务。

所以,我应该可以像这样在/ etc / password中创build一行:

 admin:x:230:235:Administrative Interface:/home/admin:/local/sbin/admin_menu 

当我创build我的admin_menu程序时,是否有任何特殊的注意事项需要注意? 直接的答案是好的,但指向好的文档甚至更好。

我想了解更多信息的一般领域是:

  • 我可以期望设置什么样的环境variables? 我需要哪些设置自己?
  • 产卵子过程有什么特别的考虑吗?
  • 终止我的菜单过程会发生什么?
  • 我是否使用STDIO与控制台或其他接口进行交互?

脚本可以用作loginshell。 您需要将/ local / sbin / admin_menu添加到/etc/shells 。 否则,sshlogin(也可能是别人)将无法解释为什么(如果我没有记错的话)。

有一些环境variables将从客户端传输,如窗口大小。 一些将被设置login到系统。 PAM可以设置其中的一些,但我没有一个例子。

在菜单进程结束后,客户端退出了,我相信。 我基于观察/bin/bash终止时发生的情况。

如果我是你,我会使用stdin / stdout作为你的input和输出源。

您可以将任何程序放在/ etc / profile条目中的/ bin / sh位置,无论是shell脚本还是可执行二进制文件。 你想要注意的是逃到shell – 如果你试图在程序中捕获它们,你可能不希望它们访问命令行。

例如,如果程序碰巧是vi,用户可以使用“:!/ bin / sh”并到达命令行。 同样的,当使用脚本时,用户input通常被用作命令行中的数据 – 这也可能被滥用以获得命令行。 如果菜单界面提示你input一个文件来打印可能在命令“lpr $ input”中使用的文件,如果input的文件名是“myfile.txt; / bin / sh”,会发生什么?

还有其他几种突破命令行的方式,在设置一个采集用户input的捕获帐户时需要非常小心。