为用户登录创建非 shell 命令时我需要知道什么?

为用户登录创建非 shell 命令时我需要知道什么?

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

我被要求提供一个不需要 Linux 知识即可使用且功能受限的管理界面。

我认为处理这个问题的最佳方法是使用控制台登录(通过 ssh 或串行端口)来显示选项菜单。假设我有一个名为 的程序,admin_menu它可以处理我想要的所有任务。

因此,我应该能够在 /etc/password 中创建一行,如下所示:

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

创建程序时我需要注意哪些特殊事项admin_menu?直接回答固然好,但提供指向优质文档的链接则更好。

我希望了解更多信息的一般领域包括:

  • 我需要设置哪些环境变量?哪些需要我自己设置?
  • 生成子进程时有什么特殊考虑吗?
  • 我的菜单进程终止后会发生什么?
  • 我是否使用 STDIO 与控制台或其他接口进行交互?

答案1

脚本可以充当登录 shell。您需要将 /local/sbin/admin_menu 添加到/etc/shells。否则,ssh 登录(可能还有其他登录)将无法工作,并且无法解释原因(如果我没记错的话)。

有些环境变量会从客户端传输过来,比如窗口大小。有些会在登录系统时设置。聚丙烯酰胺可以设置其中一些,但我没有示例。

我相信,菜单进程终止后,客户端就会被注销。我根据对/bin/bash终止时发生的情况的观察得出了这一结论。

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

答案2

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

例如,如果程序恰好是 vi 之类的程序,用户可以使用“:!/bin/sh”并进入命令行。同样,在使用脚本时,用户输入通常被用作命令行中的数据 - 这也可能被滥用来获取命令行。如果菜单界面提示您打印一个文件,该文件可能会在命令“lpr $input”中使用,如果输入的文件名是“myfile.txt; /bin/sh”,会发生什么情况?

还有其他几种方法可以突破命令行,在设置接受用户输入的捕获帐户时需要非常小心。

相关内容