На основе описаний из страниц справочника для su
и sudo
Я принял бы следующие вещи.
sudo -iu
означает, что вход в систему окружает, это было бы эквивалентно su -
или su -l
. su
без любых изменений аргументов Ваш эффективный идентификатор пользователя, но Вы все еще используете свой оригинал
среда и a who am i
сообщит, что Вы неподвижны
.выборка sudo страница справочника
-i [command]
The -i (simulate initial login) option runs the shell specified in
the passwd(5) entry of the target user as a login shell. This means
that login-specific resource files such as .profile or .login will
be read by the shell. If a command is specified, it is passed to
the shell for execution. Otherwise, an interactive shell is
executed. sudo attempts to change to that user's home directory
before running the shell. It also initializes the environment,
leaving DISPLAY and TERM unchanged, setting HOME, MAIL, SHELL,
USER, LOGNAME, and PATH, as well as the contents of
/etc/environment on Linux and AIX systems. All other environment
variables are removed.
У меня есть учетная запись пользователя, saml
с UID 500.
$ egrep "Uid|Gid" /proc/$$/task/$$/status
Uid: 500 500 500 500
Gid: 501 501 501 501
В вышеупомянутом выводе 1-м столбцом является мой реальный UID (uid), и 2-м является мой эффективный UID (euid).
$ su
Теперь я - корень, но я все еще поддерживаю свою среду, и мой реальный UID тих 500
. Заметьте, что мой euid теперь 0 (корень).
$ egrep "Uid|Gid" /proc/$(pgrep su -n)/task/$(pgrep su -n)/status
Uid: 500 0 0 0
Gid: 501 501 501 501
Однако моя среда тиха saml
. Вот один из него переменные среды, $LOGNAME
.
$ env | grep LOGNAME
LOGNAME=saml
$ su -
С su -
или sudo -i
мало того, что я изменяю свой эффективный UID на нового пользователя, но я также получаю их файлы, как будто это был вход в систему, и моя среда теперь становится идентичной, как будто я был ими непосредственно вход в систему.
$ egrep "Uid|Gid" /proc/$(pgrep su -n)/task/$(pgrep su -n)/status
Uid: 500 0 0 0
Gid: 501 501 501 501
Однако моя среда теперь root
. Та же переменная, $LOGNAME
, теперь это установлено с root
.
$ env | grep LOGNAME
LOGNAME=root
Хорошо давайте попробуем вышеупомянутое sudo -i
и узнайте.
$ sudo -i
Теперь давайте посмотрим на ту же информацию:
$ egrep "Uid|Gid" /proc/$(pgrep su -n)/task/$(pgrep su -n)/status
Uid: 0 0 0 0
Gid: 501 501 501 501
Хорошо одной главной вещью является мой эффективный идентификатор, и реальный идентификатор оба 0 (root
) с этим подходом. Переменная среды $LOGNAME
то, как будто мы вошли в систему как root
.
$ env | grep LOGNAME
LOGNAME=root
Если мы включаем количество строк, говорят, что эти 3 метода, возможно, существует некоторая дополнительная информация, которая будет иметься.
$ env > /tmp/
Нас оставляют с этими 3 файлами:
Уже мы видим, что что-то произошло только с плоскостью su
. ENV по 2x размер других.
Количество строк в каждом:
$ wc -l su*
28 sudash_root.txt
32 sudo_root.txt
92 su_root.txt
Нет действительно никакой потребности посмотреть далее на su_root.txt
файл. Этот файл содержит большую часть среды пользователя, которая работала su
команда. Поэтому давайте посмотрим на другие 2 файла.
Они фактически идентичны за исключением нескольких косметических переменных, такой как $LANG
быть немного отличающимся. Одно дымящееся оружие в списке $PATH
.
sudo
PATH=/usr/lib64/ccache:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/brlcad/bin:/root/bin
su -
PATH=/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/brlcad/bin:/root/bin
Как видете sudo -i
дает нам некоторую дополнительную защиту путем снятия подозрительных путей, но это также сохраняет наш $DISPLAY
и $TERM
неповрежденный в случае, если мы отображали GUI к другому местоположению.
sudo -i
преимущества перед другими, потому что Вы используете свой собственный пароль, чтобы сделать так, защищая пароль корня от необходимости быть выделенными.root
, по сравнению с загадочно кем-то становление root
через su
или su -
.sudo -i
дает Вам лучший пользовательский опыт по также su
потому что это защищает Ваш $DISPLAY
и $TERM
.sudo -i
обеспечивает некоторую защиту к системе, когда пользователь стал root
, путем ограничения среды, которую им дают.sudo su
, Вы даже не обсуждали это?Я намеренно постарался не приносить это в обсуждение даже при том, что OP спросил об этом, потому что выполнение так будет только запутанных проблема, IMO. Когда Вы работаете sudo su
sudo
команда маскирует эффекты su
и большая часть среды, что Вы добрались бы от постоянного клиента su
потерян. Sudo делает свое задание и обеспечивает ограниченную и защищенную среду независимо от того, является ли это sudo su
или sudo -i
.
Вот результат sudo su
среда выводится:
ls -l /tmp/sudosu_root.txt
-rw-r--r-- 1 root root 1933 Nov 2 14:48 /tmp/sudosu_root.txt
И количество строк:
$ wc -l /tmp/sudosu_root.txt
31 /tmp/sudosu_root.txt
Это единственные переменные, которые отличаются между a sudo su -
и a sudo -i
:
$ sdiff /tmp/sudosu_root.txt /tmp/sudo_root.txt | grep ' |'
USERNAME=saml | USERNAME=root
PATH=/usr/lib64/ccache:/sbin:/bin:/usr/sbin:/usr/bin:/usr/brl | PATH=/usr/lib64/ccache:/usr/local/sbin:/sbin:/bin:/usr/sbin:/
MAIL=/var/spool/mail/saml | MAIL=/var/spool/mail/root
PWD=/home/saml/tst | PWD=/root
SUDO_COMMAND=/bin/su | SUDO_COMMAND=/bin/bash
XAUTHORITY=/root/.xauthYFtlL3 | XAUTHORITY=/var/run/gdm/auth-for-saml-iZePuv/datab
Таким образом, как Вы видите там, действительно не большая часть различия между ними. Немного отличающийся $PATH
, $SUDO_COMMAND
, и $MAIL
и $USERNAME
единственные различия.
Пример того, что вы хотите сделать, обсуждается здесь в этом SF Q&A под заголовком: [1122437]Как маршрутизировать различный трафик через различные сетевые интерфейсы (Windows)[1122438]. Признайте, что эти команды показывают, как выполнить установку, используя команду Window [1122439]route[1122440], которая имеет другое переключение командной строки, чем версия Linux. Однако, этот подход является тем, что Вам нужно, поэтому они могут быть адаптированы к команде [1122441]route[1122442], эквивалентной Linux. Однако, команда [1122447] route[1122448] считается устаревшей и поэтому вместо нее следует использовать команду [1122449]ip[1122450] (часть пакетов [1122451]iproute[1122452] или [1122453]iproute2[1122454]).
выдержка [1123007]команда маршрута Linux
В дистрибутивах Linux, основанных на ядрах 2.2.x Linux, команды ifconfig и route работают совместно, чтобы подключить компьютер к сети и определить маршруты между компьютерными сетями. В дистрибутивах, основанных на более поздних ядрах, команды ifconfig и route заменили на iproute2.
О продвинутых методах маршрутизации можно прочитать в этом учебном материале под названием: [1122459]Два маршрута по умолчанию[1122460].
Ссылки
IPROUTE2 Utility Suite Howto
Annex D. Управление IP Route Management
Part 1 - 7 Linux Route Command Examples (How to Add Route in Linux)
Part 2 - 7 Linux Route Command Examples (How to Add Route in Linux)Part 3 - IP Routing: Флаги маршрута в Linux (U - вверх, G - шлюз, H - хост)