Используйте псевдоним после ввода команды sudo su

Вопрос или проблема

Я на AIX 7.1.

У меня есть куча алиасов, определенных в моем личном .profile.

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'

Если я ввожу команду ‘sudo su’ или ‘sudo su other_user’, я не могу использовать эти алиасы. У меня было впечатление, что использование ‘sudo su’ без ‘-‘ (sudo su -) сделает меня root, используя мой личный .profile?

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

Да, на самом деле, вход в другую учетную запись (root в этом случае) создаст новую сессию, и настройки будут из файла .bashrc или .kshrc root. Вы можете увидеть это в следующем:

$ alias
$ ... вывод содержит более 100 алиасов
$ sudo su
[sudo] пароль для durrantm: 
root@Castle2012:/tmp/user/1000/x# alias  # <- Теперь только 7 алиасов!
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: выполняется bash(1) для не-логин оболочек.
# см. /usr/share/doc/bash/examples/startup-files (в пакете bash-doc)
# для примеров
...
# включить поддержку цвета для ls и также добавить удобные алиасы
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

# еще несколько алиасов для ls
alias ll="ls -alF"
alias la="ls -A"
alias l="ls -CF"
...

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

Тем не менее, вы можете экспортировать вашу среду – только для этой сессии – с помощью sudo -E.

Вы можете сделать алиас доступным для ВСЕХ оболочек навсегда, разместив определение алиаса в

/etc/bash.bashrc  # (Вам нужно отредактировать его с помощью sudo!)
# /etc/profile для ksh

и вы также можете добавить условную логику, чтобы делать это только если имя пользователя соответствует root или тому, что вам нужно.

Что ж, как вы уже заметили, это не так. В записи manpage говорится “sudo – выполнить команду от имени другого пользователя”, что означает, что алиасы и переменные bash изменятся соответствующим образом. А когда вы делаете “sudo ll”, система замечает, что пользователь root ничего не знает об ll.

Если вы хотите, чтобы ваши алиасы были доступны как root, вы можете либо скопировать определения в файл профиля root, либо создать отдельный файл алиасов и включить его с помощью команды source. (Возможно включить и сам файл профиля пользователя, но у вас могут быть строки в нем, которые не должны приниматься root.)

Это легко исправить частично для вашего случая, пока вы запускаете sudo some_command и не получаете оболочку через sudo su или подобное. Это основано на порядке, в котором оболочка оценивает вещи, и довольно удобно.
Проверьте https://askubuntu.com/a/22043/329633 или https://serverfault.com/questions/61321/how-to-pass-alias-through-sudo и добавьте этот sudo алиас в ваш ~/.kshrc
(Я предполагаю, что вы используете оболочку AIX по умолчанию, так как у вас нет ~/.bashrc и ~/.bash_history в вашем отрывке 5 лет.)

Если вы хотите добавить алиас для конкретного пользователя и используете оболочку по умолчанию, которая является ksh, а не bash, то поместите алиасы в ~/.kshrc файл этого пользователя, а не в ~/.bashrc.

Вы также можете настроить sudo так, чтобы он сохранял среду вашего пользователя, проверьте, например, сохранить алиасы, когда я использую sudo bash для деталей.

Или если команды и алиасы должны быть доступны всем пользователям, вы также можете добавить это в /etc/environment.

Если вы хотите, чтобы иметь возможность выполнять алиасы другого пользователя как root без необходимости делать какую-либо дополнительную работу (например, копирование определений алиаса в файл профиля root, преобразование алиасов пользователя в скрипты оболочки), тогда вы можете извлечь команду алиаса и передать ее оболочке.

Пример:

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

Или вы можете использовать мою универсальную функцию “run-as”:

