В корпоративной сети, как правило, для доступа в интернет используется прокси-сервер. Для того чтобы программы понимали, что им необходимо подключаться через прокси, необходимо настроить системные переменные. Это позволит настроить практически все программы на использование прокси и, что самое важное, эта настройка имеет глобальный характер - то есть влияет на всех пользователей системы.

За время эксплуатации я выявил, что некоторые дистрибутивы чувствительны к регистру этих переменных, поэтому они продублированы строчными и прописными буквами. Просмотрим список установленных переменных, относящихся к настройке прокси:

$ printenv |grep -i proxy
NO_PROXY=192.168.0.1, localhost, 127.0.0.1
http_proxy=http://192.168.0.1:3128
FTP_PROXY=http://192.168.0.1:3128
ftp_proxy=http://192.168.0.1:3128
proxy_enabled=yes
PROXY_ENABLED=yes
https_proxy=http://192.168.0.1:3128
HTTPS_PROXY=http://192.168.0.1:3128
no_proxy=192.168.0.1, localhost, 127.0.0.1
HTTP_PROXY=http://192.168.0.1:3128

Переменные необходимо занести в файл cat /etc/environment в виде (большая часть программ будет работать если набрать только в верхнем регистре):

PROXY_ENABLED="yes"
proxy_enabled="yes"
HTTP_PROXY="http://192.168.0.1:3128"
http_proxy="http://192.168.0.1:3128"
HTTPS_PROXY="http://192.168.0.1:3128"
https_proxy="http://192.168.0.1:3128"
FTP_PROXY="http://192.168.0.1:3128"
ftp_proxy="http://192.168.0.1:3128"
NO_PROXY="192.168.0.1, localhost, 127.0.0.1"
no_proxy="192.168.0.1, localhost, 127.0.0.1"

Кроме этого при использовании программы sudo есть один нюанс: как правило она запускается с ограниченным набором переменных. Просмотреть это можно:

$ sudo sudo -V
.....
Reset the environment to a default set of variables
.....
Environment variables to check for sanity:
.....
Environment variables to remove:
.....
Environment variables to preserve:
.....

$ sudo printenv |grep -i proxy

Как видим необходимые нам переменные команда sudo просто проигнорировала, а значит и программы выполняющиеся с повышенными привилегиями не узнали про прокси-сервер. Для того чтобы исправить такое поведение необходимо внести правки в файл /etc/sudoers, добавив следующую строку:

Defaults env_keep+="DISPLAY XAUTHORITY XAUTHORIZATION PROXY_ENABLED proxy_enabled HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy"

Почти все консольные программы понимают эти переменные и начинают использовать прокси-сервер. Для KDE и Gnome необходимо также включить использование этих переменных через соответствующие настройки. В KDE это делается через "Параметры системы" / "Настройка сети" / "Прокси-сервер" / "Использовать предварительно установленные переменные окружения" / "Настроить" / "Автоопределение".

Добавлено 2013-01-16:

Для некоторых GTK3-программ нужно установить переменные:

$ gsettings set org.gnome.system.proxy mode 'manual'
$ gsettings set org.gnome.system.proxy.http host '192.168.0.1'
$ gsettings set org.gnome.system.proxy.http port 3128
$ gsettings set org.gnome.system.proxy.https host '192.168.0.1'
$ gsettings set org.gnome.system.proxy.https port 3128
$ gsettings set org.gnome.system.proxy.ftp host '192.168.0.1'
$ gsettings set org.gnome.system.proxy.ftp port 3128
$ gsettings set org.gnome.system.proxy.ftp ignore-hosts "['192.168.0.1', 'localhost', '127.0.0.1']"

Если вы консоли предпочитаете GUI, то для настройки вышеперечисленного существует графическая утилита dconf-editor из пакета dconf-tools.

Если apt-get, несмотря на все усилия не хочет работать через прокси, то можно его настроить вручную, создав в /etc/apt/apt.conf.d/ файл настроек (назвав например 90proxy) и поместив в него следующие строки:

Acquire::http::proxy "http://192.168.0.1:3128/";
Acquire::ftp::proxy "ftp://192.168.0.1:3128/";
Acquire::https::proxy "https://192.168.0.1:3128/";

 Добавлено 2013-01-16:

Что-то изменилось в sudoers, поэтому, если у вас перестали работать программы вызываемые через gksudo. Проверить можно вызвав из консоли gksudo имя_программы_с_графическим_интерфейсом появляется ошибка:

$ sudo mdmsetup
[sudo] password for xxxxxx:
No protocol specified
(mdmsetup:2628): Gtk-WARNING **: cannot open display: :0

$ gksudo nemo
** (nemo:2327): WARNING **: Could not open X display
No protocol specified
error: XDG_RUNTIME_DIR not set in the environment.
Could not parse arguments: Не удалось открыть дисплей:

Необходимо изменить настройку env_keep в /etc/sudoers (добавился "+" перед присваиванием и переменная DISPLAY):

Defaults env_keep+="DISPLAY PROXY_ENABLED proxy_enabled HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy"

  Добавлено 2014-12-03:

Для решения проблемы с неработающим sudo для графических приложений в Cinnamon пришлось добавить еще одну сохраняемую переменную XAUTHORITY и XAUTHORIZATION в /etc/sudoers:

Defaults env_keep+="DISPLAY XAUTHORITY XAUTHORIZATION PROXY_ENABLED proxy_enabled HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy"
Добавить комментарий