В стандартной установке 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 ответа2

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
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .