Назад | Перейти на главную страницу

Имя пользователя перед sudo

У меня есть сценарий, требующий sudo, но он должен устанавливать параметры в соответствии с исходным пользователем, например:

chown "${USER}:${USER}" dir

Если я установлю его под sudo, я просто получу chmod root:root, что не помогает.

Итак, как я могу получить имя пользователя перед sudo?

Переменная среды SUDO_USER должна работать как замена USER.

Поскольку вы устанавливаете право собственности на USER: USER, я предполагаю, что всегда есть группа с тем же именем, что и пользователь? В противном случае более строгим решением могло бы быть использование SUDO_UID и SUDO_GID.

Тогда были бы два возможных решения:

chown "${SUDO_USER}:${SUDO_USER}" dir

или

chown "${SUDO_UID}:${SUDO_GID}" dir

Вы можете использовать SUDO_USER переменная:

sudo bash -c 'echo $SUDO_USER'

Из судо страница руководства:

судо использует следующие переменные среды. Политика безопасности контролирует фактическое содержимое среды команды. [...]

SUDO_UID Установите идентификатор пользователя, который вызвал sudo.

SUDO_USER Установите имя входа пользователя, вызвавшего sudo.

SUDO_USER может быть перезаписан пользователем.

 $ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
 USER=root
 SUDO_USER=test
 USERNAME=root

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

toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname             
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto   pts/4        Jan 23 15:13 (:0.0)

Приходящий из https://stackoverflow.com/questions/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-commands