修复sudo中http_proxy等环境变量的缺失

在使用 sudo
时,经常发生一些和普通用户或 root
用户直接执行时不一样的现象。
最常见的是,明明配置了全局网络代理 http_proxy
,但是在 sudo
时却还是没有代理。
甚至在某些必须要代理的环境下, sudo
的命令会直接卡主,比如 sudo curl
sudo pip install
等。

这是因为 sudo
会默认清理掉一些环境变量,以确保执行环境的干净,并减少安全风险。 http_proxy
等环境变量,就被默认清理掉了。

修复 http_proxy
等环境变量

使用 sudo visudo
sudo vim /etc/sudoers
,修改 sudo
的配置文件,添加以下一行:

Defaults env_keep += "http_proxy https_proxy ftp_proxy no_proxy"

这里的环境变量可以填写任意内容,这里是以几个代理为示例。
但是某些特殊的环境变量,即使填写了也不会生效,比如 PATH
USER
等。

正常情况下,保存后直接生效。
但如果修改时不小心,写出了语法错误,就会出现以下情况。

修复 /etc/sudoers
中的语法错误

$ sudo vim /etc/sudoers
>>> /etc/sudoers: 语法错误 near line 9 <<<
sudo: /etc/sudoers 中第 9 行附近有解析错误
sudo: 没有找到有效的 sudoers 资源,退出
sudo: 无法初始化策略插件

如果修改 /etc/sudoers
文件出现语法错误并保存后,再次执行 sudo
会出现以上错误(或其英文版)。
这会陷入一种窘境:一方面需要 root
权限来再次修改,另一方面 sudo
却无法使用。

解决方案有四种:

  1. 通过 su
    ,登录 root
    。但是一些系统配置下, root
    是无法登录的,或者强密码设完即丢。
  2. 使用其它 sudo
    类软件。但是,一般是没有安装的,而安装又需要 sudo apt install ...
  3. 重装系统,或者在恢复模式、U盘系统等情况下做文件操作……
  4. 通过 pkexec visudo
    修改。还好一般发行版都留下了 pkexec
    这道门。

还是用最后一种吧,其它三种都更麻烦。

零壹軒·笔记
我还没有学会写个人说明!
上一篇

【软件测试 Python自动化】全网最全大厂面试题,看完以后你就是面试官!

下一篇

外媒评2020年PC画质十佳 《赛博朋克2077》第二

你也可能喜欢

评论已经被关闭。

插入图片