【问题标题】:How can I get the current username from a script run with pkexec?如何从使用 pkexec 运行的脚本中获取当前用户名?
【发布时间】:2017-08-04 04:37:27
【问题描述】:

我使用pkexec 以root 身份执行python 脚本,我使用working_dir = os.getenv('HOME') 获取用户名,但它总是返回root 而不是当前用户的test1。

如何获取运行 pkexec 的用户?

如果该信息有任何用途,脚本位于 /usr/bin 中。

【问题讨论】:

  • root 是用户。 “以 root 身份执行”意味着“以用户 root 身份运行”。这并不意味着“以用户 test1 的身份运行,但具有额外的特权”。如果进程通过 suid 以 root 身份运行,请使用getuid。如果它通过 sudo 运行,请使用 SUDO_USER。如果它通过 su 运行,请尝试父进程。如果它通过 cron 运行,则没有其他用户参与。
  • 我已经按照建议的答案使用了它,但我不确定它是否适用于 python 2.7。它通过 pkexec 运行
  • 我尝试使用 pwd.getpwuid(os.getuid()).pw_name 获取它,但它仍然返回 root。我不确定如何获取 pkexec_uid
  • PKEXEC_UID 是一个环境变量。使用os.environ["PKEXEC_UID"]

标签: python linux python-2.7


【解决方案1】:

对于那些寻找纯 bash 解决方案的人,这会发现用户使用 sudo 或 pkexec 运行:

if test -z "$SUDO_USER"
then
    USER=$(getent passwd $PKEXEC_UID | cut -d: -f1)
else
    USER=$SUDO_USER
fi

【讨论】:

    【解决方案2】:

    感谢其他人,最后,以下是我为获得当前用户所做的工作:

    import os
    import pwd
    
    user = pwd.getpwuid(int(os.environ["PKEXEC_UID"])).pw_name
    working_dir = '/home/' + user
    

    【讨论】:

      【解决方案3】:

      The sudo man page 描述了保存调用它的用户信息的环境变量。

      import os
      print os.environ["SUDO_USER"]
      

      【讨论】:

      • 这可以在 python 2.7 中使用吗?我无法让它工作`文件“/usr/lib/python2.7/UserDict.py”,第 23 行,在 getitem 中引发 KeyError(key) KeyError: 'SUDO_USER'`
      • 如果我使用 pkexec 会怎样?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多