为什么 tsocks 不能与 apt-get 一起工作?

为什么 tsocks 不能与 apt-get 一起工作?

我正在使用tsockssocksify 来处理我的连接。当我运行以下命令时,apt-get没有使用 socksify:

$ . tsocks -on
$ sudo apt-get update

但是,当我像下面这样在一行中运行整个程序时,它就可以工作了。

sudo tsocks apt-get update

我已经验证,当我输入时. tsocks -on,我的LD_PRELOAD环境变量设置为/usr/lib/libtsocks.so

为什么前者不起作用?

答案1

虽然它已经给出了答案,但我还是想分享对我有用的方法,使用 Ubuntu 14.04:

sudo apt-get install tsocks

然后打开 /etc/tsocks.conf 并将您的服务器添加到服务器,将端口添加到 server_port,还要将您的 socks 服务器范围添加为本地,例如,

如果您的 ip 地址是 90.70.60.5,则写入:(

local = 90.70.60.0/255.255.255.0注意 .0 是 ip 地址的最后一部分)

现在尝试:(

sudo tsocks apt-get update或任何 apt-get 命令)

如果使用 sudo 不起作用,请直接以 root 身份登录,例如:

sudo su

然后重试:

tsocks apt-get update

我位于 Socks 5 服务器后面,可以访问从我自己的计算机无法访问的下载链接,而且它运行顺畅。

笔记:有了这个,我就不必使用 /etc/apt/apt.conf 中的“Acquire”内容了

答案2

根据@creveti-mihai 给出的答案,我查看了sudoers手册页。不幸的是,正如手册页所述,无法保留LD_*变量。以下是手册页的内容:

 Note that the dynamic linker on most operating systems will remove
 variables that can control dynamic linking from the environment of setuid
 executables, including sudo.  Depending on the operating system this may
 include _RLD*, DYLD_*, LD_*, LDR_*, LIBPATH, SHLIB_PATH, and others.
 These type of variables are removed from the environment before sudo even
 begins execution and, as such, it is not possible for sudo to preserve
 them.

因此,我必须考虑使用Acquire::http::proxy和在 apt 自己的配置文件中指定代理Acquire::https::proxy

答案3

LD_PRELOAD也设置为了吗/usr/lib/libtsocks.so?看一下:

  • -E的 (保留环境) 选项。sudo例如:sudo -E bash -c 'echo $LD_PRELOAD'vs sudo echo $LD_PRELOAD;
  • 文件sudoersDefaults env_keep;

相关内容