Use o alias depois de emitir o comando sudo su

3

Estou no AIX 7.1.

Eu tenho vários aliases definidos em meu perfil pessoal.

alias df='df -k'
alias cl=clear
alias h=history
alias ll='ls -al'
alias lt='ls -latr'
alias ls='ls -Fa'
alias psj='ps -ef | grep java'

Se eu emitir um comando 'sudo su' ou 'sudo su other_user', não poderei usar esses aliases. Fiquei com a impressão de que usar um 'sudo su' sem um '-' (sudo su -) me faria enraizar enquanto usava meu perfil pessoal.

jg10371@asdepdm1: /home/jg10371
$ ll
total 88
drwx------    3 jg10371  unxusers       4096 May 29 09:21 ./
drwxr-xr-x  154 bin      bin           12288 May 29 09:35 ../
-rw-------    1 root     system          200 Jul 04 2010  .bash_history
-rw-r--r--    1 jg10371  unxusers       1943 May 29 09:35 .profile
-rw-------    1 jg10371  unxusers       6944 May 29 09:36 .sh_history
drwx------    2 jg10371  unxusers        256 May 28 11:06 .ssh/
-rw-------    1 jg10371  unxusers         44 May 28 12:21 .vas_disauthcc_9168
-rwx------    1 jg10371  unxusers         28 May 28 12:21 .vas_logon_server*
-rwx------    1 jg10371  unxusers         18 Mar 28 18:06 .vi_history*
jg10371@asdepdm1: /home/jg10371
$ sudo su
Password:
jg10371@asdepdm1: /home/jg10371
$ ll
ksh: ll:  not found.
jg10371@asdepdm1: /home/jg10371
    
por hacket 29.05.2015 / 16:38

4 respostas

1

Bem, como você já percebeu, isso não acontece. A entrada manpage diz "sudo - executa um comando como outro usuário", o que significa que aliases e variáveis bash serão alteradas de acordo. E ao fazer "sudo ll", o sistema percebe, que o usuário root não sabe nada sobre ll.

Se você quiser que seus aliases estejam disponíveis como raiz, copie as definições no arquivo de perfil de raízes ou crie um arquivo de alias separado e inclua-o usando o comando de origem. (É possível incluir o próprio arquivo de perfil do usuário, mas você pode ter algumas linhas nele que não devem ser adotadas pelo root.)

    
por 29.05.2015 / 17:58
2

Sim, fazer login em uma conta diferente (raiz, neste caso) criará uma nova sessão e as configurações serão do arquivo .bashrc ou .kshrc da raiz. Você pode ver isso no seguinte:

$ alias
$ ... output has over 100 aliases
$ sudo su
[sudo] password for durrantm: 
root@Castle2012:/tmp/user/1000/x# alias  # <- Only 7 aliases now!
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
root@Castle2012:/tmp/user/1000/x# cat ~/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
...
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
...

root@Castle2012:/tmp/user/1000/x# 

Você pode entretanto exportar seu ambiente - somente para essa sessão - com sudo -E.

Você pode tornar o alias disponível para TODOS os shells permanentemente, colocando a definição do alias em

/etc/bash.bashrc  # (You'll need to edit it with sudo!)
# /etc/profile for ksh

e você também pode adicionar lógica condicional para fazer isso apenas se o nome de usuário corresponder a raiz ou a que você deseja.

    
por 31.05.2015 / 17:08
1

É facilmente possível "consertar" isso parcialmente para o seu caso de uso, contanto que você execute apenas sudo some_command e não obtenha um shell via sudo su ou similar. Baseia-se na ordem em que o shell avalia as coisas e é bem simples. Verifique o link ou link e inclua esse sudo alias em seu ~/.kshrc
(Eu estou supondo que você use o shell padrão do AIX, já que você não tem um ~/.bashrc e o ~/.bash_history no seu trecho tem 5 anos ... Se você usar o bash, você precisa se adaptar.)

Se você deseja incluir um alias para um usuário específico e usar o shell padrão que é ksh e não bash, coloque os aliases em ~/.kshrc arquivo desse usuário e não em ~ / .bashrc.

Você também pode configurar o sudo para manter o ambiente do seu usuário. mantenha aliases quando eu usar o sudo bash para detalhes.

Ou se os comandos e aliases estiverem disponíveis para todos os usuários, você também poderá adicioná-los a / etc / environment .

    
por 31.05.2015 / 16:24
0

Se você deseja executar aliases de outro usuário como root sem fazer qualquer trabalho extra (por exemplo, copiando as definições de alias para o arquivo de perfil do root, convertendo os alias do usuário em shell scripts) , então você pode extrair o comando alias e canalizá-lo para o shell.

Exemplo:

sudo su - otheruser -s /bin/bash -c "alias ll | sed -E \"s/.+='(.+)'//\" | bash"

Ou você pode usar minha função "run-as" genérica:

runas() {
  if [ $# -eq 2 ]; then
    # Check if user exists
    id -u $1 > /dev/null 2>&1
    if [ $? -gt 0 ]; then
      echo "$FUNCNAME: no such user"
      return 1
    fi
    # Check if alias exists
    sudo su - $1 -s /bin/bash -c "alias $2" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
      # Alias is defined; execute $2 as alias
      sudo su - $1 -s /bin/bash -c "alias $2 | sed -E \"s/.+='(.+)'//; s/'\\'//g\" | bash"
    else
      # Alias is not defined; execute $2 as command
      sudo su - $1 -s /bin/bash -c "$2"
    fi
  else
    echo "Execute a command or alias as another user"
    echo "Usage: $FUNCNAME USER ALIAS"
    return 2
  fi
}
    
por 10.04.2017 / 07:30

Tags