sudo:允许一条命令设置一个环境变量

sudo:允许一条命令设置一个环境变量

在我的 Debian Stretch 系统上,我有

Defaults        env_reset

在我的系统中/etc/sudoers。我想设置我的系统,以便在运行时穿梭,我无需输入通话密码

sudo PYTHONPATH=/usr/lib/python3/dist-packages -- /usr/bin/python3 \
                                                  /usr/bin/sshuttle --method auto --firewall

/etc/sudoers.d/sshuttle所以我创建了一个包含内容的文件

username    ALL=NOPASSWD: /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall

但是,我收到错误消息

sudo:抱歉,您不能设置以下环境变量:PYTHONPATH

最优解

  1. 应该允许我通过设置来运行这一命令PYTHONPATH,但不会影响我的安全性须藤一般情况下的设置,即此限制仍应适用于我的sudoers文件中的其他条目。
  2. 不会要求我改变穿梭源代码,即它应该适用于上面指定的确切命令,无需修改。

到目前为止我尝试过的:

  1. 修改/etc/sudoers.d/sshuttle文件以读取username ALL=NOPASSWD: PYTHONPATH=/usr/lib/python3/dist-packages /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall,但这似乎不是有效的语法

笔记:

  1. 我不想运行整个穿梭通过 sudo 命令,作为 a)穿梭除了防火墙部分(这个问题的命令)之外不需要 root 权限,b)因为这样我总是需要输入我的 SSH 密钥的密码(通常通过以下方式解锁)gpg-代理对于我自己的用户,但不适用于 root 用户)。

答案1

如果你需要的 PYTHONPATH 是不变的,你可以使用/usr/bin/env(有史以来最被低估的 unix 工具......):

username    ALL=NOPASSWD: /usr/bin/env PYTHONPATH=/usr/lib/python3/dist-packages /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall

exec或者编写一个简短的包装脚本,在调用 python 脚本之前设置环境。

如果 PYTHONPATH 是不是常量,您也可以使用username ALL=NOPASSWD: ALL,因为用户可以覆盖 sshuttle 使用的任何 python 包,并将代码放在其中执行任何可以想象的操作。

相关内容