我有一个unix命令'abc',它给了我一个输出 这个abc在我的服务器上。
但是当我从服务器运行此命令时,我想限制它的输出被人们看到。 通过上述声明,我的意思是...... 例如。如果我说:
ls dirname
我可以在控制台上看到上述命令的输出。
因此,如果命令是从命令行运行的,我不想在控制台上回显。我不能使用/ dev / null,因为我在程序中使用相同的命令,我需要将输出分配给变量,然后在我的应用程序中进一步使用它。
但是,当我从程序中调用此命令时,我想获取此命令的输出。 如何在这方面区分电话。
答案 0 :(得分:1)
命令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字符串。
然而,坚持Do One Thing and Do It Well的unix系统中的哲学,我建议采用不同的方法,将命令分成两个不同的命令:
遵循这种方法可以获得一些好处:
已更新:添加了在答案开始时提取当前用户的IP的方法。
答案 1 :(得分:1)
你对整个设置有点模糊,所以我不得不推断一些事情。既然你提到过,"我的"服务器,我假设您可以设置文件权限,更改文件的所有权等(例如,您可以成为root用户)。
我还必须推断目标abc
程序只产生一些输出,并且不需要修改任何文件[除了(例如)/tmp/temp.$$
]
例如,让我们从您的主目录中执行此操作。将程序abc
移至$HOME/private_bin
并将目录权限设置为700
,这意味着只有您才能执行该目录。
创建具有正常权限的第二个目录:$HOME/public_bin
。创建一个"启动器"程序[让我们称之为abcpub
]并将其放在此目录中。将abcpub
的权限设置为4741
。它现在是setuid
计划。请注意,任何非root用户可以对他们拥有的文件执行此操作。 不就像创建sudo
一样,因为普通用户需要chown root ...
现在我们要设置......
您可以随时访问真正的abc
程序。其他人没有可以直接访问abc
。
启动器abcpub
将允许其他人访问abc
,但启动器可以应用您想要的任何限制:包括无访问权限,输出到/ dev / null等abcpub
可以查看getuid
和geteuid
来确定执行者[您或其他人]
我们使用您自己的uid和home目录完成了上面的示例。但是,我们可以通过创建一个" abc"来重复这个过程。 / etc / passwd中的用户和/home/abc
。可以使用/sbin/nologin
的shell设置abc用户。因此,它类似于nobody
,它不会伤害任何东西。
通过创建setgrp
程序而不是setuid
来实现这一点可能会更好,因为这样可以更好地实现。原始用户可以保留其用户权限,但仍可通过新组访问。
此外,可能可以配置sudo
以获得您想要的内容。