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.