Как вы используете sudo для запуска команды от имени пользователя root в Ubuntu? Первоначально я думал, что это стандартное поведение sudo, пока я не запустил:
myuser@localhost:~$ sudo echo `whoami`
myuser
myuser@localhost:~$ sudo -u root echo `whoami`
myuser
Тем не менее, это тип поведения, который я хочу, но только в одной строке:
myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root
whoami
? Просто скажите sudo whoami .. возвращает rootОтветы:
На самом деле он делает запускать их как корень. Но с вами происходит то, что обратные тики оцениваются перед
sudo
запусками, так как они необходимы для оценки команды. Более прямо, почему бы не просто так:Ваши
whoami
обратные галочки на самом деле оцениваются в подоболочке как текущий пользователь, поэтому вы видите, что делаете.источник
0
(ноль), которая является именно то , что люди называют «корень». (Вы были бы правы, если быsudo
только расширили свои возможности без фактического изменения UID. Но это не то, что он делает.)sudo
происходит на самом деле . Но после прочтения xyr ответа, похоже, это не так.Subshell (
whoami
) выполняется первым, как вы, а результат (myuser
) помещается вsudo
команду; то , чтоsudo
видитecho myuser
. Думайте об этом как ярлык для:источник
Кажется, здесь происходит некоторое предположение ...
Очевидно, что обратные пометки делают то, что объяснили другие, расширяясь
whoami
перед вызовом «sudo», и оставляя обратные пометки вне, возвращают «root», как и ожидалось.Но полезно понять, что на самом деле происходит с sudo (8). Так что я на самом деле посмотрел справочную страницу!
«Реальный и эффективный uid и gid настроены так, чтобы соответствовать целевому пользователю…»
Таким образом, похоже, что наблюдаемое поведение не имеет никакого отношения к разнице между эффективным и реальным идентификатором пользователя.
Также показательно сделать «sudo printenv» и сравнить с просто «printenv», что на самом деле меня немного удивило. Он показывает, что [i] некоторые [/ i] экспортируемые переменные доступны, а другие нет: он сообщает о вызывающем пользователе HOME, PATH, PS1, SHELL, TERM и EDITOR, но не о других, таких как MANPATH, CVSROOT, LD_LIBRARY_PATH или ENV. Это кажется немного странным, так как это может привести к тому, что программы будут вести себя не так, как они, либо как первоначальный пользователь, либо как пользователь root.
источник
sudo позволяет запускать любую команду с привилегиями root, но не как пользователь root. Причина, по которой это полезно, заключается в том, что при такой настройке несколько человек могут иметь права root, но все записи и т. Д. Все еще указывают, кто внес изменения.
Эта настройка лучше, чем разделение корневых паролей. Как таковой он заменил наличие корневых пользователей во многих дистрибутивах, включая Ubuntu.
С другой стороны, sudo su делает вас root-пользователями и поэтому не должен использоваться.
Эта разница также объясняет ваше наблюдаемое (правильное) поведение.
источник
Sudo временно предоставляет всем, кем вы являетесь (если вам разрешено sudo в первую очередь) привилегии корневого уровня.
Чтобы быть пользователем root, вам нужно войти в систему как пользователь root, который по умолчанию заблокирован в Ubuntu.
Вы должны быть осторожны с этим, sudo не root. Если вы хотите показать, что Фред выполняет что-то как sudo, проверьте переменные окружения SUDO, SUDO_COMMAND может быть наиболее полезным.
источник