gpt4 book ai didi

linux - 如何找出进程启动时使用的原始用户名?

转载 作者:IT王子 更新时间:2023-10-29 00:43:14 24 4
gpt4 key购买 nike

有一个 perl 脚本需要以 root 身份运行,但我们必须确保运行该脚本的用户最初不是以用户“foo”登录,因为它将在脚本执行期间被删除。

那么,我如何才能确定自登录以来可能已经多次 su-ed 的用户是否在该链中的任何时候都没有冒充“foo”?

我发现了一个有趣的 perl 脚本,它调用了以下两个 shell 脚本,但我认为它只适用于 Solaris。

my $shell_parent = 
`ps -ef | grep -v grep | awk \'{print \$2\" \"\$3}\' | egrep \"^@_\" | awk \'{print \$2}'`;

my $parent_owner =
`ps -ef | grep -v grep | awk \'{print \$1\" \"\$2}\' | grep @_ | awk \'{print \$1}\'`;

这需要同时在 Linux 和 Solaris 上工作,我宁愿消除对 shell 的重复调用,而将整个过程保留在 Perl 中。

最佳答案

快速而肮脏(仅限 UNIX):

my $user = (split /\s/,`who am i`)[0];

我是谁 命令返回 TTY 的所有者 - 即您登录时的身份。

如果您想在纯 perl 中执行此操作:

use POSIX;
my $tty = POSIX::ttyname(1); # The tty we are running in
my $uid = (stat $tty)[4]; # The owner uid of that tty
my $user = getpwuid($uid); # The user with that uid

这将返回正确的用户,即使在多次 su 之后。这通常会吓坏您的(经验不足的)系统管理员。

关于linux - 如何找出进程启动时使用的原始用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2441939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com