Безопаснее ли сделать:
$ sudo dnf update
[введите пароль пользователя]
или
$ su - [enter root password] # dnf update
Я всегда предполагал, что это одно и то же, потому что sudo использует setuid-root, поэтому процесс, запущенный как первый аргумент sudo, запускается с эффективным идентификатором sudo, который является root.
Думаю, мой вопрос таков:Сбрасывает ли sudo в конечном итоге свой эффективный идентификатор до идентификатора обычного пользователя? Тогда в этом случае номер 1 выше будет более безопасной ставкой, потому что если программа, с которой работает sudo, скомпрометирована злоумышленником, то есть вероятность, что злоумышленник не работает как root, потому что привилегия уже была сброшена?
решение1
Эта первая команда (вероятно) потребует ваш правильный пароль, запустится dnf update
как root, а затем завершится:
$ sudo dnf update [enter user password]
Эта вторая команда потребует пароль root и затем запустит оболочку root. В этой оболочке вы запускаете dnf update
:
$ su - [enter root password] # dnf update
Вы на самом деле не сравниваете подобное с подобным. Вы могли бы сравнить эти две команды, обе из которых запускают оболочку root, в которой вы запускаете (по крайней мере) командуdnf update
sudo -s
dnf update
su -
dnf update
Или вы можете сравнить эти две команды, обе из которых запускают экземпляр с привилегиями root dnf update
, а затем возвращаются в оболочку вызывающей стороны.
sudo dnf update
su root -c 'dnf update'
Я думаю, на самом деле вы спрашиваете, что лучше: вызвать одну команду с привилегиями root или запустить оболочку с привилегиями root, в которой можно выполнить одну или несколько команд.
- Если
dnf
функциональность или ее загрузка каким-либо образом скомпрометированы, то неважно, как она запущена, проблема в том, что она вообще запущена. - Если вы говорите о компрометации вашей системы, то все сводится к безопасности пароля пользователя (
sudo
) по сравнению с паролем root (su
) - Если вы размышляете, можете ли вы доверять пользователю, то на самом деле не имеет значения, получите ли вы root-оболочку, в которой вы запускаете несколько команд, или root-оболочку, в которой вы запускаете одну команду за раз; проблема в том, что команды можно запускать как root.
Лично я смешиваю и подбираю свое использование в зависимости от необходимости. Я редко использую su
, но использую sudo {command....}
для быстрых одноразовых действий или sudo -s
для короткой сессии, когда мне нужно запустить несколько команд (например, Debian package management tools, apt-get update
за которыми следует apt-get upgrade
).
решение2
Yes sudo
сбрасывает привилегии при завершении дочернего процесса. В этом случае dnf
. Где as su
сбрасывает привилегии при завершении дочернего процесса. В этом случае интерактивная оболочка. Поэтому sudo
пример сбрасывает привилегии раньше.
sudo
также имеет другие преимущества, не рассмотренные здесь. (например sudoers
, файл может быть использован для предоставления большего контроля над тем, что каждый пользователь может делать, а что нет).