runas() {
  if [ $# -eq 2 ]; then
    # Проверка, существует ли пользователь
    id -u $1 > /dev/null 2>&1
    if [ $? -gt 0 ]; then
      echo "$FUNCNAME: нет такого пользователя"
      return 1
    fi
    # Проверка, существует ли алиас
    sudo su - $1 -s /bin/bash -c "alias $2" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
      # Алиас определен; выполните $2 как алиас
      sudo su - $1 -s /bin/bash -c "alias $2 | sed -E \"s/.+='(.+)'/\1/; s/'\\\'//g\" | bash"
    else
      # Алиас не определен; выполните $2 как команду
      sudo su - $1 -s /bin/bash -c "$2"
    fi
  else
    echo "Выполнить команду или алиас от имени другого пользователя"
    echo "Использование: $FUNCNAME USER ALIAS"
    return 2
  fi
}

Вы можете получить “root” оболочку со всеми вашими алиасами с помощью следующего (при условии, что bash – ваша оболочка):

sudo -E bash

Ответ или решение

Когда вы работаете с AIX 7.1 и используете команду sudo su для получения привилегий суперпользователя (root), вы можете столкнуться с проблемой, заключающейся в том, что ваши пользовательские алиасы, определённые в файле ~/.profile, становятся недоступными. Это происходит потому, что команда sudo su запускает новую сессию оболочки для пользователя root, и в этой сессии используются настройки и конфигурации, определённые для root, а не для вашего пользователя.

Причины недоступности алиасов

  1. Сессия оболочки: При выполнении команды sudo su создаётся новый сеанс с учётом конфигурации пользователя root. Это означает, что алиасы, заданные в вашем профиле, окажутся недоступны, так как они хранятся в ~/.profile, который не загружается для root. Вместо этого используется файл конфигурации, связанный с оболочкой root (например, ~/.kshrc для ksh).

  2. Команда без -: Использование sudo su без знака - приводит к тому, что система не загружает окружение для нового пользователя, что опять же означает отсутствие личных алиасов и конфигураций.

Решения для доступа к алиасам при использовании sudo su

  1. Дублирование алиасов: Один из простых способов решить данную проблему — это скопировать ваши алиасы в файл конфигурации пользователя root. Это можно сделать, отредактировав файл ~/.kshrc для root и добавив туда все необходимые алиасы. Однако это потребует постоянного обновления обоих файлов при изменении алиасов.

  2. Создание общего файла алиасов: Можно создать отдельный файл со всеми вашими алиасами, а затем включить его с помощью команды source в ~/.kshrc пользователя root. Это позволит легко управлять алиасами и подключать их при необходимости.

  3. Использование sudo -E: Если вы хотите сохранить ваше окружение, используя sudo, добавьте флаг -E. Команда sudo -E <команда> будет передавать ваши переменные окружения, что позволит вам использовать некоторые настройки, но алиасы всё равно не будут доступны.

  4. Алиасы для всех пользователей: Если требуется, чтобы алиасы были доступны всем пользователям, их можно добавить в глобальные файлы, такие как /etc/profile для ksh или /etc/bash.bashrc для bash. Это обеспечит доступность алиасов для всех пользователей системы, но может потребовать разрешений администратора.

  5. Использование оболочки: Для работы с алиасами пользователя во временно поднятом сессии root можно использовать следующий подход:

    sudo su - <ваш_пользователь> -s /bin/ksh -c "<команда>"

    Это обеспечит загрузку конфигураций для вашего пользователя.

  6. Создание функции: Можно создать функцию, которая будет вызывать алиасы пользователя в контексте root. Этот метод требует больше усилий на разработку, но может быть удобным для частого использования.

Пример

Для создания функции, которая выполняет команду от имени другого пользователя с использованием его алиасов, можно использовать следующий код:

runas() {
  if [ $# -eq 2 ]; then
    sudo su - $1 -s /bin/ksh -c "alias $2 | sed -E 's/.+='(.+)'/\1/' | ksh"
  else
    echo "Использование: $FUNCNAME ПОЛЬЗОВАТЕЛЬ АЛИАС"
  fi
}

Теперь вы сможете удобно использовать алиасы, прописанные для другого пользователя, без необходимости дублирования их в файлах конфигурации.

Заключение

Таким образом, работа с алиасами при переходе на уровень суперпользователя требует дополнительного подхода к управлению конфигурациями. Выбирайте подходящий для ваших задач метод — дублируйте алиасы, используйте общие конфигурации или создавайте функции для временного доступа.

Оцените материал
Добавить комментарий

Капча загружается...