sudo no CentOS 6.1 não preserva aliases de comando como o sudo faz em outro lugar?

0

Em uma instalação padrão do CentOS 6.1, se eu começar no meu shell de usuário (tcsh) com todos os meus aliases de comando habituais e fizer o que normalmente faço (em outras versões do Linux e Mac OS X) para obter um shell de root,

sudo tcsh

meus aliases de comando não são não preservados. Isso é não o comportamento que vejo com o sudo em outros sistemas operacionais, incluindo versões mais antigas do RHEL (das quais o CentOS é derivado). Eu tentei diferentes variações no CentOS 6.1, como

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

que pela minha leitura das páginas man sudo e tcsh, deveria fazê-lo se comportar mais como um shell de login e presumivelmente fazer coisas como interpretar meu arquivo .cshrc, mas nada funcionou. Meu shell padrão é / bin / tcsh em / etc / passwd; Eu tentei mudar a entrada do root em / etc / passwd para também usar / bin / tcsh (o padrão era / bin / bash), mas não fazia nenhuma diferença.

Eu acho que esse comportamento pode ser controlado por algo em / etc / sudoers, mas meu / etc / sudoers é o arquivo armazenado instalado pelo CentOS 6.1, e comparando-o com (por exemplo) o / etc / sudoers do Mac OS X 10.6 O arquivo não revela imediatamente uma configuração óbvia que controlaria esse comportamento específico.

Estou perplexo neste momento e gostaria de receber ajuda.

    
por mhucka 03.03.2012 / 00:28

2 respostas

2

No tcsh, os aliases são locais para a instância do shell em que estão definidos. É necessário que eles sejam redefinidos em cada subshell. Quando o tcsh inicia, ele lê os comandos de $HOME/.tcshrc (ou $HOME/.cshrc , se isso não existir); presumivelmente você tem seus aliases aqui.

O comando sudo -i "simula um login inicial" definindo $HOME (e várias outras variáveis de ambiente) para o usuário alvo.

Além disso, versões recentes do sudo removem $HOME do ambiente se o a opção env_reset está presente em /etc/sudoers .

Portanto, para tornar a origem do shell raiz o .tcshrc do usuário que chama o sudo, use sudo -s e adicione a seguinte linha a /etc/sudoers :

Defaults env_keep += HOME

Como alternativa, você pode adicionar o seguinte a /root/.tcshrc :

if ( $?SUDO_USER ) then
    source ~$SUDO_USER/.tcshrc
endif
    
por 21.11.2012 / 21:33
0

Quando você sudo, você está digitando um shell de raiz, em vez de seu próprio. Você pode adicionar seus aliases ao /root/.cshrc para que os aliases estejam disponíveis quando você sudo.

    
por 03.03.2012 / 04:31