Use alias después de emitir el command sudo su

Estoy en AIX 7.1.

Tengo un montón de alias definidos en mi perfil personal.

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' 

Si emite un command 'sudo su' o 'sudo su other_user', no puedo usar estos alias. Tenía la printing de que el uso de un 'sudo su' sin un '-' (sudo su -) me haría root mientras usaba mi perfil personal.

 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 

Related of "Use alias después de emitir el command sudo su"

Bueno, como ya habrás notado, no es así. La input de la página de manual dice "sudo – ejecuta un command como otro usuario", lo que significa que los alias y las variables de bash cambiarán en consecuencia. Y al hacer "sudo ll", el sistema lo nota, ese usuario root no sabe nada sobre ll.

Si desea que sus alias estén disponibles como raíz, puede copyr las definiciones al file de perfil raíz o crear un file de alias separado e includelo utilizando el command de origen. (Es posible include el file de perfil de los usuarios, pero es posible que tenga algunas líneas que no serán adoptadas por root).

Sí, al iniciar session en una count diferente (raíz en este caso) se creará una nueva session y la configuration será desde el file .bashrc o .kshrc de la raíz. Puedes ver esto en lo siguiente:

 $ 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# 

Sin embargo, puede exportar su entorno, solo para esa session, con sudo -E.

Puede poner el alias disponible para TODOS los shells permanentemente poniendo la definición de alias en

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

y también podría agregar lógica condicional para hacer eso solo si el nombre de usuario coincide con el de la raíz o el que desea.

Es posible "arreglar" esto en parte para su caso de uso, siempre y cuando solo ejecute sudo some_command y no obtenga un shell a través de sudo su o similar. Se basa en el order en que el caparazón evalúa las cosas, y bastante orderado.
Compruebe https://askubuntu.com/a/22043/329633 o https://serverfault.com/questions/61321/how-to-pass-alias-through-sudo y agregue ese alias sudo a su ~/.kshrc
(Supongo que utilizas el shell pnetworkingeterminado de AIX, ya que no tienes un ~/.bashrc y el ~/.bash_history en tu fragment tiene 5 años … Si usas bash, debes adaptarte. )

Si desea agregar un alias para un usuario específico y si utiliza el shell pnetworkingeterminado que es ksh y no bash, coloque los alias en el file ~/.kshrc de ese usuario y no en ~ / .bashrc.

También puede configurar sudo para mantener el entorno de su usuario, verifique, por ejemplo, mantener alias cuando use sudo bash para más detalles.

O si los commands y alias deben estar disponibles para todos los usuarios, también puede agregarlos a / etc / environment .

Si desea poder ejecutar alias de otro usuario como root sin tener que realizar ningún trabajo adicional (por ejemplo, copyndo las definiciones de alias al file de perfil de raíz, convirtiendo los alias del usuario en scripts de shell), puede extraer el command y el alias de alias al caparazón.

Ejemplo:

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

O puede usar mi function genérica de "ejecutar como":

 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/.+='(.+)'/\1/; 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 }