Я работаю с участником службы поддержки по продукту, и он настаивает на том, что мне нужно быть пользователем root, чтобы установить серию исправлений, и что sudo не будет работать; он не приводит причину, но кажется очень твердым в своих убеждениях. Просматривая Superuser, я не могу определить возможную причину этого, и в подтверждение, когда я запускаю:
sudo -l
Я получил:
...
User [MY USERNAME] may run the following commands on this host:
(ALL) ALL
Как я понимаю, получение доступа от команды Linux / server для получения прав root не является непосредственным процессом, поэтому я бы предпочел установить их самостоятельно.
Есть ли практическая причина, по которой sudo будет вести себя иначе, чем root, при установке программного обеспечения на сервер?
sudo
и сценарии в настоящее время написаны. Если это так, то ответ SdS' может быть наиболее полезным для Вас:sudo su -
.Ответы:
Это сильно зависит от того, как вы вызываете свою программу с помощью
sudo
илиsu
.Например, система, в которой я нахожусь в данный момент:
Где [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Переменные окружения сбрасываются для 1 и 5, взятых из $ USER в 2,3,4.
Поэтому сценарий или программа , которая запускается с другим вариантом можно увидеть разные
$PATH
,$HOME
его оболочка может считывать разные.bashrc
,.profile
и переменные окружения. Он читает файл, связанный с$HOME
. Каждый пользователь может изменить свое окружение по-своему (переменные$PATH
, .bashrc, .profile, .bash_profile, псевдоним ...). В частности, у пользователя может быть другой порядок каталогов в его,$PATH
и, как следствие, сценарий может выполнить команду, например,/home/$USER/bin
вместо той, которая находится на пути, ожидаемом от root.Вы можете запустить программу под тем,
sudo -i
как вы вошли в систему как пользователь rootsu -
, но у вас может быть другое поведение, если вы запускаете ее сsudo MyCommand
или сsu -c MyCommand
.От
man su
:От мужчины
sudo
источник
sudo
может быть ограничено разрешениями в файле sudoers и действиями, так как root не имеет этих ограничений? Последняя цитата из блока, возможно, подразумевает это, но если я правильно понимаю, это похоже на еще одно существенное отличие не только от окружающей среды (или, может быть, из-за окружающей среды?).Если у вас есть полный
sudo
доступ, вы можете стать сroot
помощьюsudo su -
, поэтому точка безопасности является спорной.Действительно, есть способ различить разницу между запущенной
root
и запущенной программойsudo
- с использованиемgetuid
vsgeteuid
- но это хитрый прием. Зачем патч-система делает это?источник
su -
, он может захотеть использовать егоsudo -i
так, чтобы он имел ту же среду, что и при входе в систему напрямую.sudo myscript
вы сохраните переменные $ PATH и окружения из оболочки, в которой вы находитесь. Если вы работаете сsudo -i myscript
вами, вы запускаете, как если бы вы вошли в систему как root. Смотрите ответ с нашим _zoo звонков :-) _sudo
как при входе в систему как rootgeteuid()
иgetuid()
отличаются друг от друга, является мифом. su и sudo изменяют как действительные, так и эффективные идентификаторы пользователей на идентификаторы целевого пользователя перед запуском указанной команды или оболочки, за исключением очень необычной ситуации, в которой вы явно настроили их поведение иначе. Вы можете проверить это (для sudo), запустивsudo id -u
иsudo id -ru
(оба показывают 0), прочитав sudo (8) (в разделе COMMAND EXECUTION ) или написав тестовую программу .Есть несколько различий, если вы получаете корневую оболочку, как указывает @Hastur.
Если вы не получаете корневую оболочку, то есть больше различий. Опорный элемент может иметь опыт пытается сделать такие вещи , как ,
sudo patch -p0 < /root/patch.file
гдеpatch
работают как корень, но<
(конвейер из файла) не является.источник
sudo /bin/bash -c "./patch -p0 < /root/patch"
. Еще более деликатным является случай, когда вы используете перенаправление для создания файла>
. При первом способе вы создадите файл, который принадлежит пользователю, только если у вас достаточно прав для записи в окончательный каталог. В последнем случае вы создадите файл, принадлежащий пользователю root ... темная сторона Unix ;-)Я полагаю, что при использовании доступа sudo создается файл журнала, однако при запуске напрямую через root-доступ его нет.
источник
Это зависит от того, насколько хорошо вы хотите получить доступ с правами root. Если у вас есть несколько пользователей, которые выполняют разные задачи в системе, то sudo будет более идеальным. Одним из примеров, который я часто использую, является необходимость перезапустить приложение или базу данных. Безопасность всегда лучше всего делать с наименьшими привилегиями. Я использую группы и разрешаю только этим группам выполнять явные действия. Хорошая книга, описывающая этот процесс, - «Мастерство Судо: Контроль доступа пользователей для реальных людей». На самом деле это хорошая книга о sudo в целом ...
источник