$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
так что он sudo
может быть запущен любым пользователем, и любой пользователь, который запускается, sudo
будет иметь root в качестве эффективного идентификатора пользователя процесса, потому что установлен бит set-user-id /usr/bin/sudo
.
С https://unix.stackexchange.com/a/11287/674
Наиболее заметное различие между sudo и su в том, что sudo требует пароль пользователя, а su требует пароль root.
Какой пароль пользователя
sudo
запрашивает? Это пользователь, представленный реальным идентификатором пользователя процесса?Если да, не может ли какой-либо пользователь получить привилегию суперпользователя, запустив
sudo
и затем предоставив свой собственный пароль? Может ли Linux ограничить это для некоторых пользователей?Является ли это исправить , что
sudo
запрашивает пароль послеexecve()
того, как начинает выполнятьсяmain()
из/usr/bin/sudo
?Поскольку euid процесса был изменен на root (поскольку бит set-user-id в / usr / bin / sudo установлен), какой смысл sudo запрашивать пароль позже?
Спасибо.
Я прочитал https://unix.stackexchange.com/a/80350/674 , но он не отвечает на вопросы выше.
источник
Ответы:
В самой общей конфигурации,
sudo
запрашивает пароль пользователя работаетsudo
(как вы говорите, пользователь , соответствующий процессу реальный идентификатор пользователя). Смысл вsudo
том, чтобы предоставить дополнительные привилегии определенным пользователям (как определено в конфигурацииsudoers
), без необходимости предоставления этим пользователям какой-либо другой аутентификации, кроме их собственной. Темsudo
не менее, он проверяет,sudo
действительно ли пользователь, выполняющий приложение, является тем, кем он себя считает, и делает это, запрашивая свой пароль (или какой-либо другой механизм аутентификации, для которогоsudo
обычно используется PAM - так что это может включать отпечаток пальца или двухфакторный аутентификация и т. д.).sudo
не обязательно дает право стать пользователем root, оно может предоставлять различные привилегии. Любой пользователь, которому разрешено стать пользователем root,sudoers
может сделать это, используя только свою собственную аутентификацию; но пользователь не может, не может (по крайней мере, не используяsudo
). Это не обеспечивается самим Linux, ноsudo
(и его настройки аутентификации).sudo
действительно запрашивает пароль после его запуска; он не может сделать иначе ( то есть он не может ничего сделать до того, как начнет работать). Смыслsudo
запроса пароля, даже если он root, заключается в проверке личности работающего пользователя (в его типичной конфигурации).источник
sudo
обычно запрашивает пароль пользователя, который его запускает, хотя это можно настроить :Установка
rootpw
имеетsudo
всегда спрашивать пароль суперпользователя,targetpw
запрашивает пароль пользователяsudo
, в конечном счете запустить программу , как иrunaspw
запрашивает пароль множества пользователей вrunas_default
.Подобный
sudo
двоичный файл действительно может быть запущен любым пользователем с правами root. Если предположитьsudo
, что в коде аутентификации нет ошибок, это само по себе не имеет большого значения.Примерно так же, любой процесс может также выполнить код в режиме ядра, вызвав, скажем, любой системный вызов
open()
. (это не то же самое, что код пользовательского пространства и root.) Пока ядро не содержит ошибок, оно не сможет запускать произвольный код.источник
Из первой строки
man sudo
:Так:
Да, любой ( разрешенный ) пользователь может получить суперпользователю (или другим) дополнительные привилегии, запустив sudo, а затем предоставив ( настроенную ) требуемую аутентификацию. И разрешенные, и настроенные заданы в файле (ах) sudoers.
Может ли Linux ограничить это для некоторых пользователей?
Да, может, но это не так. В Linux установлено, что двоичный файл sudo может принимать решение на основе набора правил (политики безопасности) внутри программы sudo и внутри файла
/etc/sudoers
. Обычно могут использоваться другие файлы (также / вместо).От
man setresuid
:Единственный способ получить права суперпользователя, предоставляемые ядром, - запустить программу suid. Иначе быть не может. Это способ, которым Linux выбрал предоставление прав суперпользователя.
После того, как ядро загрузило исполняемый файл, который не может быть изменен любым другим пользователем (файл и каталог принадлежат пользователю root и доступен для записи только пользователю root), сам исполняемый файл (sudo) аутентифицирует пользователя, запрашивая его пароль (или что-то еще, как настроено) и решает, если и какие разрешения предоставить.
источник
Дополнительно к другим хорошим ответам о
sudo
:su
позволяет эффективно стать другим пользователем. На моем собственном компьютере я не работаю администратором для повседневного использования, а это значит, что я не могу (напрямую) пользоватьсяsudo
. Если я действительно хочу использоватьsudo
, я могу использовать,su
чтобы «стать» администратором пользователя, а затем в этой роли использоватьsudo
. В этой ситуации я в конечном итоге ввожу пароль учетной записи администратора дважды - один раз при запускеsu
и один раз при запускеsudo
.источник