У меня есть сценарий, требующий 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