停止从命令行启动二进制文件

时间:2013-03-10 17:57:24

标签: c linux

如何使应用程序阻止自己从命令行启动?

我有一个应该由守护进程启动的二进制文件;但是当有人试图从命令行启动二进制文件时,我应该错误地说“无法从命令行启动”。 尝试使用谷歌搜索,但徒劳无功。

PS。 http://www.daniweb.com/software-development/c/threads/449682/stop-launching-from-command-line 我想检查是否有比链接中提到的更好的方法..

2 个答案:

答案 0 :(得分:6)

我不确定是否有防弹答案(如何阻止程序从命令行启动)。你可以考虑

  • 使用isatty(3)进行测试STDIN_FILENO(即0)不是tty
  • 尝试打开/dev/tty(它应该失败),请参阅tty(4)
  • 使用getsid(2)测试您与父母不在同一会话中,或使用setsid(2)开始新会话
  • 自称daemon(3)

我不确定你是否总是想拒绝从终端开始。对于调试,您肯定希望能够从终端启动。如果从终端开始,我实际上只是警告,而不是退出。

您可能希望在标准路径之外安装程序,可能在某个libexec/sbin/目录中。

另请参阅capabilities(7)pty(7)termios(3)

答案 1 :(得分:2)

对于记录,使用isatty(3)进行测试仅在您自己编写二进制文件时才有效。如果您试图阻止人们启动第三方二进制文件,则该方法将失败。

一般来说,为了防止人们从命令行启动特定程序,* nix方式是chown启动它的守护程序所拥有的二进制文件,以及由集团拥有,说no_command_line。然后chmod 705 binary_executables,并将所有不允许的人从组no_command_line中的命令行运行binary_executables。

HTH