gpt4 book ai didi

c - 保持用户环境变量执行 gksu

转载 作者:太空狗 更新时间:2023-10-29 12:05:24 25 4
gpt4 key购买 nike

我在 c/gtk 中有一个用 gksu 打开的程序。问题是,当我使用 getenv("HOME") 获取环境变量 $HOME 时,它显然返回“root”。我想知道是否有办法知道谁是执行 gksu 的用户或获取他的环境变量的方法。提前致谢!

最佳答案

请参阅手册页。使用 gksu -k command...保护环境(特别是 PATHHOME )。

或者,如 Lewis Richard Phillip C 所示,您可以使用 gksu env PATH="$PATH" HOME="$HOME" command...重置命令的环境变量。 (逻辑是父 shell,以用户权限运行的那个,替换变量,并且 env 在获得 super 用户权限时重新设置它们。)

如果您的应用程序只应以 root 权限运行,您可以编写一个启动器脚本——就像许多其他应用程序一样。脚本本身基本上就是

#!/bin/sh
exec gksu -k /path/to/your/application "$@"

#!/bin/sh
exec gksu env PATH="$PATH" HOME="$HOME" /path/to/your/application "$@"

脚本安装在/usr/bin , 以及您的申请 /usr/bin/yourapp-bin/usr/lib/yourapp/yourapp . exec意味着该命令替换 shell;即 exec 之后什么都没有命令将永远被执行(除非应用程序或命令根本无法执行)——最重要的是,当您的应用程序开始执行时,内存中不会有额外的 shell。

虽然 Linux 和其他类似 POSIX 的系统确实有有效身份(定义应用程序可能执行的操作)和真实身份(定义用户是做手术),gksu修改所有身份。特别是,同时 getuid()返回真实用户 ID,例如 set-UID 二进制文件,它将在 gksu 时返回零(“root”)被使用。

因此,以上启动脚本是解决您问题的推荐方法。这也是一个常见的;运行

file -L /usr/bin/* /usr/sbin/* | sed -ne '/shell/ s|:.*$||p' | xargs -r grep -lie launcher -e '^exec /'

查看哪些命令是(或声明自己是)您系统上的启动器脚本,或者

file -L /bin/* /sbin/* /usr/bin/* /usr/sbin/* | sed -ne '/shell/ s|:.*$||p' | xargs -r grep -lie gksu

查看哪些使用gksu明确地。采用已知的好方法没有坏处.. ;)

关于c - 保持用户环境变量执行 gksu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15101854/

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