我有一个unix命令' abc‘,它给了我一个输出,这个abc位于我的服务器上。
但是,当我在服务器上运行这个命令时,我希望限制它的输出,让人们看到它。我的意思是..。就像。如果我说:
ls脏名
我可以在控制台上看到上面命令的输出。
所以,如果命令是从命令行运行的,我不想在控制台上得到回响。我不能使用/dev/null,因为我使用的是程序中的相同命令,其中需要将输出分配给变量,然后在我的应用程序中进一步使用它。
但是,当我从我的程序调用这个命令时,我想得到这个命令的输出。我如何区分这方面的呼吁。
发布于 2015-12-22 14:11:31
命令whoami向您提供当前日志用户,命令last -i输出系统中最后一个日志用户的信息,包括IP地址(第3列)和时间戳或一个字符串,说明用户仍然登录。
考虑到这一点,您可以通过管道传递以下命令:
last -i | grep $(whoami) | grep 'still logged in'它将提供如下的输出:
(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的方法,以求得到答案。
发布于 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以获得所需的东西。
https://stackoverflow.com/questions/34417328
复制相似问题