首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将linux命令执行与命令行和程序区分开来

问如何将linux命令执行与命令行和程序区分开来
EN

Stack Overflow用户
提问于 2015-12-22 13:46:52
回答 2查看 62关注 0票数 0

我有一个unix命令' abc‘,它给了我一个输出,这个abc位于我的服务器上。

但是,当我在服务器上运行这个命令时,我希望限制它的输出,让人们看到它。我的意思是..。就像。如果我说:

ls脏名

我可以在控制台上看到上面命令的输出。

所以,如果命令是从命令行运行的,我不想在控制台上得到回响。我不能使用/dev/null,因为我使用的是程序中的相同命令,其中需要将输出分配给变量,然后在我的应用程序中进一步使用它。

但是,当我从我的程序调用这个命令时,我想得到这个命令的输出。我如何区分这方面的呼吁。

EN

回答 2

Stack Overflow用户

发布于 2015-12-22 14:11:31

命令whoami向您提供当前日志用户,命令last -i输出系统中最后一个日志用户的信息,包括IP地址(第3列)和时间戳或一个字符串,说明用户仍然登录。

考虑到这一点,您可以通过管道传递以下命令:

代码语言:javascript
复制
last -i | grep $(whoami) | grep 'still logged in'

它将提供如下的输出:

代码语言:javascript
复制
(username) pts/2        0.0.0.0          Wed Dec 23 18:58   still logged in   
(username) :0           0.0.0.0          Wed Dec 23 11:13   still logged in

因此,如果您在同一台主机上运行shell,则IP将为0.0.0.0,否则将有所不同。您可以通过命令末尾的管道awk来提取IP字符串。

但是,在做一件事并做好的unix系统中,我建议采用一种不同的方法,将命令分成两个不同的命令:

  • 客户端要使用的命令,其中输出是您希望客户端看到的任何内容。
  • 另一个命令(提供两个选项,因为问题中没有太多细节):
    • 或者扩展第一个命令,添加附加的输出,然后使用应用程序中的这个输出
    • 或者仅仅生成额外的输出,并使用应用程序中的两个命令的组合。

​

通过遵循这种方法,您可以获得一些好处:

  • 执行检查以验证命令是从何处发出的,不再需要执行检查。
  • 避免耦合问题
  • 易于维护

更新的:添加了提取当前用户IP的方法,以求得到答案。

票数 1
EN

Stack Overflow用户

发布于 2015-12-24 05:56:17

你对整个设置有点模糊,所以我得推断几件事。由于您提到了“我的”服务器,我假设您可以设置文件的权限,更改文件的所有权,等等(例如,您可以成为root用户)。

我还必须推断,目标abc程序只产生一些输出,不需要修改任何文件来谈论(例如) /tmp/temp.$$以外的其他文件。

例如,让我们从您的主目录中执行此操作。将程序abc移动到$HOME/private_bin,并将目录权限设置为700,这意味着只有您可以执行它。

创建第二个目录:具有正常权限的$HOME/public_bin。创建一个"launcher“程序,让我们将其命名为abcpub,并将其放在这个目录中。将abcpub的权限设置为4741。它现在是一个setuid程序。请注意,任何非根用户都可以对其拥有的文件执行此操作。这不像创建sudo,因为普通用户需要执行chown root ...。

现在我们准备好了。

您可以随时访问真正的abc程序。其他人则无法直接访问abc。

启动程序abcpub将允许其他人访问abc,但是启动程序可以应用您想要的任何限制:包括没有访问、输出到/dev/null等。abcpub可以查看getuid和geteuid来确定是谁在执行它,还是其他人。

我们使用您自己的uid和home目录完成了上面的示例。但是,我们可以通过在/etc/passwd中创建一个"abc“用户和一个/home/abc来重复这个过程。可以使用/sbin/nologin的外壳来设置abc用户。因此,它类似于nobody,不会对任何东西造成伤害。

通过创建一个setgrp程序,而不是setuid,这样做可能会更好,因为这样可以更好地实现。原始用户可以保留其用户权限,但仍然可以通过新组进行访问。

此外,可能还可以配置sudo以获得所需的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34417328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档