Это было бы несколько пугающим, но можно отправить вывод любой команды к нескольким "терминалам". Например, для очистки всего TTYs, к которому у Вас есть доступ:
for tty in /dev/ttys00*; do clear > "$tty"; done # OS X (local)
for tty in /dev/pts/*; do clear > "$tty"; done # Linux (Ubuntu, via SSH)
Sudo имеет много параметров конфигурации времени компиляции. Можно перечислить настройки в версии с sudo -V
. Одно из различий между конфигурацией в хрипящем Debian и в Ubuntu 12.04 то, что HOME
переменная среды сохраняется в Ubuntu, но не в Debian; оба дистрибутива стирают все переменные среды за исключением некоторых, которые явно отмечены как безопасные сохранить. Таким образом sudo -s
сохраняет HOME
на Ubuntu, в то время как на Debian HOME
стирается и sudo
затем наборы это к корневому каталогу целевого пользователя.
Можно переопределить это поведение в sudoers
файл. Выполненный visudo
отредактировать sudoers
файл. Существует несколько соответствующих опций:
env_keep
определяет, какие переменные среды сохраняются. Использовать Defaults env_keep += "HOME"
сохранить вызывающую сторону HOME
переменная среды или Defaults env_keep -= "HOME"
стереть его (и заменить его корневым каталогом целевого пользователя).env_reset
определяет, сбрасываются ли переменные среды вообще. Сброс переменных среды часто необходим для правил, которые позволяют выполнять определенную команду, но не обладает прямым преимуществом безопасности для правил, которые позволяют выполнять произвольные команды так или иначе.always_set_home
, если установлено, причины HOME
быть переопределенным, даже если это было сохранено из-за env_reset
будучи отключенным или HOME
быть в env_keep
список. Эта опция не имеет никакого эффекта если HOME
не сохраняется так или иначе.set_home
похож always_set_home
, но только относится sudo -s
, не при вызове sudo
с явной командой.Эти опции могут быть установлены для данного исходного пользователя, данного целевого пользователя или данной команды; посмотрите sudoers
руководство для деталей.
Можно всегда принимать решение переопределить HOME
для данного вызова к sudo
путем передачи опции -H
.
Оболочка никогда не будет переопределять значение HOME
. (Это установило бы HOME
если это было сброшено, но sudo
всегда наборы HOME
так или иначе.)
Если Вы работаете sudo -i
, sudo
моделирует начальный вход в систему. Это включает установку HOME
к корневому каталогу целевого пользователя и вызова оболочки входа в систему.
Использовать sudo -H -i
вместо sudo -s
для получения интерактивного входа в систему базируются оболочка:
sudo -H -i
cd
pwd -P # /private/var/root (on Mac OS X 10.6.8)
От man sudo
:
-H The -H (HOME) option sets the HOME environment variable to
the homedir of the target user (root by default) as
specified in passwd(5). By default, sudo does not modify
HOME (see set_home and always_set_home in sudoers(5)).
Это имеет мало общего с поведением sudo
и очень сделать с различием между "входом в систему окружают" и "оболочка невхода в систему". Быстрое исправление
$ sudo -i
как видно с:
$ sudo -s
# id
uid=0(root) gid=0(root) groups=0(root)
# echo $HOME
/home/msw
# exit
$ sudo -i
# echo $HOME
/root
# pwd
/root
Как отмечено в sudo руководстве:
-i (моделируют начальный вход в систему) опция выполняет оболочку, указанную записью базы данных пароля целевого пользователя как оболочка входа в систему. Это означает, что определенные для входа в систему файлы ресурсов, такие как .profile или .login будут считаны оболочкой. Если команда указана, она передается оболочке для выполнения через-c опцию оболочки. Если никакая команда не указана, интерактивная оболочка выполняется.
HOME
или не имеет все, чтобы сделать с тем, как sudo настроен.
– Gilles 'SO- stop being evil'
20.09.2013, 00:40
/etc/sudoers
, нет ничего различного между Debian и Ubuntu, что касается $HOME.
– alxs
20.09.2013, 11:45
always_set_home
и set_home
в sudoers
.
– Gilles 'SO- stop being evil'
20.09.2013, 11:55
Довольно популярный способ получить корневую оболочку также использует:
$ sudo su -
# id
uid=0(root) gid=0(root) groups=0(root)
# pwd
/root
Избавиться от другого поведения sudo -s
на Ubuntu и Debian соответственно, Вы могли использовать a sudo
обертка (отвечают на Q4):
sudos() {
local PATH="$(getconf PATH)" root_homedir
root_homedir="$(sudo -H sh -c 'printf "%s" "$HOME"')"
sudo sh -c 'export HOME="$0"; exec sh -i' "$root_homedir"
return 0
}
sudo -k
sudos
{
logname
whoami
id -un
id -ur
echo "PATH: $PATH"
}
exit
echo "PATH: $PATH"