【问题标题】:Run python3 as root in CentOS在 CentOS 中以 root 身份运行 python3
【发布时间】:2021-07-15 00:38:29
【问题描述】:

我需要以 root 权限运行脚本,但 python3 有不同的行为:

在 ubuntu 中我得到:

/ubuntu/server$ sudo python3
[sudo] password for myuser: 
Python 3.6.9 (default, Oct  8 2020, 12:12:24) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pathlib
>>> pathlib.Path.home()
PosixPath('/home/myuser')

在 CentOS 中是;

[centos@localhost ~]$ sudo python3
Python 3.6.8 (default, Aug 24 2020, 17:57:11) 
[GCC 8.3.1 20191121 (Red Hat 8.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pathlib
>>> pathlib.Path.home()
PosixPath('/root')

如何获取Centos中sudo python的用户路径?

【问题讨论】:

  • 如果没有其他方法,os.environ['SUDO_UID'] 应该给你他们的 uid,你可以在 /etc/passwd 中查找。
  • HTF 的答案是正确的——但更明确地说:你的 Ubuntu 实例上的行为是异常值; PosixPath('/root') 是预期的默认值。

标签: python linux centos


【解决方案1】:

code 中的底层逻辑将尝试检查HOME 变量以获取 POSIX 系统上的homedir。您可以使用sudo -E python3sudo --preserve-env=HOME python3 来保存它。

人须藤:

-E, --preserve-env 向安全策略指示用户希望保留其现有环境变量。安全策略可能会返回 如果用户没有权限保存 环境。

--preserve-env=列表 向安全策略指示用户希望将逗号分隔的环境变量列表添加到从 用户的环境。如果出现以下情况,安全策略可能会返回错误 用户无权保护环境。

检查您是否在 Ubuntu 系统上设置了别名,例如:

$ alias sudo="sudo -E"
$ type -a sudo
sudo is aliased to `sudo -E'
sudo is /usr/bin/sudo
sudo is /bin/sudo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2013-12-19
    • 2022-09-29
    • 2020-07-14
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多