sudo в CentOS 6.1 не сохраняет псевдонимы команд, как sudo в других местах?

В стандартной установке CentOS 6.1, если я запускаю в своей пользовательской оболочке (tcsh) все свои обычные псевдонимы команд и делаю то, что обычно делаю (в других версиях Linux и Mac OS X), чтобы получить корневую оболочку,

sudo tcsh

мои командные псевдонимы не сохраняются. Это не то поведение, которое я вижу с sudo в других операционных системах, в том числе в более старых версиях RHEL (из которых взята CentOS). Я пробовал разные варианты в CentOS 6.1, такие как

sudo -i tcsh
sudo tcsh -m
sudo -i tcsh -m

который при чтении man-страниц sudo и tcsh должен заставить его вести себя больше как оболочка входа в систему и предположительно делать что-то вроде интерпретации моего файла.cshrc, но ничего не помогло. Моя оболочка по умолчанию - / bin / tcsh в /etc/passwd; Я попытался переключить запись root в / etc / passwd, чтобы также использовать /bin/tcsh (по умолчанию было /bin/bash), но это не имело никакого значения.

Я предполагаю, что это поведение может контролироваться чем-то в / etc / sudoers, но мой / etc / sudoers является стандартным файлом, установленным CentOS 6.1, и сравнивает его с (например) файлом / etc / sudoers в Mac OS X 10.6. немедленно выявить очевидную настройку, которая будет контролировать это конкретное поведение.

Я поставлен в тупик на этом этапе и был бы признателен за помощь

2 ответа

Решение

В tcsh псевдонимы являются локальными для экземпляра оболочки, в котором они определены. Вы должны организовать их переопределение в каждой подоболочке. Когда запускается tcsh, он читает команды из $HOME/.tcshrc (или же $HOME/.cshrc если этого не существует); предположительно у вас здесь установлены псевдонимы.

Команда sudo -i "имитирует начальный вход в систему", установив $HOME (и различные другие переменные среды) для целевого пользователя.

Далее, последние версии sudo удаляют $HOME из окружающей среды, если опция env_reset присутствует в /etc/sudoers,

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

Defaults env_keep += HOME

Кроме того, вы можете добавить следующее к /root/.tcshrc:

if ( $?SUDO_USER ) then
    source ~$SUDO_USER/.tcshrc
endif

Когда вы sudo, вы входите в корневую оболочку, а не в свою собственную. Вы можете добавить свои псевдонимы в /root/.cshrc, чтобы псевдонимы были доступны, когда вы используете sudo.

Другие вопросы по тегам