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

8

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

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

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

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

е-удовлетворяться
источник

Ответы:

11

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

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

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

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

или

chown "${SUDO_UID}:${SUDO_GID}" dir
andol
источник
Хороший ответ, с решением и дополнительной информацией.
e-удовлетворительно
Использование UID / GID является лучшим решением, так как можно иметь несколько UID с одним и тем же именем пользователя.
duffbeer703
4

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

sudo bash -c 'echo $SUDO_USER'

Со страницы руководства sudo :

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

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

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

Кайл Брандт
источник
Но почему sudo echo $SUDO_USERничего не выводит?
Роберт
1

Пользователь 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)

Исходя из /programming/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-commands

cladmi
источник
После запуска sudo su - переменные окружения недоступны, но lognameи who am iработают.
РикМишам
Вы правы, нельзя полагаться на переменную окружения.
cladmi
На каком-то хосте обнаружено, что SUDO_USER не может быть перезаписан: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER так что он все еще может быть безопасным, все равно следует это проверить.
Клэдми
Это потому, что моя команда установлена ​​как «NOPASSWD», поэтому она зависит от вашей конфигурации sudoers через «NOSETENV».
cladmi